All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openxma.dsl.dom.parseTreeConstruction.DomDslParsetreeConstructor Maven / Gradle / Ivy

/*
* generated by Xtext
*/
package org.openxma.dsl.dom.parseTreeConstruction;

import org.eclipse.emf.ecore.*;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parsetree.reconstr.IEObjectConsumer;
import org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor;

import org.openxma.dsl.dom.services.DomDslGrammarAccess;

import com.google.inject.Inject;

@SuppressWarnings("all")
public class DomDslParsetreeConstructor extends AbstractParseTreeConstructor {
		
	@Inject
	private DomDslGrammarAccess grammarAccess;
	
	@Override
	protected AbstractToken getRootToken(IEObjectConsumer inst) {
		return new ThisRootNode(inst);	
	}
	
protected class ThisRootNode extends RootToken {
	public ThisRootNode(IEObjectConsumer inst) {
		super(inst);
	}
	
	@Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Model_Group(this, this, 0, inst);
			case 1: return new ModelElement_Alternatives(this, this, 1, inst);
			case 2: return new Type_ComplexTypeParserRuleCall(this, this, 2, inst);
			case 3: return new ComplexType_Alternatives(this, this, 3, inst);
			case 4: return new Service_Group(this, this, 4, inst);
			case 5: return new Dependant_Alternatives(this, this, 5, inst);
			case 6: return new Property_Group(this, this, 6, inst);
			case 7: return new Operation_Group(this, this, 7, inst);
			case 8: return new Parameter_Group(this, this, 8, inst);
			case 9: return new DelegateOperation_Group(this, this, 9, inst);
			case 10: return new DaoOperation_Alternatives(this, this, 10, inst);
			case 11: return new ValueObject_Group(this, this, 11, inst);
			case 12: return new DataView_Group(this, this, 12, inst);
			case 13: return new FeatureReference_Group(this, this, 13, inst);
			case 14: return new Mapper_Group(this, this, 14, inst);
			case 15: return new PropertyMapping_Group(this, this, 15, inst);
			case 16: return new Entity_Group(this, this, 16, inst);
			case 17: return new Attribute_Group(this, this, 17, inst);
			case 18: return new AttributeFlag_Alternatives(this, this, 18, inst);
			case 19: return new ExpressionFlag_Alternatives(this, this, 19, inst);
			case 20: return new RequiredFlag_Group(this, this, 20, inst);
			case 21: return new ReadOnlyFlag_Group(this, this, 21, inst);
			case 22: return new AvailableFlag_Group(this, this, 22, inst);
			case 23: return new DerivedFlag_Group(this, this, 23, inst);
			case 24: return new TransientFlag_Group(this, this, 24, inst);
			case 25: return new AttributeProperty_Alternatives(this, this, 25, inst);
			case 26: return new AttributeValidationProperty_Alternatives(this, this, 26, inst);
			case 27: return new AttributeTextProperty_Alternatives(this, this, 27, inst);
			case 28: return new AttributeGroup_Group(this, this, 28, inst);
			case 29: return new AttributeSortOrder_Group(this, this, 29, inst);
			case 30: return new DaoFeature_Alternatives(this, this, 30, inst);
			case 31: return new Dao_Group(this, this, 31, inst);
			case 32: return new QueryOperation_Group(this, this, 32, inst);
			case 33: return new QueryParameter_Alternatives(this, this, 33, inst);
			case 34: return new Column_Group(this, this, 34, inst);
			case 35: return new ManyToOne_Group(this, this, 35, inst);
			case 36: return new OneToOne_Group(this, this, 36, inst);
			case 37: return new OneToMany_Group(this, this, 37, inst);
			case 38: return new ManyToMany_Group(this, this, 38, inst);
			case 39: return new DataBaseConstraint_Group(this, this, 39, inst);
			case 40: return new ReferenceableByXmadslVariable_Alternatives(this, this, 40, inst);
			case 41: return new ApplicationSession_Group(this, this, 41, inst);
			case 42: return new SessionFunction_Group(this, this, 42, inst);
			case 43: return new QlStatement_Alternatives(this, this, 43, inst);
			case 44: return new CallableStatement_Group(this, this, 44, inst);
			case 45: return new CallInputParameter_Group(this, this, 45, inst);
			case 46: return new CallOutputParameter_Group(this, this, 46, inst);
			case 47: return new InsertStatement_Group(this, this, 47, inst);
			case 48: return new DeleteStatement_Group(this, this, 48, inst);
			case 49: return new UpdateStatement_Group(this, this, 49, inst);
			case 50: return new PropertyAssignment_Group(this, this, 50, inst);
			case 51: return new SelectStatement_Group(this, this, 51, inst);
			case 52: return new SortOrderElement_Group(this, this, 52, inst);
			case 53: return new SelectProperties_Group(this, this, 53, inst);
			case 54: return new SelectClass_Group(this, this, 54, inst);
			case 55: return new SelectObject_Group(this, this, 55, inst);
			case 56: return new FromRange_Alternatives(this, this, 56, inst);
			case 57: return new FromClass_Group(this, this, 57, inst);
			case 58: return new InClass_Group(this, this, 58, inst);
			case 59: return new InCollection_Group(this, this, 59, inst);
			case 60: return new InCollectionElements_Group(this, this, 60, inst);
			case 61: return new Join_Group(this, this, 61, inst);
			case 62: return new JoinEntity_Alternatives(this, this, 62, inst);
			case 63: return new AliasedExpression_Group(this, this, 63, inst);
			case 64: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 64, inst);
			case 65: return new LogicalOrExpression_Group(this, this, 65, inst);
			case 66: return new LogicalAndExpression_Group(this, this, 66, inst);
			case 67: return new PrefixExpression_Alternatives(this, this, 67, inst);
			case 68: return new EqualityExpression_Group(this, this, 68, inst);
			case 69: return new RelationalExpression_Group(this, this, 69, inst);
			case 70: return new ConcatenationExpression_Group(this, this, 70, inst);
			case 71: return new AdditiveExpression_Group(this, this, 71, inst);
			case 72: return new MultiplyExpression_Group(this, this, 72, inst);
			case 73: return new UnaryExpression_Alternatives(this, this, 73, inst);
			case 74: return new PrimaryExpression_Alternatives(this, this, 74, inst);
			case 75: return new PropertyValue_Group(this, this, 75, inst);
			case 76: return new FunctionCall_Group(this, this, 76, inst);
			case 77: return new TrimFunction_Group(this, this, 77, inst);
			case 78: return new CastFunction_Alternatives(this, this, 78, inst);
			case 79: return new AggregateFunction_Alternatives(this, this, 79, inst);
			case 80: return new QueryParameterReference_Alternatives(this, this, 80, inst);
			case 81: return new QueryParameterValue_Group(this, this, 81, inst);
			case 82: return new QuantifiedExpression_Group(this, this, 82, inst);
			case 83: return new CaseExpression_Alternatives(this, this, 83, inst);
			case 84: return new WhenClause_Group(this, this, 84, inst);
			case 85: return new AltWhenClause_Group(this, this, 85, inst);
			case 86: return new CollectionFunction_Group(this, this, 86, inst);
			case 87: return new SubQuery_Group(this, this, 87, inst);
			case 88: return new ParenthesizedExpression_Group(this, this, 88, inst);
			case 89: return new LiteralValue_Alternatives(this, this, 89, inst);
			case 90: return new StringLiteralValue_Group(this, this, 90, inst);
			case 91: return new IntegerLiteralValue_Group(this, this, 91, inst);
			case 92: return new RealLiteralValue_Group(this, this, 92, inst);
			case 93: return new BooleanLiteralValue_Alternatives(this, this, 93, inst);
			case 94: return new NullLiteralValue_Group(this, this, 94, inst);
			case 95: return new EmptyLiteralValue_Group(this, this, 95, inst);
			case 96: return new IElementWithNoName_NoNameAssignment(this, this, 96, inst);
			case 97: return new PresentableFeature_Group(this, this, 97, inst);
			case 98: return new Import_Alternatives(this, this, 98, inst);
			case 99: return new SimpleType_Alternatives(this, this, 99, inst);
			case 100: return new SqlType_Group(this, this, 100, inst);
			case 101: return new EnumType_Group(this, this, 101, inst);
			case 102: return new EnumLiteral_Group(this, this, 102, inst);
			case 103: return new ParameterDefinition_Group(this, this, 103, inst);
			case 104: return new ReferenceWithParameter_Alternatives(this, this, 104, inst);
			case 105: return new ValidatorReference_Group(this, this, 105, inst);
			case 106: return new Validator_Group(this, this, 106, inst);
			case 107: return new Incrementer_Group(this, this, 107, inst);
			case 108: return new IncrementerReference_Group(this, this, 108, inst);
			case 109: return new Editor_Group(this, this, 109, inst);
			case 110: return new Style_Group(this, this, 110, inst);
			case 111: return new TypeDefinition_Alternatives(this, this, 111, inst);
			case 112: return new DataTypeAndTypeParameter_Group(this, this, 112, inst);
			case 113: return new ParameterValue_Alternatives(this, this, 113, inst);
			case 114: return new IntegerParameterValue_IntValueAssignment(this, this, 114, inst);
			case 115: return new StringParameterValue_StringValueAssignment(this, this, 115, inst);
			case 116: return new BooleanParameterValue_BooleanValueAssignment(this, this, 116, inst);
			case 117: return new ConditionsBlock_Group(this, this, 117, inst);
			case 118: return new Constraint_Group(this, this, 118, inst);
			case 119: return new EqualityExpr_Group(this, this, 119, inst);
			case 120: return new CondORExpr_Group(this, this, 120, inst);
			case 121: return new CondORRights_Group(this, this, 121, inst);
			case 122: return new CondANDExpr_Group(this, this, 122, inst);
			case 123: return new CondANDRights_Group(this, this, 123, inst);
			case 124: return new AtomicBoolExpr_RelationalExprParserRuleCall(this, this, 124, inst);
			case 125: return new RelationalExpr_Group(this, this, 125, inst);
			case 126: return new AdditiveExpr_Group(this, this, 126, inst);
			case 127: return new AdditiveRights_Group(this, this, 127, inst);
			case 128: return new MultiplicativeExpr_Group(this, this, 128, inst);
			case 129: return new MultiplicativeRights_Group(this, this, 129, inst);
			case 130: return new AtomicExpr_Alternatives(this, this, 130, inst);
			case 131: return new Variable_XmadslVariableParserRuleCall(this, this, 131, inst);
			case 132: return new XmadslVariable_Group(this, this, 132, inst);
			case 133: return new StatusFlag_Group(this, this, 133, inst);
			case 134: return new Call_Group(this, this, 134, inst);
			case 135: return new Function_Group(this, this, 135, inst);
			case 136: return new ParenExpr_Group(this, this, 136, inst);
			case 137: return new Literal_Alternatives(this, this, 137, inst);
			case 138: return new IntLiteral_NumberAssignment(this, this, 138, inst);
			case 139: return new StringLiteral_StringAssignment(this, this, 139, inst);
			case 140: return new BoolLiteral_Alternatives(this, this, 140, inst);
			case 141: return new TrueLiteral_Group(this, this, 141, inst);
			case 142: return new FalseLiteral_Group(this, this, 142, inst);
			default: return null;
		}	
	}	
}
	

/************ begin Rule Model ****************
 *
 * Model returns core::Model:
 * 	{core::Model} ("namespace" name=QualifiedName)? imports+=Import* elements+=ModelElement*;
 *
 **/

// {core::Model} ("namespace" name=QualifiedName)? imports+=Import* elements+=ModelElement*
protected class Model_Group extends GroupToken {
	
	public Model_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getModelAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Model_ElementsAssignment_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Model_ImportsAssignment_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Model_Group_1(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Model_ModelAction_0(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getModelAccess().getModelAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {core::Model}
protected class Model_ModelAction_0 extends ActionToken  {

	public Model_ModelAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getModelAccess().getModelAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// ("namespace" name=QualifiedName)?
protected class Model_Group_1 extends GroupToken {
	
	public Model_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getModelAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Model_NameAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "namespace"
protected class Model_NamespaceKeyword_1_0 extends KeywordToken  {
	
	public Model_NamespaceKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getModelAccess().getNamespaceKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Model_ModelAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name=QualifiedName
protected class Model_NameAssignment_1_1 extends AssignmentToken  {
	
	public Model_NameAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getModelAccess().getNameAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Model_NamespaceKeyword_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getModelAccess().getNameQualifiedNameParserRuleCall_1_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getModelAccess().getNameQualifiedNameParserRuleCall_1_1_0();
			return obj;
		}
		return null;
	}

}


// imports+=Import*
protected class Model_ImportsAssignment_2 extends AssignmentToken  {
	
	public Model_ImportsAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getModelAccess().getImportsAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Import_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("imports",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("imports");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getImportRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getModelAccess().getImportsImportParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Model_ImportsAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Model_Group_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new Model_ModelAction_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// elements+=ModelElement*
protected class Model_ElementsAssignment_3 extends AssignmentToken  {
	
	public Model_ElementsAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getModelAccess().getElementsAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ModelElement_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("elements",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("elements");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getModelElementRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getModelAccess().getElementsModelElementParserRuleCall_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Model_ElementsAssignment_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Model_ImportsAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new Model_Group_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new Model_ModelAction_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule Model ****************/


/************ begin Rule ModelElement ****************
 *
 * ModelElement returns core::ModelElement:
 * 	ApplicationSession | Service | ComplexType | Dao | Mapper;
 *
 **/

// ApplicationSession | Service | ComplexType | Dao | Mapper
protected class ModelElement_Alternatives extends AlternativesToken {

	public ModelElement_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getModelElementAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ModelElement_ApplicationSessionParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ModelElement_ServiceParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ModelElement_ComplexTypeParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ModelElement_DaoParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new ModelElement_MapperParserRuleCall_4(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getApplicationSessionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getDaoRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getDataViewRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEntityRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMapperRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getServiceRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getValueObjectRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// ApplicationSession
protected class ModelElement_ApplicationSessionParserRuleCall_0 extends RuleCallToken {
	
	public ModelElement_ApplicationSessionParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getModelElementAccess().getApplicationSessionParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ApplicationSession_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getApplicationSessionRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ApplicationSession_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Service
protected class ModelElement_ServiceParserRuleCall_1 extends RuleCallToken {
	
	public ModelElement_ServiceParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getModelElementAccess().getServiceParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getServiceRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Service_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ComplexType
protected class ModelElement_ComplexTypeParserRuleCall_2 extends RuleCallToken {
	
	public ModelElement_ComplexTypeParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getModelElementAccess().getComplexTypeParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ComplexType_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDataViewRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEntityRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getValueObjectRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ComplexType_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Dao
protected class ModelElement_DaoParserRuleCall_3 extends RuleCallToken {
	
	public ModelElement_DaoParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getModelElementAccess().getDaoParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDaoRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Dao_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Mapper
protected class ModelElement_MapperParserRuleCall_4 extends RuleCallToken {
	
	public ModelElement_MapperParserRuleCall_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getModelElementAccess().getMapperParserRuleCall_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getMapperRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Mapper_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule ModelElement ****************/


/************ begin Rule Type ****************
 *
 * Type returns core::Type:
 * 	ComplexType;
 *
 **/

// ComplexType
protected class Type_ComplexTypeParserRuleCall extends RuleCallToken {
	
	public Type_ComplexTypeParserRuleCall(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getTypeAccess().getComplexTypeParserRuleCall();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ComplexType_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDataViewRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEntityRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getValueObjectRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ComplexType_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

/************ end Rule Type ****************/


/************ begin Rule ComplexType ****************
 *
 * ComplexType:
 * 	Entity | DataView | ValueObject;
 *
 **/

// Entity | DataView | ValueObject
protected class ComplexType_Alternatives extends AlternativesToken {

	public ComplexType_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getComplexTypeAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ComplexType_EntityParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ComplexType_DataViewParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ComplexType_ValueObjectParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDataViewRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEntityRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getValueObjectRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// Entity
protected class ComplexType_EntityParserRuleCall_0 extends RuleCallToken {
	
	public ComplexType_EntityParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getComplexTypeAccess().getEntityParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Entity_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEntityRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Entity_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// DataView
protected class ComplexType_DataViewParserRuleCall_1 extends RuleCallToken {
	
	public ComplexType_DataViewParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getComplexTypeAccess().getDataViewParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataView_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDataViewRule().getType().getClassifier())
			return null;
		if(checkForRecursion(DataView_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ValueObject
protected class ComplexType_ValueObjectParserRuleCall_2 extends RuleCallToken {
	
	public ComplexType_ValueObjectParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getComplexTypeAccess().getValueObjectParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValueObject_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getValueObjectRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ValueObject_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule ComplexType ****************/


/************ begin Rule Service ****************
 *
 * Service:
 * 	"service" name=ID ("uses" dependencies+=[Dependant|QualifiedName] ("," dependencies+=[Dependant|QualifiedName])*)? "{"
 * 	(operations+=Operation | delegateOperations+=DelegateOperation)* "}";
 *
 **/

// "service" name=ID ("uses" dependencies+=[Dependant|QualifiedName] ("," dependencies+=[Dependant|QualifiedName])*)? "{"
// (operations+=Operation | delegateOperations+=DelegateOperation)* "}"
protected class Service_Group extends GroupToken {
	
	public Service_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getServiceAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_RightCurlyBracketKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getServiceRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "service"
protected class Service_ServiceKeyword_0 extends KeywordToken  {
	
	public Service_ServiceKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getServiceAccess().getServiceKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class Service_NameAssignment_1 extends AssignmentToken  {
	
	public Service_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getServiceAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_ServiceKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getServiceAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getServiceAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("uses" dependencies+=[Dependant|QualifiedName] ("," dependencies+=[Dependant|QualifiedName])*)?
protected class Service_Group_2 extends GroupToken {
	
	public Service_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getServiceAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_Group_2_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Service_DependenciesAssignment_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "uses"
protected class Service_UsesKeyword_2_0 extends KeywordToken  {
	
	public Service_UsesKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getServiceAccess().getUsesKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// dependencies+=[Dependant|QualifiedName]
protected class Service_DependenciesAssignment_2_1 extends AssignmentToken  {
	
	public Service_DependenciesAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getServiceAccess().getDependenciesAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_UsesKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("dependencies",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dependencies");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getServiceAccess().getDependenciesDependantCrossReference_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getServiceAccess().getDependenciesDependantCrossReference_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("," dependencies+=[Dependant|QualifiedName])*
protected class Service_Group_2_2 extends GroupToken {
	
	public Service_Group_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getServiceAccess().getGroup_2_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_DependenciesAssignment_2_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class Service_CommaKeyword_2_2_0 extends KeywordToken  {
	
	public Service_CommaKeyword_2_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getServiceAccess().getCommaKeyword_2_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_Group_2_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Service_DependenciesAssignment_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// dependencies+=[Dependant|QualifiedName]
protected class Service_DependenciesAssignment_2_2_1 extends AssignmentToken  {
	
	public Service_DependenciesAssignment_2_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getServiceAccess().getDependenciesAssignment_2_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_CommaKeyword_2_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("dependencies",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dependencies");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getServiceAccess().getDependenciesDependantCrossReference_2_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getServiceAccess().getDependenciesDependantCrossReference_2_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}



// "{"
protected class Service_LeftCurlyBracketKeyword_3 extends KeywordToken  {
	
	public Service_LeftCurlyBracketKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getServiceAccess().getLeftCurlyBracketKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Service_NameAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// (operations+=Operation | delegateOperations+=DelegateOperation)*
protected class Service_Alternatives_4 extends AlternativesToken {

	public Service_Alternatives_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getServiceAccess().getAlternatives_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_OperationsAssignment_4_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Service_DelegateOperationsAssignment_4_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// operations+=Operation
protected class Service_OperationsAssignment_4_0 extends AssignmentToken  {
	
	public Service_OperationsAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getServiceAccess().getOperationsAssignment_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operations",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operations");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getOperationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getServiceAccess().getOperationsOperationParserRuleCall_4_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Service_Alternatives_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Service_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// delegateOperations+=DelegateOperation
protected class Service_DelegateOperationsAssignment_4_1 extends AssignmentToken  {
	
	public Service_DelegateOperationsAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getServiceAccess().getDelegateOperationsAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("delegateOperations",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("delegateOperations");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDelegateOperationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getServiceAccess().getDelegateOperationsDelegateOperationParserRuleCall_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Service_Alternatives_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Service_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class Service_RightCurlyBracketKeyword_5 extends KeywordToken  {
	
	public Service_RightCurlyBracketKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getServiceAccess().getRightCurlyBracketKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_Alternatives_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Service_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule Service ****************/


/************ begin Rule Dependant ****************
 *
 * Dependant:
 * 	Service | Dao | Entity;
 *
 **/

// Service | Dao | Entity
protected class Dependant_Alternatives extends AlternativesToken {

	public Dependant_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getDependantAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dependant_ServiceParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Dependant_DaoParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Dependant_EntityParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDaoRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEntityRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getServiceRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// Service
protected class Dependant_ServiceParserRuleCall_0 extends RuleCallToken {
	
	public Dependant_ServiceParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDependantAccess().getServiceParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Service_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getServiceRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Service_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Dao
protected class Dependant_DaoParserRuleCall_1 extends RuleCallToken {
	
	public Dependant_DaoParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDependantAccess().getDaoParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDaoRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Dao_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Entity
protected class Dependant_EntityParserRuleCall_2 extends RuleCallToken {
	
	public Dependant_EntityParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDependantAccess().getEntityParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Entity_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEntityRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Entity_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule Dependant ****************/


/************ begin Rule Property ****************
 *
 * Property:
 * 	"property" type=[core::SimpleType|QualifiedName] name=ID ("=" defaultValue=STRING)?;
 *
 **/

// "property" type=[core::SimpleType|QualifiedName] name=ID ("=" defaultValue=STRING)?
protected class Property_Group extends GroupToken {
	
	public Property_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPropertyAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Property_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Property_NameAssignment_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPropertyRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "property"
protected class Property_PropertyKeyword_0 extends KeywordToken  {
	
	public Property_PropertyKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPropertyAccess().getPropertyKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// type=[core::SimpleType|QualifiedName]
protected class Property_TypeAssignment_1 extends AssignmentToken  {
	
	public Property_TypeAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyAccess().getTypeAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Property_PropertyKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyAccess().getTypeSimpleTypeCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getPropertyAccess().getTypeSimpleTypeCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// name=ID
protected class Property_NameAssignment_2 extends AssignmentToken  {
	
	public Property_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Property_TypeAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPropertyAccess().getNameIDTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getPropertyAccess().getNameIDTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ("=" defaultValue=STRING)?
protected class Property_Group_3 extends GroupToken {
	
	public Property_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPropertyAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Property_DefaultValueAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "="
protected class Property_EqualsSignKeyword_3_0 extends KeywordToken  {
	
	public Property_EqualsSignKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPropertyAccess().getEqualsSignKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Property_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// defaultValue=STRING
protected class Property_DefaultValueAssignment_3_1 extends AssignmentToken  {
	
	public Property_DefaultValueAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyAccess().getDefaultValueAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Property_EqualsSignKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("defaultValue",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("defaultValue");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPropertyAccess().getDefaultValueSTRINGTerminalRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getPropertyAccess().getDefaultValueSTRINGTerminalRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule Property ****************/


/************ begin Rule Operation ****************
 *
 * Operation:
 * 	"operation" (type=[core::Type|QualifiedName] many?="[]"?)? name=ID "(" (parameters+=Parameter (","
 * 	parameters+=Parameter)*)? ")" ("=" expression=STRING)?;
 *
 **/

// "operation" (type=[core::Type|QualifiedName] many?="[]"?)? name=ID "(" (parameters+=Parameter (","
// parameters+=Parameter)*)? ")" ("=" expression=STRING)?
protected class Operation_Group extends GroupToken {
	
	public Operation_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getOperationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_Group_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Operation_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getOperationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "operation"
protected class Operation_OperationKeyword_0 extends KeywordToken  {
	
	public Operation_OperationKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getOperationAccess().getOperationKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// (type=[core::Type|QualifiedName] many?="[]"?)?
protected class Operation_Group_1 extends GroupToken {
	
	public Operation_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getOperationAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_ManyAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Operation_TypeAssignment_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// type=[core::Type|QualifiedName]
protected class Operation_TypeAssignment_1_0 extends AssignmentToken  {
	
	public Operation_TypeAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getOperationAccess().getTypeAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_OperationKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getOperationAccess().getTypeTypeCrossReference_1_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getOperationAccess().getTypeTypeCrossReference_1_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// many?="[]"?
protected class Operation_ManyAssignment_1_1 extends AssignmentToken  {
	
	public Operation_ManyAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getOperationAccess().getManyAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_TypeAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("many",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("many");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getOperationAccess().getManyLeftSquareBracketRightSquareBracketKeyword_1_1_0();
			return obj;
		}
		return null;
	}

}


// name=ID
protected class Operation_NameAssignment_2 extends AssignmentToken  {
	
	public Operation_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getOperationAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Operation_OperationKeyword_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getOperationAccess().getNameIDTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getOperationAccess().getNameIDTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class Operation_LeftParenthesisKeyword_3 extends KeywordToken  {
	
	public Operation_LeftParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getOperationAccess().getLeftParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// (parameters+=Parameter ("," parameters+=Parameter)*)?
protected class Operation_Group_4 extends GroupToken {
	
	public Operation_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getOperationAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_Group_4_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Operation_ParametersAssignment_4_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// parameters+=Parameter
protected class Operation_ParametersAssignment_4_0 extends AssignmentToken  {
	
	public Operation_ParametersAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getOperationAccess().getParametersAssignment_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Parameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameters",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameters");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getOperationAccess().getParametersParameterParserRuleCall_4_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Operation_LeftParenthesisKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," parameters+=Parameter)*
protected class Operation_Group_4_1 extends GroupToken {
	
	public Operation_Group_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getOperationAccess().getGroup_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_ParametersAssignment_4_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class Operation_CommaKeyword_4_1_0 extends KeywordToken  {
	
	public Operation_CommaKeyword_4_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getOperationAccess().getCommaKeyword_4_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_Group_4_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Operation_ParametersAssignment_4_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// parameters+=Parameter
protected class Operation_ParametersAssignment_4_1_1 extends AssignmentToken  {
	
	public Operation_ParametersAssignment_4_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getOperationAccess().getParametersAssignment_4_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Parameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameters",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameters");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getOperationAccess().getParametersParameterParserRuleCall_4_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Operation_CommaKeyword_4_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



// ")"
protected class Operation_RightParenthesisKeyword_5 extends KeywordToken  {
	
	public Operation_RightParenthesisKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getOperationAccess().getRightParenthesisKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Operation_LeftParenthesisKeyword_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// ("=" expression=STRING)?
protected class Operation_Group_6 extends GroupToken {
	
	public Operation_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getOperationAccess().getGroup_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_ExpressionAssignment_6_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "="
protected class Operation_EqualsSignKeyword_6_0 extends KeywordToken  {
	
	public Operation_EqualsSignKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getOperationAccess().getEqualsSignKeyword_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// expression=STRING
protected class Operation_ExpressionAssignment_6_1 extends AssignmentToken  {
	
	public Operation_ExpressionAssignment_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getOperationAccess().getExpressionAssignment_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_EqualsSignKeyword_6_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getOperationAccess().getExpressionSTRINGTerminalRuleCall_6_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getOperationAccess().getExpressionSTRINGTerminalRuleCall_6_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule Operation ****************/


/************ begin Rule Parameter ****************
 *
 * Parameter:
 * 	type=[core::Type|QualifiedName] many?="[]"? name=ID;
 *
 **/

// type=[core::Type|QualifiedName] many?="[]"? name=ID
protected class Parameter_Group extends GroupToken {
	
	public Parameter_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getParameterAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Parameter_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParameterRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// type=[core::Type|QualifiedName]
protected class Parameter_TypeAssignment_0 extends AssignmentToken  {
	
	public Parameter_TypeAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParameterAccess().getTypeAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterAccess().getTypeTypeCrossReference_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getParameterAccess().getTypeTypeCrossReference_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// many?="[]"?
protected class Parameter_ManyAssignment_1 extends AssignmentToken  {
	
	public Parameter_ManyAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParameterAccess().getManyAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Parameter_TypeAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("many",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("many");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getParameterAccess().getManyLeftSquareBracketRightSquareBracketKeyword_1_0();
			return obj;
		}
		return null;
	}

}

// name=ID
protected class Parameter_NameAssignment_2 extends AssignmentToken  {
	
	public Parameter_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParameterAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Parameter_ManyAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Parameter_TypeAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getParameterAccess().getNameIDTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getParameterAccess().getNameIDTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule Parameter ****************/


/************ begin Rule DelegateOperation ****************
 *
 * DelegateOperation:
 * 	{DelegateOperation} (view=[DataView] many?="[]"?)? repository=[Dao] "." (operation=[DaoOperation] |
 * 	crudOperationType=CrudOperationType ("(" viewParameter=[DataView|QualifiedName] ")")?) ("as" name=ID)? ("filter" "="
 * 	filter=Expression)?;
 *
 **/

// {DelegateOperation} (view=[DataView] many?="[]"?)? repository=[Dao] "." (operation=[DaoOperation] |
// crudOperationType=CrudOperationType ("(" viewParameter=[DataView|QualifiedName] ")")?) ("as" name=ID)? ("filter" "="
// filter=Expression)?
protected class DelegateOperation_Group extends GroupToken {
	
	public DelegateOperation_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_Group_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DelegateOperation_Group_5(lastRuleCallOrigin, this, 1, inst);
			case 2: return new DelegateOperation_Alternatives_4(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDelegateOperationAccess().getDelegateOperationAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {DelegateOperation}
protected class DelegateOperation_DelegateOperationAction_0 extends ActionToken  {

	public DelegateOperation_DelegateOperationAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getDelegateOperationAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// (view=[DataView] many?="[]"?)?
protected class DelegateOperation_Group_1 extends GroupToken {
	
	public DelegateOperation_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_ManyAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DelegateOperation_ViewAssignment_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// view=[DataView]
protected class DelegateOperation_ViewAssignment_1_0 extends AssignmentToken  {
	
	public DelegateOperation_ViewAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getViewAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_DelegateOperationAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("view",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("view");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDelegateOperationAccess().getViewDataViewCrossReference_1_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getDelegateOperationAccess().getViewDataViewCrossReference_1_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// many?="[]"?
protected class DelegateOperation_ManyAssignment_1_1 extends AssignmentToken  {
	
	public DelegateOperation_ManyAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getManyAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_ViewAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("many",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("many");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getDelegateOperationAccess().getManyLeftSquareBracketRightSquareBracketKeyword_1_1_0();
			return obj;
		}
		return null;
	}

}


// repository=[Dao]
protected class DelegateOperation_RepositoryAssignment_2 extends AssignmentToken  {
	
	public DelegateOperation_RepositoryAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getRepositoryAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DelegateOperation_DelegateOperationAction_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("repository",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("repository");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDelegateOperationAccess().getRepositoryDaoCrossReference_2_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getDelegateOperationAccess().getRepositoryDaoCrossReference_2_0(); 
				return obj;
			}
		}
		return null;
	}

}

// "."
protected class DelegateOperation_FullStopKeyword_3 extends KeywordToken  {
	
	public DelegateOperation_FullStopKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getFullStopKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_RepositoryAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// operation=[DaoOperation] | crudOperationType=CrudOperationType ("(" viewParameter=[DataView|QualifiedName] ")")?
protected class DelegateOperation_Alternatives_4 extends AlternativesToken {

	public DelegateOperation_Alternatives_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getAlternatives_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_OperationAssignment_4_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DelegateOperation_Group_4_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// operation=[DaoOperation]
protected class DelegateOperation_OperationAssignment_4_0 extends AssignmentToken  {
	
	public DelegateOperation_OperationAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getOperationAssignment_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_FullStopKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operation",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operation");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDelegateOperationAccess().getOperationDaoOperationCrossReference_4_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getDelegateOperationAccess().getOperationDaoOperationCrossReference_4_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// crudOperationType=CrudOperationType ("(" viewParameter=[DataView|QualifiedName] ")")?
protected class DelegateOperation_Group_4_1 extends GroupToken {
	
	public DelegateOperation_Group_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getGroup_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_Group_4_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DelegateOperation_CrudOperationTypeAssignment_4_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// crudOperationType=CrudOperationType
protected class DelegateOperation_CrudOperationTypeAssignment_4_1_0 extends AssignmentToken  {
	
	public DelegateOperation_CrudOperationTypeAssignment_4_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getCrudOperationTypeAssignment_4_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_FullStopKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("crudOperationType",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("crudOperationType");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getDelegateOperationAccess().getCrudOperationTypeCrudOperationTypeEnumRuleCall_4_1_0_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getDelegateOperationAccess().getCrudOperationTypeCrudOperationTypeEnumRuleCall_4_1_0_0();
			return obj;
		}
		return null;
	}

}

// ("(" viewParameter=[DataView|QualifiedName] ")")?
protected class DelegateOperation_Group_4_1_1 extends GroupToken {
	
	public DelegateOperation_Group_4_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getGroup_4_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_RightParenthesisKeyword_4_1_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class DelegateOperation_LeftParenthesisKeyword_4_1_1_0 extends KeywordToken  {
	
	public DelegateOperation_LeftParenthesisKeyword_4_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getLeftParenthesisKeyword_4_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_CrudOperationTypeAssignment_4_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// viewParameter=[DataView|QualifiedName]
protected class DelegateOperation_ViewParameterAssignment_4_1_1_1 extends AssignmentToken  {
	
	public DelegateOperation_ViewParameterAssignment_4_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getViewParameterAssignment_4_1_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_LeftParenthesisKeyword_4_1_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("viewParameter",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("viewParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDelegateOperationAccess().getViewParameterDataViewCrossReference_4_1_1_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getDelegateOperationAccess().getViewParameterDataViewCrossReference_4_1_1_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ")"
protected class DelegateOperation_RightParenthesisKeyword_4_1_1_2 extends KeywordToken  {
	
	public DelegateOperation_RightParenthesisKeyword_4_1_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getRightParenthesisKeyword_4_1_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_ViewParameterAssignment_4_1_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}




// ("as" name=ID)?
protected class DelegateOperation_Group_5 extends GroupToken {
	
	public DelegateOperation_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_NameAssignment_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "as"
protected class DelegateOperation_AsKeyword_5_0 extends KeywordToken  {
	
	public DelegateOperation_AsKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getAsKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_Alternatives_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name=ID
protected class DelegateOperation_NameAssignment_5_1 extends AssignmentToken  {
	
	public DelegateOperation_NameAssignment_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getNameAssignment_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_AsKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDelegateOperationAccess().getNameIDTerminalRuleCall_5_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getDelegateOperationAccess().getNameIDTerminalRuleCall_5_1_0();
			return obj;
		}
		return null;
	}

}


// ("filter" "=" filter=Expression)?
protected class DelegateOperation_Group_6 extends GroupToken {
	
	public DelegateOperation_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getGroup_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_FilterAssignment_6_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "filter"
protected class DelegateOperation_FilterKeyword_6_0 extends KeywordToken  {
	
	public DelegateOperation_FilterKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getFilterKeyword_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DelegateOperation_Alternatives_4(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "="
protected class DelegateOperation_EqualsSignKeyword_6_1 extends KeywordToken  {
	
	public DelegateOperation_EqualsSignKeyword_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getEqualsSignKeyword_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DelegateOperation_FilterKeyword_6_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// filter=Expression
protected class DelegateOperation_FilterAssignment_6_2 extends AssignmentToken  {
	
	public DelegateOperation_FilterAssignment_6_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDelegateOperationAccess().getFilterAssignment_6_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("filter",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("filter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDelegateOperationAccess().getFilterExpressionParserRuleCall_6_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new DelegateOperation_EqualsSignKeyword_6_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule DelegateOperation ****************/


/************ begin Rule DaoOperation ****************
 *
 * DaoOperation:
 * 	QueryOperation | Operation;
 *
 **/

// QueryOperation | Operation
protected class DaoOperation_Alternatives extends AlternativesToken {

	public DaoOperation_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getDaoOperationAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DaoOperation_QueryOperationParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DaoOperation_OperationParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getOperationRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryOperationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// QueryOperation
protected class DaoOperation_QueryOperationParserRuleCall_0 extends RuleCallToken {
	
	public DaoOperation_QueryOperationParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDaoOperationAccess().getQueryOperationParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getQueryOperationRule().getType().getClassifier())
			return null;
		if(checkForRecursion(QueryOperation_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Operation
protected class DaoOperation_OperationParserRuleCall_1 extends RuleCallToken {
	
	public DaoOperation_OperationParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDaoOperationAccess().getOperationParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getOperationRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Operation_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule DaoOperation ****************/


/************ begin Rule ValueObject ****************
 *
 * ValueObject:
 * 	"valueobject" name=ID "{" attributes+=Attribute* "}";
 *
 **/

// "valueobject" name=ID "{" attributes+=Attribute* "}"
protected class ValueObject_Group extends GroupToken {
	
	public ValueObject_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getValueObjectAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValueObject_RightCurlyBracketKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getValueObjectRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "valueobject"
protected class ValueObject_ValueobjectKeyword_0 extends KeywordToken  {
	
	public ValueObject_ValueobjectKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValueObjectAccess().getValueobjectKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class ValueObject_NameAssignment_1 extends AssignmentToken  {
	
	public ValueObject_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getValueObjectAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValueObject_ValueobjectKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getValueObjectAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getValueObjectAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// "{"
protected class ValueObject_LeftCurlyBracketKeyword_2 extends KeywordToken  {
	
	public ValueObject_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValueObjectAccess().getLeftCurlyBracketKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValueObject_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// attributes+=Attribute*
protected class ValueObject_AttributesAssignment_3 extends AssignmentToken  {
	
	public ValueObject_AttributesAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getValueObjectAccess().getAttributesAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attributes",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attributes");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributeRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getValueObjectAccess().getAttributesAttributeParserRuleCall_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ValueObject_AttributesAssignment_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ValueObject_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class ValueObject_RightCurlyBracketKeyword_4 extends KeywordToken  {
	
	public ValueObject_RightCurlyBracketKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValueObjectAccess().getRightCurlyBracketKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValueObject_AttributesAssignment_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ValueObject_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule ValueObject ****************/


/************ begin Rule DataView ****************
 *
 * DataView:
 * 	"dataview" name=ID ("extends" superType=[DataView|QualifiedName])? "{" (attributes+=Attribute |
 * 	featureReferences+=FeatureReference)* "}";
 *
 **/

// "dataview" name=ID ("extends" superType=[DataView|QualifiedName])? "{" (attributes+=Attribute |
// featureReferences+=FeatureReference)* "}"
protected class DataView_Group extends GroupToken {
	
	public DataView_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataViewAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataView_RightCurlyBracketKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDataViewRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "dataview"
protected class DataView_DataviewKeyword_0 extends KeywordToken  {
	
	public DataView_DataviewKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataViewAccess().getDataviewKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class DataView_NameAssignment_1 extends AssignmentToken  {
	
	public DataView_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataViewAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataView_DataviewKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDataViewAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getDataViewAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("extends" superType=[DataView|QualifiedName])?
protected class DataView_Group_2 extends GroupToken {
	
	public DataView_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataViewAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataView_SuperTypeAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "extends"
protected class DataView_ExtendsKeyword_2_0 extends KeywordToken  {
	
	public DataView_ExtendsKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataViewAccess().getExtendsKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataView_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// superType=[DataView|QualifiedName]
protected class DataView_SuperTypeAssignment_2_1 extends AssignmentToken  {
	
	public DataView_SuperTypeAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataViewAccess().getSuperTypeAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataView_ExtendsKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("superType",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("superType");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDataViewAccess().getSuperTypeDataViewCrossReference_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getDataViewAccess().getSuperTypeDataViewCrossReference_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


// "{"
protected class DataView_LeftCurlyBracketKeyword_3 extends KeywordToken  {
	
	public DataView_LeftCurlyBracketKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataViewAccess().getLeftCurlyBracketKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataView_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataView_NameAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// (attributes+=Attribute | featureReferences+=FeatureReference)*
protected class DataView_Alternatives_4 extends AlternativesToken {

	public DataView_Alternatives_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getDataViewAccess().getAlternatives_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataView_AttributesAssignment_4_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataView_FeatureReferencesAssignment_4_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// attributes+=Attribute
protected class DataView_AttributesAssignment_4_0 extends AssignmentToken  {
	
	public DataView_AttributesAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataViewAccess().getAttributesAssignment_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attributes",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attributes");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributeRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDataViewAccess().getAttributesAttributeParserRuleCall_4_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new DataView_Alternatives_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new DataView_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// featureReferences+=FeatureReference
protected class DataView_FeatureReferencesAssignment_4_1 extends AssignmentToken  {
	
	public DataView_FeatureReferencesAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataViewAccess().getFeatureReferencesAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("featureReferences",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("featureReferences");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getFeatureReferenceRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDataViewAccess().getFeatureReferencesFeatureReferenceParserRuleCall_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new DataView_Alternatives_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new DataView_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class DataView_RightCurlyBracketKeyword_5 extends KeywordToken  {
	
	public DataView_RightCurlyBracketKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataViewAccess().getRightCurlyBracketKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataView_Alternatives_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataView_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule DataView ****************/


/************ begin Rule FeatureReference ****************
 *
 * FeatureReference:
 * 	source=[Entity] ("." (attribute=[Attribute] ("<" view=[DataView|QualifiedName] ">")? ("as" name=ID)? | all?="all") |
 * 	all?=".*") properties+=AttributeProperty*;
 *
 **/

// source=[Entity] ("." (attribute=[Attribute] ("<" view=[DataView|QualifiedName] ">")? ("as" name=ID)? | all?="all") |
// all?=".*") properties+=AttributeProperty*
protected class FeatureReference_Group extends GroupToken {
	
	public FeatureReference_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_PropertiesAssignment_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new FeatureReference_Alternatives_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFeatureReferenceRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// source=[Entity]
protected class FeatureReference_SourceAssignment_0 extends AssignmentToken  {
	
	public FeatureReference_SourceAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getSourceAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("source",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("source");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getFeatureReferenceAccess().getSourceEntityCrossReference_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getFeatureReferenceAccess().getSourceEntityCrossReference_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// "." (attribute=[Attribute] ("<" view=[DataView|QualifiedName] ">")? ("as" name=ID)? | all?="all") | all?=".*"
protected class FeatureReference_Alternatives_1 extends AlternativesToken {

	public FeatureReference_Alternatives_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getAlternatives_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_Group_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new FeatureReference_AllAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "." (attribute=[Attribute] ("<" view=[DataView|QualifiedName] ">")? ("as" name=ID)? | all?="all")
protected class FeatureReference_Group_1_0 extends GroupToken {
	
	public FeatureReference_Group_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getGroup_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_Alternatives_1_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "."
protected class FeatureReference_FullStopKeyword_1_0_0 extends KeywordToken  {
	
	public FeatureReference_FullStopKeyword_1_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getFullStopKeyword_1_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_SourceAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// attribute=[Attribute] ("<" view=[DataView|QualifiedName] ">")? ("as" name=ID)? | all?="all"
protected class FeatureReference_Alternatives_1_0_1 extends AlternativesToken {

	public FeatureReference_Alternatives_1_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getAlternatives_1_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_Group_1_0_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new FeatureReference_AllAssignment_1_0_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// attribute=[Attribute] ("<" view=[DataView|QualifiedName] ">")? ("as" name=ID)?
protected class FeatureReference_Group_1_0_1_0 extends GroupToken {
	
	public FeatureReference_Group_1_0_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getGroup_1_0_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_Group_1_0_1_0_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new FeatureReference_Group_1_0_1_0_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new FeatureReference_AttributeAssignment_1_0_1_0_0(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// attribute=[Attribute]
protected class FeatureReference_AttributeAssignment_1_0_1_0_0 extends AssignmentToken  {
	
	public FeatureReference_AttributeAssignment_1_0_1_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getAttributeAssignment_1_0_1_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_FullStopKeyword_1_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attribute",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getFeatureReferenceAccess().getAttributeAttributeCrossReference_1_0_1_0_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getFeatureReferenceAccess().getAttributeAttributeCrossReference_1_0_1_0_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("<" view=[DataView|QualifiedName] ">")?
protected class FeatureReference_Group_1_0_1_0_1 extends GroupToken {
	
	public FeatureReference_Group_1_0_1_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getGroup_1_0_1_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_GreaterThanSignKeyword_1_0_1_0_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "<"
protected class FeatureReference_LessThanSignKeyword_1_0_1_0_1_0 extends KeywordToken  {
	
	public FeatureReference_LessThanSignKeyword_1_0_1_0_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getLessThanSignKeyword_1_0_1_0_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_AttributeAssignment_1_0_1_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// view=[DataView|QualifiedName]
protected class FeatureReference_ViewAssignment_1_0_1_0_1_1 extends AssignmentToken  {
	
	public FeatureReference_ViewAssignment_1_0_1_0_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getViewAssignment_1_0_1_0_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_LessThanSignKeyword_1_0_1_0_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("view",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("view");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getFeatureReferenceAccess().getViewDataViewCrossReference_1_0_1_0_1_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getFeatureReferenceAccess().getViewDataViewCrossReference_1_0_1_0_1_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ">"
protected class FeatureReference_GreaterThanSignKeyword_1_0_1_0_1_2 extends KeywordToken  {
	
	public FeatureReference_GreaterThanSignKeyword_1_0_1_0_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getGreaterThanSignKeyword_1_0_1_0_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_ViewAssignment_1_0_1_0_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


// ("as" name=ID)?
protected class FeatureReference_Group_1_0_1_0_2 extends GroupToken {
	
	public FeatureReference_Group_1_0_1_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getGroup_1_0_1_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_NameAssignment_1_0_1_0_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "as"
protected class FeatureReference_AsKeyword_1_0_1_0_2_0 extends KeywordToken  {
	
	public FeatureReference_AsKeyword_1_0_1_0_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getAsKeyword_1_0_1_0_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_Group_1_0_1_0_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new FeatureReference_AttributeAssignment_1_0_1_0_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// name=ID
protected class FeatureReference_NameAssignment_1_0_1_0_2_1 extends AssignmentToken  {
	
	public FeatureReference_NameAssignment_1_0_1_0_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getNameAssignment_1_0_1_0_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_AsKeyword_1_0_1_0_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getFeatureReferenceAccess().getNameIDTerminalRuleCall_1_0_1_0_2_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getFeatureReferenceAccess().getNameIDTerminalRuleCall_1_0_1_0_2_1_0();
			return obj;
		}
		return null;
	}

}



// all?="all"
protected class FeatureReference_AllAssignment_1_0_1_1 extends AssignmentToken  {
	
	public FeatureReference_AllAssignment_1_0_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getAllAssignment_1_0_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_FullStopKeyword_1_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("all",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("all");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getFeatureReferenceAccess().getAllAllKeyword_1_0_1_1_0();
			return obj;
		}
		return null;
	}

}



// all?=".*"
protected class FeatureReference_AllAssignment_1_1 extends AssignmentToken  {
	
	public FeatureReference_AllAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getAllAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_SourceAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("all",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("all");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getFeatureReferenceAccess().getAllFullStopAsteriskKeyword_1_1_0();
			return obj;
		}
		return null;
	}

}


// properties+=AttributeProperty*
protected class FeatureReference_PropertiesAssignment_2 extends AssignmentToken  {
	
	public FeatureReference_PropertiesAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFeatureReferenceAccess().getPropertiesAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeProperty_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("properties",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("properties");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributePropertyRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getFeatureReferenceAccess().getPropertiesAttributePropertyParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new FeatureReference_PropertiesAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new FeatureReference_Alternatives_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule FeatureReference ****************/


/************ begin Rule Mapper ****************
 *
 * Mapper:
 * 	"mapper" name=ID "maps" left=[ComplexType] (biDirectional?="<->" | toLeft?="<-" | toRight?="->") right=[ComplexType]
 * 	"{" propertyMappings+=PropertyMapping* "}";
 *
 **/

// "mapper" name=ID "maps" left=[ComplexType] (biDirectional?="<->" | toLeft?="<-" | toRight?="->") right=[ComplexType] "{"
// propertyMappings+=PropertyMapping* "}"
protected class Mapper_Group extends GroupToken {
	
	public Mapper_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getMapperAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_RightCurlyBracketKeyword_8(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getMapperRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "mapper"
protected class Mapper_MapperKeyword_0 extends KeywordToken  {
	
	public Mapper_MapperKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getMapperAccess().getMapperKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class Mapper_NameAssignment_1 extends AssignmentToken  {
	
	public Mapper_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMapperAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_MapperKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getMapperAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getMapperAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// "maps"
protected class Mapper_MapsKeyword_2 extends KeywordToken  {
	
	public Mapper_MapsKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getMapperAccess().getMapsKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// left=[ComplexType]
protected class Mapper_LeftAssignment_3 extends AssignmentToken  {
	
	public Mapper_LeftAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMapperAccess().getLeftAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_MapsKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("left",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("left");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getMapperAccess().getLeftComplexTypeCrossReference_3_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getMapperAccess().getLeftComplexTypeCrossReference_3_0(); 
				return obj;
			}
		}
		return null;
	}

}

// biDirectional?="<->" | toLeft?="<-" | toRight?="->"
protected class Mapper_Alternatives_4 extends AlternativesToken {

	public Mapper_Alternatives_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getMapperAccess().getAlternatives_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_BiDirectionalAssignment_4_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Mapper_ToLeftAssignment_4_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Mapper_ToRightAssignment_4_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// biDirectional?="<->"
protected class Mapper_BiDirectionalAssignment_4_0 extends AssignmentToken  {
	
	public Mapper_BiDirectionalAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMapperAccess().getBiDirectionalAssignment_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_LeftAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("biDirectional",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("biDirectional");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getMapperAccess().getBiDirectionalLessThanSignHyphenMinusGreaterThanSignKeyword_4_0_0();
			return obj;
		}
		return null;
	}

}

// toLeft?="<-"
protected class Mapper_ToLeftAssignment_4_1 extends AssignmentToken  {
	
	public Mapper_ToLeftAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMapperAccess().getToLeftAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_LeftAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("toLeft",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("toLeft");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getMapperAccess().getToLeftLessThanSignHyphenMinusKeyword_4_1_0();
			return obj;
		}
		return null;
	}

}

// toRight?="->"
protected class Mapper_ToRightAssignment_4_2 extends AssignmentToken  {
	
	public Mapper_ToRightAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMapperAccess().getToRightAssignment_4_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_LeftAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("toRight",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("toRight");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getMapperAccess().getToRightHyphenMinusGreaterThanSignKeyword_4_2_0();
			return obj;
		}
		return null;
	}

}


// right=[ComplexType]
protected class Mapper_RightAssignment_5 extends AssignmentToken  {
	
	public Mapper_RightAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMapperAccess().getRightAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_Alternatives_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getMapperAccess().getRightComplexTypeCrossReference_5_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getMapperAccess().getRightComplexTypeCrossReference_5_0(); 
				return obj;
			}
		}
		return null;
	}

}

// "{"
protected class Mapper_LeftCurlyBracketKeyword_6 extends KeywordToken  {
	
	public Mapper_LeftCurlyBracketKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getMapperAccess().getLeftCurlyBracketKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_RightAssignment_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// propertyMappings+=PropertyMapping*
protected class Mapper_PropertyMappingsAssignment_7 extends AssignmentToken  {
	
	public Mapper_PropertyMappingsAssignment_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMapperAccess().getPropertyMappingsAssignment_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyMapping_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("propertyMappings",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("propertyMappings");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyMappingRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getMapperAccess().getPropertyMappingsPropertyMappingParserRuleCall_7_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Mapper_PropertyMappingsAssignment_7(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Mapper_LeftCurlyBracketKeyword_6(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class Mapper_RightCurlyBracketKeyword_8 extends KeywordToken  {
	
	public Mapper_RightCurlyBracketKeyword_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getMapperAccess().getRightCurlyBracketKeyword_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Mapper_PropertyMappingsAssignment_7(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Mapper_LeftCurlyBracketKeyword_6(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule Mapper ****************/


/************ begin Rule PropertyMapping ****************
 *
 * PropertyMapping:
 * 	left=[Attribute] (biDirectional?="<->" | toLeft?="<-" | toRight?="->") right=[Attribute];
 *
 **/

// left=[Attribute] (biDirectional?="<->" | toLeft?="<-" | toRight?="->") right=[Attribute]
protected class PropertyMapping_Group extends GroupToken {
	
	public PropertyMapping_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPropertyMappingAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyMapping_RightAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPropertyMappingRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// left=[Attribute]
protected class PropertyMapping_LeftAssignment_0 extends AssignmentToken  {
	
	public PropertyMapping_LeftAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyMappingAccess().getLeftAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("left",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("left");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyMappingAccess().getLeftAttributeCrossReference_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getPropertyMappingAccess().getLeftAttributeCrossReference_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// biDirectional?="<->" | toLeft?="<-" | toRight?="->"
protected class PropertyMapping_Alternatives_1 extends AlternativesToken {

	public PropertyMapping_Alternatives_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getPropertyMappingAccess().getAlternatives_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyMapping_BiDirectionalAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PropertyMapping_ToLeftAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PropertyMapping_ToRightAssignment_1_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// biDirectional?="<->"
protected class PropertyMapping_BiDirectionalAssignment_1_0 extends AssignmentToken  {
	
	public PropertyMapping_BiDirectionalAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyMappingAccess().getBiDirectionalAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyMapping_LeftAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("biDirectional",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("biDirectional");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getPropertyMappingAccess().getBiDirectionalLessThanSignHyphenMinusGreaterThanSignKeyword_1_0_0();
			return obj;
		}
		return null;
	}

}

// toLeft?="<-"
protected class PropertyMapping_ToLeftAssignment_1_1 extends AssignmentToken  {
	
	public PropertyMapping_ToLeftAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyMappingAccess().getToLeftAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyMapping_LeftAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("toLeft",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("toLeft");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getPropertyMappingAccess().getToLeftLessThanSignHyphenMinusKeyword_1_1_0();
			return obj;
		}
		return null;
	}

}

// toRight?="->"
protected class PropertyMapping_ToRightAssignment_1_2 extends AssignmentToken  {
	
	public PropertyMapping_ToRightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyMappingAccess().getToRightAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyMapping_LeftAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("toRight",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("toRight");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getPropertyMappingAccess().getToRightHyphenMinusGreaterThanSignKeyword_1_2_0();
			return obj;
		}
		return null;
	}

}


// right=[Attribute]
protected class PropertyMapping_RightAssignment_2 extends AssignmentToken  {
	
	public PropertyMapping_RightAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyMappingAccess().getRightAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyMapping_Alternatives_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyMappingAccess().getRightAttributeCrossReference_2_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getPropertyMappingAccess().getRightAttributeCrossReference_2_0(); 
				return obj;
			}
		}
		return null;
	}

}


/************ end Rule PropertyMapping ****************/


/************ begin Rule Entity ****************
 *
 * Entity:
 * 	"entity" name=ID ("extends" superType=[Entity|QualifiedName])? "{" (attributes+=Attribute |
 * 	attributeGroups+=AttributeGroup)* conditionsBlock=ConditionsBlock? "}";
 *
 **/

// "entity" name=ID ("extends" superType=[Entity|QualifiedName])? "{" (attributes+=Attribute |
// attributeGroups+=AttributeGroup)* conditionsBlock=ConditionsBlock? "}"
protected class Entity_Group extends GroupToken {
	
	public Entity_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEntityAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Entity_RightCurlyBracketKeyword_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEntityRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "entity"
protected class Entity_EntityKeyword_0 extends KeywordToken  {
	
	public Entity_EntityKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEntityAccess().getEntityKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class Entity_NameAssignment_1 extends AssignmentToken  {
	
	public Entity_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEntityAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Entity_EntityKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEntityAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getEntityAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("extends" superType=[Entity|QualifiedName])?
protected class Entity_Group_2 extends GroupToken {
	
	public Entity_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEntityAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Entity_SuperTypeAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "extends"
protected class Entity_ExtendsKeyword_2_0 extends KeywordToken  {
	
	public Entity_ExtendsKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEntityAccess().getExtendsKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Entity_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// superType=[Entity|QualifiedName]
protected class Entity_SuperTypeAssignment_2_1 extends AssignmentToken  {
	
	public Entity_SuperTypeAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEntityAccess().getSuperTypeAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Entity_ExtendsKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("superType",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("superType");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEntityAccess().getSuperTypeEntityCrossReference_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getEntityAccess().getSuperTypeEntityCrossReference_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


// "{"
protected class Entity_LeftCurlyBracketKeyword_3 extends KeywordToken  {
	
	public Entity_LeftCurlyBracketKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEntityAccess().getLeftCurlyBracketKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Entity_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Entity_NameAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// (attributes+=Attribute | attributeGroups+=AttributeGroup)*
protected class Entity_Alternatives_4 extends AlternativesToken {

	public Entity_Alternatives_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getEntityAccess().getAlternatives_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Entity_AttributesAssignment_4_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Entity_AttributeGroupsAssignment_4_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// attributes+=Attribute
protected class Entity_AttributesAssignment_4_0 extends AssignmentToken  {
	
	public Entity_AttributesAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEntityAccess().getAttributesAssignment_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attributes",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attributes");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributeRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEntityAccess().getAttributesAttributeParserRuleCall_4_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Entity_Alternatives_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Entity_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// attributeGroups+=AttributeGroup
protected class Entity_AttributeGroupsAssignment_4_1 extends AssignmentToken  {
	
	public Entity_AttributeGroupsAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEntityAccess().getAttributeGroupsAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeGroup_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attributeGroups",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attributeGroups");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributeGroupRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEntityAccess().getAttributeGroupsAttributeGroupParserRuleCall_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Entity_Alternatives_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Entity_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// conditionsBlock=ConditionsBlock?
protected class Entity_ConditionsBlockAssignment_5 extends AssignmentToken  {
	
	public Entity_ConditionsBlockAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEntityAccess().getConditionsBlockAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConditionsBlock_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("conditionsBlock",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("conditionsBlock");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConditionsBlockRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEntityAccess().getConditionsBlockConditionsBlockParserRuleCall_5_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Entity_Alternatives_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Entity_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class Entity_RightCurlyBracketKeyword_6 extends KeywordToken  {
	
	public Entity_RightCurlyBracketKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEntityAccess().getRightCurlyBracketKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Entity_ConditionsBlockAssignment_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Entity_Alternatives_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Entity_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}


/************ end Rule Entity ****************/


/************ begin Rule Attribute ****************
 *
 * Attribute:
 * 	{Attribute} (identifier?="id" | version?="version" | composition?="composition")? type=DataTypeAndTypeParameter
 * 	many?="[]"? name=ID ("=" (incrementerReference=IncrementerReference | defaultValue=STRING))? ("oppositeof"
 * 	opposite=[Attribute])? attributProperties+=AttributeProperty* ("orderby" sortOrder=[AttributeGroup])?;
 *
 **/

// {Attribute} (identifier?="id" | version?="version" | composition?="composition")? type=DataTypeAndTypeParameter
// many?="[]"? name=ID ("=" (incrementerReference=IncrementerReference | defaultValue=STRING))? ("oppositeof"
// opposite=[Attribute])? attributProperties+=AttributeProperty* ("orderby" sortOrder=[AttributeGroup])?
protected class Attribute_Group extends GroupToken {
	
	public Attribute_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_Group_8(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Attribute_AttributPropertiesAssignment_7(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Attribute_Group_6(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Attribute_Group_5(lastRuleCallOrigin, this, 3, inst);
			case 4: return new Attribute_NameAssignment_4(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeAccess().getAttributeAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {Attribute}
protected class Attribute_AttributeAction_0 extends ActionToken  {

	public Attribute_AttributeAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getAttributeAccess().getAttributeAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// (identifier?="id" | version?="version" | composition?="composition")?
protected class Attribute_Alternatives_1 extends AlternativesToken {

	public Attribute_Alternatives_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAttributeAccess().getAlternatives_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_IdentifierAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Attribute_VersionAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Attribute_CompositionAssignment_1_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// identifier?="id"
protected class Attribute_IdentifierAssignment_1_0 extends AssignmentToken  {
	
	public Attribute_IdentifierAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeAccess().getIdentifierAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_AttributeAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("identifier",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("identifier");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeAccess().getIdentifierIdKeyword_1_0_0();
			return obj;
		}
		return null;
	}

}

// version?="version"
protected class Attribute_VersionAssignment_1_1 extends AssignmentToken  {
	
	public Attribute_VersionAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeAccess().getVersionAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_AttributeAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("version",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("version");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeAccess().getVersionVersionKeyword_1_1_0();
			return obj;
		}
		return null;
	}

}

// composition?="composition"
protected class Attribute_CompositionAssignment_1_2 extends AssignmentToken  {
	
	public Attribute_CompositionAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeAccess().getCompositionAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_AttributeAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("composition",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("composition");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeAccess().getCompositionCompositionKeyword_1_2_0();
			return obj;
		}
		return null;
	}

}


// type=DataTypeAndTypeParameter
protected class Attribute_TypeAssignment_2 extends AssignmentToken  {
	
	public Attribute_TypeAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeAccess().getTypeAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDataTypeAndTypeParameterRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAttributeAccess().getTypeDataTypeAndTypeParameterParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Attribute_Alternatives_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Attribute_AttributeAction_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// many?="[]"?
protected class Attribute_ManyAssignment_3 extends AssignmentToken  {
	
	public Attribute_ManyAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeAccess().getManyAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_TypeAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("many",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("many");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeAccess().getManyLeftSquareBracketRightSquareBracketKeyword_3_0();
			return obj;
		}
		return null;
	}

}

// name=ID
protected class Attribute_NameAssignment_4 extends AssignmentToken  {
	
	public Attribute_NameAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeAccess().getNameAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_ManyAssignment_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Attribute_TypeAssignment_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttributeAccess().getNameIDTerminalRuleCall_4_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getAttributeAccess().getNameIDTerminalRuleCall_4_0();
			return obj;
		}
		return null;
	}

}

// ("=" (incrementerReference=IncrementerReference | defaultValue=STRING))?
protected class Attribute_Group_5 extends GroupToken {
	
	public Attribute_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_Alternatives_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "="
protected class Attribute_EqualsSignKeyword_5_0 extends KeywordToken  {
	
	public Attribute_EqualsSignKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeAccess().getEqualsSignKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_NameAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// incrementerReference=IncrementerReference | defaultValue=STRING
protected class Attribute_Alternatives_5_1 extends AlternativesToken {

	public Attribute_Alternatives_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAttributeAccess().getAlternatives_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_IncrementerReferenceAssignment_5_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Attribute_DefaultValueAssignment_5_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// incrementerReference=IncrementerReference
protected class Attribute_IncrementerReferenceAssignment_5_1_0 extends AssignmentToken  {
	
	public Attribute_IncrementerReferenceAssignment_5_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeAccess().getIncrementerReferenceAssignment_5_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IncrementerReference_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("incrementerReference",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("incrementerReference");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getIncrementerReferenceRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAttributeAccess().getIncrementerReferenceIncrementerReferenceParserRuleCall_5_1_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Attribute_EqualsSignKeyword_5_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// defaultValue=STRING
protected class Attribute_DefaultValueAssignment_5_1_1 extends AssignmentToken  {
	
	public Attribute_DefaultValueAssignment_5_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeAccess().getDefaultValueAssignment_5_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_EqualsSignKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("defaultValue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("defaultValue");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttributeAccess().getDefaultValueSTRINGTerminalRuleCall_5_1_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getAttributeAccess().getDefaultValueSTRINGTerminalRuleCall_5_1_1_0();
			return obj;
		}
		return null;
	}

}



// ("oppositeof" opposite=[Attribute])?
protected class Attribute_Group_6 extends GroupToken {
	
	public Attribute_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeAccess().getGroup_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_OppositeAssignment_6_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "oppositeof"
protected class Attribute_OppositeofKeyword_6_0 extends KeywordToken  {
	
	public Attribute_OppositeofKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeAccess().getOppositeofKeyword_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Attribute_NameAssignment_4(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// opposite=[Attribute]
protected class Attribute_OppositeAssignment_6_1 extends AssignmentToken  {
	
	public Attribute_OppositeAssignment_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeAccess().getOppositeAssignment_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_OppositeofKeyword_6_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("opposite",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("opposite");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributeAccess().getOppositeAttributeCrossReference_6_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getAttributeAccess().getOppositeAttributeCrossReference_6_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


// attributProperties+=AttributeProperty*
protected class Attribute_AttributPropertiesAssignment_7 extends AssignmentToken  {
	
	public Attribute_AttributPropertiesAssignment_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeAccess().getAttributPropertiesAssignment_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeProperty_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attributProperties",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attributProperties");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributePropertyRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAttributeAccess().getAttributPropertiesAttributePropertyParserRuleCall_7_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Attribute_AttributPropertiesAssignment_7(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Attribute_Group_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new Attribute_Group_5(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new Attribute_NameAssignment_4(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("orderby" sortOrder=[AttributeGroup])?
protected class Attribute_Group_8 extends GroupToken {
	
	public Attribute_Group_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeAccess().getGroup_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_SortOrderAssignment_8_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "orderby"
protected class Attribute_OrderbyKeyword_8_0 extends KeywordToken  {
	
	public Attribute_OrderbyKeyword_8_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeAccess().getOrderbyKeyword_8_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_AttributPropertiesAssignment_7(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Attribute_Group_6(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Attribute_Group_5(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Attribute_NameAssignment_4(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

}

// sortOrder=[AttributeGroup]
protected class Attribute_SortOrderAssignment_8_1 extends AssignmentToken  {
	
	public Attribute_SortOrderAssignment_8_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeAccess().getSortOrderAssignment_8_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_OrderbyKeyword_8_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("sortOrder",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("sortOrder");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributeAccess().getSortOrderAttributeGroupCrossReference_8_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getAttributeAccess().getSortOrderAttributeGroupCrossReference_8_1_0(); 
				return obj;
			}
		}
		return null;
	}

}



/************ end Rule Attribute ****************/


/************ begin Rule AttributeFlag ****************
 *
 * AttributeFlag:
 * 	ExpressionFlag | DerivedFlag | TransientFlag;
 *
 **/

// ExpressionFlag | DerivedFlag | TransientFlag
protected class AttributeFlag_Alternatives extends AlternativesToken {

	public AttributeFlag_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAttributeFlagAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeFlag_ExpressionFlagParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeFlag_DerivedFlagParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AttributeFlag_TransientFlagParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAvailableFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getDerivedFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getReadOnlyFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRequiredFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTransientFlagRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// ExpressionFlag
protected class AttributeFlag_ExpressionFlagParserRuleCall_0 extends RuleCallToken {
	
	public AttributeFlag_ExpressionFlagParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAttributeFlagAccess().getExpressionFlagParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ExpressionFlag_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAvailableFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getReadOnlyFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRequiredFlagRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ExpressionFlag_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// DerivedFlag
protected class AttributeFlag_DerivedFlagParserRuleCall_1 extends RuleCallToken {
	
	public AttributeFlag_DerivedFlagParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAttributeFlagAccess().getDerivedFlagParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DerivedFlag_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDerivedFlagRule().getType().getClassifier())
			return null;
		if(checkForRecursion(DerivedFlag_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// TransientFlag
protected class AttributeFlag_TransientFlagParserRuleCall_2 extends RuleCallToken {
	
	public AttributeFlag_TransientFlagParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAttributeFlagAccess().getTransientFlagParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TransientFlag_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getTransientFlagRule().getType().getClassifier())
			return null;
		if(checkForRecursion(TransientFlag_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule AttributeFlag ****************/


/************ begin Rule ExpressionFlag ****************
 *
 * ExpressionFlag:
 * 	RequiredFlag | ReadOnlyFlag | AvailableFlag;
 *
 **/

// RequiredFlag | ReadOnlyFlag | AvailableFlag
protected class ExpressionFlag_Alternatives extends AlternativesToken {

	public ExpressionFlag_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getExpressionFlagAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ExpressionFlag_RequiredFlagParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ExpressionFlag_ReadOnlyFlagParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ExpressionFlag_AvailableFlagParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAvailableFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getReadOnlyFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRequiredFlagRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// RequiredFlag
protected class ExpressionFlag_RequiredFlagParserRuleCall_0 extends RuleCallToken {
	
	public ExpressionFlag_RequiredFlagParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getExpressionFlagAccess().getRequiredFlagParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RequiredFlag_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRequiredFlagRule().getType().getClassifier())
			return null;
		if(checkForRecursion(RequiredFlag_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ReadOnlyFlag
protected class ExpressionFlag_ReadOnlyFlagParserRuleCall_1 extends RuleCallToken {
	
	public ExpressionFlag_ReadOnlyFlagParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getExpressionFlagAccess().getReadOnlyFlagParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReadOnlyFlag_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getReadOnlyFlagRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ReadOnlyFlag_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// AvailableFlag
protected class ExpressionFlag_AvailableFlagParserRuleCall_2 extends RuleCallToken {
	
	public ExpressionFlag_AvailableFlagParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getExpressionFlagAccess().getAvailableFlagParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AvailableFlag_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAvailableFlagRule().getType().getClassifier())
			return null;
		if(checkForRecursion(AvailableFlag_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule ExpressionFlag ****************/


/************ begin Rule RequiredFlag ****************
 *
 * RequiredFlag:
 * 	"required" "=" expression=EqualityExpr;
 *
 **/

// "required" "=" expression=EqualityExpr
protected class RequiredFlag_Group extends GroupToken {
	
	public RequiredFlag_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRequiredFlagAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RequiredFlag_ExpressionAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRequiredFlagRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "required"
protected class RequiredFlag_RequiredKeyword_0 extends KeywordToken  {
	
	public RequiredFlag_RequiredKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getRequiredFlagAccess().getRequiredKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "="
protected class RequiredFlag_EqualsSignKeyword_1 extends KeywordToken  {
	
	public RequiredFlag_EqualsSignKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getRequiredFlagAccess().getEqualsSignKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RequiredFlag_RequiredKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// expression=EqualityExpr
protected class RequiredFlag_ExpressionAssignment_2 extends AssignmentToken  {
	
	public RequiredFlag_ExpressionAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRequiredFlagAccess().getExpressionAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEqualityExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getRequiredFlagAccess().getExpressionEqualityExprParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new RequiredFlag_EqualsSignKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule RequiredFlag ****************/


/************ begin Rule ReadOnlyFlag ****************
 *
 * ReadOnlyFlag:
 * 	"readonly" "=" expression=EqualityExpr;
 *
 **/

// "readonly" "=" expression=EqualityExpr
protected class ReadOnlyFlag_Group extends GroupToken {
	
	public ReadOnlyFlag_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getReadOnlyFlagAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReadOnlyFlag_ExpressionAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getReadOnlyFlagRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "readonly"
protected class ReadOnlyFlag_ReadonlyKeyword_0 extends KeywordToken  {
	
	public ReadOnlyFlag_ReadonlyKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReadOnlyFlagAccess().getReadonlyKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "="
protected class ReadOnlyFlag_EqualsSignKeyword_1 extends KeywordToken  {
	
	public ReadOnlyFlag_EqualsSignKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReadOnlyFlagAccess().getEqualsSignKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReadOnlyFlag_ReadonlyKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// expression=EqualityExpr
protected class ReadOnlyFlag_ExpressionAssignment_2 extends AssignmentToken  {
	
	public ReadOnlyFlag_ExpressionAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReadOnlyFlagAccess().getExpressionAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEqualityExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getReadOnlyFlagAccess().getExpressionEqualityExprParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ReadOnlyFlag_EqualsSignKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule ReadOnlyFlag ****************/


/************ begin Rule AvailableFlag ****************
 *
 * AvailableFlag:
 * 	"available" "=" expression=EqualityExpr;
 *
 **/

// "available" "=" expression=EqualityExpr
protected class AvailableFlag_Group extends GroupToken {
	
	public AvailableFlag_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAvailableFlagAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AvailableFlag_ExpressionAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAvailableFlagRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "available"
protected class AvailableFlag_AvailableKeyword_0 extends KeywordToken  {
	
	public AvailableFlag_AvailableKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAvailableFlagAccess().getAvailableKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "="
protected class AvailableFlag_EqualsSignKeyword_1 extends KeywordToken  {
	
	public AvailableFlag_EqualsSignKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAvailableFlagAccess().getEqualsSignKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AvailableFlag_AvailableKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// expression=EqualityExpr
protected class AvailableFlag_ExpressionAssignment_2 extends AssignmentToken  {
	
	public AvailableFlag_ExpressionAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAvailableFlagAccess().getExpressionAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEqualityExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAvailableFlagAccess().getExpressionEqualityExprParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AvailableFlag_EqualsSignKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule AvailableFlag ****************/


/************ begin Rule DerivedFlag ****************
 *
 * DerivedFlag:
 * 	"derived" "=" expression=BoolLiteral;
 *
 **/

// "derived" "=" expression=BoolLiteral
protected class DerivedFlag_Group extends GroupToken {
	
	public DerivedFlag_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDerivedFlagAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DerivedFlag_ExpressionAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDerivedFlagRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "derived"
protected class DerivedFlag_DerivedKeyword_0 extends KeywordToken  {
	
	public DerivedFlag_DerivedKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDerivedFlagAccess().getDerivedKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "="
protected class DerivedFlag_EqualsSignKeyword_1 extends KeywordToken  {
	
	public DerivedFlag_EqualsSignKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDerivedFlagAccess().getEqualsSignKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DerivedFlag_DerivedKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// expression=BoolLiteral
protected class DerivedFlag_ExpressionAssignment_2 extends AssignmentToken  {
	
	public DerivedFlag_ExpressionAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDerivedFlagAccess().getExpressionAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new BoolLiteral_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getBoolLiteralRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDerivedFlagAccess().getExpressionBoolLiteralParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new DerivedFlag_EqualsSignKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule DerivedFlag ****************/


/************ begin Rule TransientFlag ****************
 *
 * TransientFlag:
 * 	"transient" "=" expression=BoolLiteral;
 *
 **/

// "transient" "=" expression=BoolLiteral
protected class TransientFlag_Group extends GroupToken {
	
	public TransientFlag_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getTransientFlagAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TransientFlag_ExpressionAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getTransientFlagRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "transient"
protected class TransientFlag_TransientKeyword_0 extends KeywordToken  {
	
	public TransientFlag_TransientKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTransientFlagAccess().getTransientKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "="
protected class TransientFlag_EqualsSignKeyword_1 extends KeywordToken  {
	
	public TransientFlag_EqualsSignKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTransientFlagAccess().getEqualsSignKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TransientFlag_TransientKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// expression=BoolLiteral
protected class TransientFlag_ExpressionAssignment_2 extends AssignmentToken  {
	
	public TransientFlag_ExpressionAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getTransientFlagAccess().getExpressionAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new BoolLiteral_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getBoolLiteralRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getTransientFlagAccess().getExpressionBoolLiteralParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new TransientFlag_EqualsSignKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule TransientFlag ****************/


/************ begin Rule AttributeProperty ****************
 *
 * AttributeProperty:
 * 	AttributeFlag | AttributeValidationProperty | AttributeTextProperty;
 *
 **/

// AttributeFlag | AttributeValidationProperty | AttributeTextProperty
protected class AttributeProperty_Alternatives extends AlternativesToken {

	public AttributeProperty_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAttributePropertyAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeProperty_AttributeFlagParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeProperty_AttributeValidationPropertyParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AttributeProperty_AttributeTextPropertyParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeTextPropertyRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getAttributeValidationPropertyRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getAvailableFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getDerivedFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getReadOnlyFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRequiredFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTransientFlagRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// AttributeFlag
protected class AttributeProperty_AttributeFlagParserRuleCall_0 extends RuleCallToken {
	
	public AttributeProperty_AttributeFlagParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAttributePropertyAccess().getAttributeFlagParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeFlag_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAvailableFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getDerivedFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getReadOnlyFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRequiredFlagRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTransientFlagRule().getType().getClassifier())
			return null;
		if(checkForRecursion(AttributeFlag_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// AttributeValidationProperty
protected class AttributeProperty_AttributeValidationPropertyParserRuleCall_1 extends RuleCallToken {
	
	public AttributeProperty_AttributeValidationPropertyParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAttributePropertyAccess().getAttributeValidationPropertyParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeValidationProperty_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeValidationPropertyRule().getType().getClassifier())
			return null;
		if(checkForRecursion(AttributeValidationProperty_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// AttributeTextProperty
protected class AttributeProperty_AttributeTextPropertyParserRuleCall_2 extends RuleCallToken {
	
	public AttributeProperty_AttributeTextPropertyParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAttributePropertyAccess().getAttributeTextPropertyParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeTextPropertyRule().getType().getClassifier())
			return null;
		if(checkForRecursion(AttributeTextProperty_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule AttributeProperty ****************/


/************ begin Rule AttributeValidationProperty ****************
 *
 * AttributeValidationProperty:
 * 	"constraints" "=" constraints+=Constraint ("," constraints+=Constraint)* | "format" "=" format=ValidatorReference;
 *
 **/

// "constraints" "=" constraints+=Constraint ("," constraints+=Constraint)* | "format" "=" format=ValidatorReference
protected class AttributeValidationProperty_Alternatives extends AlternativesToken {

	public AttributeValidationProperty_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeValidationProperty_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeValidationProperty_Group_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeValidationPropertyRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "constraints" "=" constraints+=Constraint ("," constraints+=Constraint)*
protected class AttributeValidationProperty_Group_0 extends GroupToken {
	
	public AttributeValidationProperty_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeValidationProperty_Group_0_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeValidationProperty_ConstraintsAssignment_0_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "constraints"
protected class AttributeValidationProperty_ConstraintsKeyword_0_0 extends KeywordToken  {
	
	public AttributeValidationProperty_ConstraintsKeyword_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getConstraintsKeyword_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "="
protected class AttributeValidationProperty_EqualsSignKeyword_0_1 extends KeywordToken  {
	
	public AttributeValidationProperty_EqualsSignKeyword_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getEqualsSignKeyword_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeValidationProperty_ConstraintsKeyword_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// constraints+=Constraint
protected class AttributeValidationProperty_ConstraintsAssignment_0_2 extends AssignmentToken  {
	
	public AttributeValidationProperty_ConstraintsAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getConstraintsAssignment_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("constraints",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("constraints");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConstraintRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAttributeValidationPropertyAccess().getConstraintsConstraintParserRuleCall_0_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AttributeValidationProperty_EqualsSignKeyword_0_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," constraints+=Constraint)*
protected class AttributeValidationProperty_Group_0_3 extends GroupToken {
	
	public AttributeValidationProperty_Group_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getGroup_0_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeValidationProperty_ConstraintsAssignment_0_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class AttributeValidationProperty_CommaKeyword_0_3_0 extends KeywordToken  {
	
	public AttributeValidationProperty_CommaKeyword_0_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getCommaKeyword_0_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeValidationProperty_Group_0_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeValidationProperty_ConstraintsAssignment_0_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// constraints+=Constraint
protected class AttributeValidationProperty_ConstraintsAssignment_0_3_1 extends AssignmentToken  {
	
	public AttributeValidationProperty_ConstraintsAssignment_0_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getConstraintsAssignment_0_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("constraints",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("constraints");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConstraintRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAttributeValidationPropertyAccess().getConstraintsConstraintParserRuleCall_0_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AttributeValidationProperty_CommaKeyword_0_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



// "format" "=" format=ValidatorReference
protected class AttributeValidationProperty_Group_1 extends GroupToken {
	
	public AttributeValidationProperty_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeValidationProperty_FormatAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "format"
protected class AttributeValidationProperty_FormatKeyword_1_0 extends KeywordToken  {
	
	public AttributeValidationProperty_FormatKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getFormatKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "="
protected class AttributeValidationProperty_EqualsSignKeyword_1_1 extends KeywordToken  {
	
	public AttributeValidationProperty_EqualsSignKeyword_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getEqualsSignKeyword_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeValidationProperty_FormatKeyword_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// format=ValidatorReference
protected class AttributeValidationProperty_FormatAssignment_1_2 extends AssignmentToken  {
	
	public AttributeValidationProperty_FormatAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeValidationPropertyAccess().getFormatAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("format",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("format");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getValidatorReferenceRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAttributeValidationPropertyAccess().getFormatValidatorReferenceParserRuleCall_1_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AttributeValidationProperty_EqualsSignKeyword_1_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule AttributeValidationProperty ****************/


/************ begin Rule AttributeTextProperty ****************
 *
 * AttributeTextProperty:
 * 	"title" "=" labelText=STRING | "description" "=" tooltipText=STRING | "unit" "=" (unitText=STRING |
 * 	unitAttribute=[Attribute]) | "hstore" "=" hstoreColumn=STRING;
 *
 **/

// "title" "=" labelText=STRING | "description" "=" tooltipText=STRING | "unit" "=" (unitText=STRING |
// unitAttribute=[Attribute]) | "hstore" "=" hstoreColumn=STRING
protected class AttributeTextProperty_Alternatives extends AlternativesToken {

	public AttributeTextProperty_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeTextProperty_Group_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AttributeTextProperty_Group_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new AttributeTextProperty_Group_3(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeTextPropertyRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "title" "=" labelText=STRING
protected class AttributeTextProperty_Group_0 extends GroupToken {
	
	public AttributeTextProperty_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_LabelTextAssignment_0_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "title"
protected class AttributeTextProperty_TitleKeyword_0_0 extends KeywordToken  {
	
	public AttributeTextProperty_TitleKeyword_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getTitleKeyword_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "="
protected class AttributeTextProperty_EqualsSignKeyword_0_1 extends KeywordToken  {
	
	public AttributeTextProperty_EqualsSignKeyword_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getEqualsSignKeyword_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_TitleKeyword_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// labelText=STRING
protected class AttributeTextProperty_LabelTextAssignment_0_2 extends AssignmentToken  {
	
	public AttributeTextProperty_LabelTextAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getLabelTextAssignment_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_EqualsSignKeyword_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("labelText",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("labelText");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttributeTextPropertyAccess().getLabelTextSTRINGTerminalRuleCall_0_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getAttributeTextPropertyAccess().getLabelTextSTRINGTerminalRuleCall_0_2_0();
			return obj;
		}
		return null;
	}

}


// "description" "=" tooltipText=STRING
protected class AttributeTextProperty_Group_1 extends GroupToken {
	
	public AttributeTextProperty_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_TooltipTextAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "description"
protected class AttributeTextProperty_DescriptionKeyword_1_0 extends KeywordToken  {
	
	public AttributeTextProperty_DescriptionKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getDescriptionKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "="
protected class AttributeTextProperty_EqualsSignKeyword_1_1 extends KeywordToken  {
	
	public AttributeTextProperty_EqualsSignKeyword_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getEqualsSignKeyword_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_DescriptionKeyword_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// tooltipText=STRING
protected class AttributeTextProperty_TooltipTextAssignment_1_2 extends AssignmentToken  {
	
	public AttributeTextProperty_TooltipTextAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getTooltipTextAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_EqualsSignKeyword_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("tooltipText",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("tooltipText");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttributeTextPropertyAccess().getTooltipTextSTRINGTerminalRuleCall_1_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getAttributeTextPropertyAccess().getTooltipTextSTRINGTerminalRuleCall_1_2_0();
			return obj;
		}
		return null;
	}

}


// "unit" "=" (unitText=STRING | unitAttribute=[Attribute])
protected class AttributeTextProperty_Group_2 extends GroupToken {
	
	public AttributeTextProperty_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_Alternatives_2_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "unit"
protected class AttributeTextProperty_UnitKeyword_2_0 extends KeywordToken  {
	
	public AttributeTextProperty_UnitKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getUnitKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "="
protected class AttributeTextProperty_EqualsSignKeyword_2_1 extends KeywordToken  {
	
	public AttributeTextProperty_EqualsSignKeyword_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getEqualsSignKeyword_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_UnitKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// unitText=STRING | unitAttribute=[Attribute]
protected class AttributeTextProperty_Alternatives_2_2 extends AlternativesToken {

	public AttributeTextProperty_Alternatives_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getAlternatives_2_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_UnitTextAssignment_2_2_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeTextProperty_UnitAttributeAssignment_2_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// unitText=STRING
protected class AttributeTextProperty_UnitTextAssignment_2_2_0 extends AssignmentToken  {
	
	public AttributeTextProperty_UnitTextAssignment_2_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getUnitTextAssignment_2_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_EqualsSignKeyword_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("unitText",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("unitText");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttributeTextPropertyAccess().getUnitTextSTRINGTerminalRuleCall_2_2_0_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getAttributeTextPropertyAccess().getUnitTextSTRINGTerminalRuleCall_2_2_0_0();
			return obj;
		}
		return null;
	}

}

// unitAttribute=[Attribute]
protected class AttributeTextProperty_UnitAttributeAssignment_2_2_1 extends AssignmentToken  {
	
	public AttributeTextProperty_UnitAttributeAssignment_2_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getUnitAttributeAssignment_2_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_EqualsSignKeyword_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("unitAttribute",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("unitAttribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributeTextPropertyAccess().getUnitAttributeAttributeCrossReference_2_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getAttributeTextPropertyAccess().getUnitAttributeAttributeCrossReference_2_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}



// "hstore" "=" hstoreColumn=STRING
protected class AttributeTextProperty_Group_3 extends GroupToken {
	
	public AttributeTextProperty_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_HstoreColumnAssignment_3_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "hstore"
protected class AttributeTextProperty_HstoreKeyword_3_0 extends KeywordToken  {
	
	public AttributeTextProperty_HstoreKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getHstoreKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "="
protected class AttributeTextProperty_EqualsSignKeyword_3_1 extends KeywordToken  {
	
	public AttributeTextProperty_EqualsSignKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getEqualsSignKeyword_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_HstoreKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// hstoreColumn=STRING
protected class AttributeTextProperty_HstoreColumnAssignment_3_2 extends AssignmentToken  {
	
	public AttributeTextProperty_HstoreColumnAssignment_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeTextPropertyAccess().getHstoreColumnAssignment_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeTextProperty_EqualsSignKeyword_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("hstoreColumn",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("hstoreColumn");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttributeTextPropertyAccess().getHstoreColumnSTRINGTerminalRuleCall_3_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getAttributeTextPropertyAccess().getHstoreColumnSTRINGTerminalRuleCall_3_2_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule AttributeTextProperty ****************/


/************ begin Rule AttributeGroup ****************
 *
 * AttributeGroup:
 * 	(key?="key" | unique?="unique" | filter?="filter" | sortorder?="sortorder") name=ID "(" attributes+=AttributeSortOrder
 * 	("," attributes+=AttributeSortOrder)* ")";
 *
 **/

// (key?="key" | unique?="unique" | filter?="filter" | sortorder?="sortorder") name=ID "(" attributes+=AttributeSortOrder
// ("," attributes+=AttributeSortOrder)* ")"
protected class AttributeGroup_Group extends GroupToken {
	
	public AttributeGroup_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeGroup_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeGroupRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// key?="key" | unique?="unique" | filter?="filter" | sortorder?="sortorder"
protected class AttributeGroup_Alternatives_0 extends AlternativesToken {

	public AttributeGroup_Alternatives_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getAlternatives_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeGroup_KeyAssignment_0_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeGroup_UniqueAssignment_0_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AttributeGroup_FilterAssignment_0_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new AttributeGroup_SortorderAssignment_0_3(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

}

// key?="key"
protected class AttributeGroup_KeyAssignment_0_0 extends AssignmentToken  {
	
	public AttributeGroup_KeyAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getKeyAssignment_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("key",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("key");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeGroupAccess().getKeyKeyKeyword_0_0_0();
			return obj;
		}
		return null;
	}

}

// unique?="unique"
protected class AttributeGroup_UniqueAssignment_0_1 extends AssignmentToken  {
	
	public AttributeGroup_UniqueAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getUniqueAssignment_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("unique",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("unique");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeGroupAccess().getUniqueUniqueKeyword_0_1_0();
			return obj;
		}
		return null;
	}

}

// filter?="filter"
protected class AttributeGroup_FilterAssignment_0_2 extends AssignmentToken  {
	
	public AttributeGroup_FilterAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getFilterAssignment_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("filter",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("filter");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeGroupAccess().getFilterFilterKeyword_0_2_0();
			return obj;
		}
		return null;
	}

}

// sortorder?="sortorder"
protected class AttributeGroup_SortorderAssignment_0_3 extends AssignmentToken  {
	
	public AttributeGroup_SortorderAssignment_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getSortorderAssignment_0_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("sortorder",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("sortorder");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeGroupAccess().getSortorderSortorderKeyword_0_3_0();
			return obj;
		}
		return null;
	}

}


// name=ID
protected class AttributeGroup_NameAssignment_1 extends AssignmentToken  {
	
	public AttributeGroup_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeGroup_Alternatives_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttributeGroupAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getAttributeGroupAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class AttributeGroup_LeftParenthesisKeyword_2 extends KeywordToken  {
	
	public AttributeGroup_LeftParenthesisKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getLeftParenthesisKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeGroup_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// attributes+=AttributeSortOrder
protected class AttributeGroup_AttributesAssignment_3 extends AssignmentToken  {
	
	public AttributeGroup_AttributesAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getAttributesAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeSortOrder_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attributes",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attributes");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributeSortOrderRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAttributeGroupAccess().getAttributesAttributeSortOrderParserRuleCall_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AttributeGroup_LeftParenthesisKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," attributes+=AttributeSortOrder)*
protected class AttributeGroup_Group_4 extends GroupToken {
	
	public AttributeGroup_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeGroup_AttributesAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class AttributeGroup_CommaKeyword_4_0 extends KeywordToken  {
	
	public AttributeGroup_CommaKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getCommaKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeGroup_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeGroup_AttributesAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// attributes+=AttributeSortOrder
protected class AttributeGroup_AttributesAssignment_4_1 extends AssignmentToken  {
	
	public AttributeGroup_AttributesAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getAttributesAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeSortOrder_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attributes",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attributes");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributeSortOrderRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAttributeGroupAccess().getAttributesAttributeSortOrderParserRuleCall_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AttributeGroup_CommaKeyword_4_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ")"
protected class AttributeGroup_RightParenthesisKeyword_5 extends KeywordToken  {
	
	public AttributeGroup_RightParenthesisKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeGroupAccess().getRightParenthesisKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeGroup_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeGroup_AttributesAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule AttributeGroup ****************/


/************ begin Rule AttributeSortOrder ****************
 *
 * AttributeSortOrder:
 * 	attribute=[Attribute] (asc?="asc" | desc?="desc")?;
 *
 **/

// attribute=[Attribute] (asc?="asc" | desc?="desc")?
protected class AttributeSortOrder_Group extends GroupToken {
	
	public AttributeSortOrder_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeSortOrderAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeSortOrder_Alternatives_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeSortOrder_AttributeAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeSortOrderRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// attribute=[Attribute]
protected class AttributeSortOrder_AttributeAssignment_0 extends AssignmentToken  {
	
	public AttributeSortOrder_AttributeAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeSortOrderAccess().getAttributeAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attribute",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAttributeSortOrderAccess().getAttributeAttributeCrossReference_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getAttributeSortOrderAccess().getAttributeAttributeCrossReference_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// (asc?="asc" | desc?="desc")?
protected class AttributeSortOrder_Alternatives_1 extends AlternativesToken {

	public AttributeSortOrder_Alternatives_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAttributeSortOrderAccess().getAlternatives_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeSortOrder_AscAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeSortOrder_DescAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// asc?="asc"
protected class AttributeSortOrder_AscAssignment_1_0 extends AssignmentToken  {
	
	public AttributeSortOrder_AscAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeSortOrderAccess().getAscAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeSortOrder_AttributeAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("asc",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("asc");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeSortOrderAccess().getAscAscKeyword_1_0_0();
			return obj;
		}
		return null;
	}

}

// desc?="desc"
protected class AttributeSortOrder_DescAssignment_1_1 extends AssignmentToken  {
	
	public AttributeSortOrder_DescAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeSortOrderAccess().getDescAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeSortOrder_AttributeAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("desc",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("desc");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeSortOrderAccess().getDescDescKeyword_1_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule AttributeSortOrder ****************/


/************ begin Rule DaoFeature ****************
 *
 * DaoFeature:
 * 	Column | ManyToOne | OneToOne | ManyToMany | OneToMany;
 *
 **/

// Column | ManyToOne | OneToOne | ManyToMany | OneToMany
protected class DaoFeature_Alternatives extends AlternativesToken {

	public DaoFeature_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getDaoFeatureAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DaoFeature_ColumnParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DaoFeature_ManyToOneParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new DaoFeature_OneToOneParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new DaoFeature_ManyToManyParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new DaoFeature_OneToManyParserRuleCall_4(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getColumnRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getManyToManyRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getManyToOneRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getOneToManyRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getOneToOneRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// Column
protected class DaoFeature_ColumnParserRuleCall_0 extends RuleCallToken {
	
	public DaoFeature_ColumnParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDaoFeatureAccess().getColumnParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getColumnRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Column_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ManyToOne
protected class DaoFeature_ManyToOneParserRuleCall_1 extends RuleCallToken {
	
	public DaoFeature_ManyToOneParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDaoFeatureAccess().getManyToOneParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getManyToOneRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ManyToOne_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// OneToOne
protected class DaoFeature_OneToOneParserRuleCall_2 extends RuleCallToken {
	
	public DaoFeature_OneToOneParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDaoFeatureAccess().getOneToOneParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToOne_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getOneToOneRule().getType().getClassifier())
			return null;
		if(checkForRecursion(OneToOne_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ManyToMany
protected class DaoFeature_ManyToManyParserRuleCall_3 extends RuleCallToken {
	
	public DaoFeature_ManyToManyParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDaoFeatureAccess().getManyToManyParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToMany_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getManyToManyRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ManyToMany_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// OneToMany
protected class DaoFeature_OneToManyParserRuleCall_4 extends RuleCallToken {
	
	public DaoFeature_OneToManyParserRuleCall_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDaoFeatureAccess().getOneToManyParserRuleCall_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToMany_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getOneToManyRule().getType().getClassifier())
			return null;
		if(checkForRecursion(OneToMany_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule DaoFeature ****************/


/************ begin Rule Dao ****************
 *
 * Dao:
 * 	"repository" name=ID "for" entity=[Entity|QualifiedName] "{" ("table" "=" tableName=STRING)? ("discriminator" "="
 * 	discriminator=STRING)? ("qualifier" "=" qualifier=STRING)? (operations+=Operation | queryOperation+=QueryOperation)*
 * 	(dataBaseConstraints+=DataBaseConstraint | columns+=Column | manyToOneAssociations+=ManyToOne |
 * 	oneToOneAssociations+=OneToOne | oneToManyAssociations+=OneToMany | manyToManyAssociations+=ManyToMany)* "}";
 *
 **/

// "repository" name=ID "for" entity=[Entity|QualifiedName] "{" ("table" "=" tableName=STRING)? ("discriminator" "="
// discriminator=STRING)? ("qualifier" "=" qualifier=STRING)? (operations+=Operation | queryOperation+=QueryOperation)*
// (dataBaseConstraints+=DataBaseConstraint | columns+=Column | manyToOneAssociations+=ManyToOne |
// oneToOneAssociations+=OneToOne | oneToManyAssociations+=OneToMany | manyToManyAssociations+=ManyToMany)* "}"
protected class Dao_Group extends GroupToken {
	
	public Dao_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDaoAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_RightCurlyBracketKeyword_10(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDaoRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "repository"
protected class Dao_RepositoryKeyword_0 extends KeywordToken  {
	
	public Dao_RepositoryKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDaoAccess().getRepositoryKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class Dao_NameAssignment_1 extends AssignmentToken  {
	
	public Dao_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_RepositoryKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDaoAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getDaoAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// "for"
protected class Dao_ForKeyword_2 extends KeywordToken  {
	
	public Dao_ForKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDaoAccess().getForKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// entity=[Entity|QualifiedName]
protected class Dao_EntityAssignment_3 extends AssignmentToken  {
	
	public Dao_EntityAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getEntityAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_ForKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("entity",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("entity");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDaoAccess().getEntityEntityCrossReference_3_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getDaoAccess().getEntityEntityCrossReference_3_0(); 
				return obj;
			}
		}
		return null;
	}

}

// "{"
protected class Dao_LeftCurlyBracketKeyword_4 extends KeywordToken  {
	
	public Dao_LeftCurlyBracketKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDaoAccess().getLeftCurlyBracketKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_EntityAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ("table" "=" tableName=STRING)?
protected class Dao_Group_5 extends GroupToken {
	
	public Dao_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDaoAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_TableNameAssignment_5_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "table"
protected class Dao_TableKeyword_5_0 extends KeywordToken  {
	
	public Dao_TableKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDaoAccess().getTableKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "="
protected class Dao_EqualsSignKeyword_5_1 extends KeywordToken  {
	
	public Dao_EqualsSignKeyword_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDaoAccess().getEqualsSignKeyword_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_TableKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// tableName=STRING
protected class Dao_TableNameAssignment_5_2 extends AssignmentToken  {
	
	public Dao_TableNameAssignment_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getTableNameAssignment_5_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_EqualsSignKeyword_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("tableName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("tableName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDaoAccess().getTableNameSTRINGTerminalRuleCall_5_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getDaoAccess().getTableNameSTRINGTerminalRuleCall_5_2_0();
			return obj;
		}
		return null;
	}

}


// ("discriminator" "=" discriminator=STRING)?
protected class Dao_Group_6 extends GroupToken {
	
	public Dao_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDaoAccess().getGroup_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_DiscriminatorAssignment_6_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "discriminator"
protected class Dao_DiscriminatorKeyword_6_0 extends KeywordToken  {
	
	public Dao_DiscriminatorKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDaoAccess().getDiscriminatorKeyword_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "="
protected class Dao_EqualsSignKeyword_6_1 extends KeywordToken  {
	
	public Dao_EqualsSignKeyword_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDaoAccess().getEqualsSignKeyword_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_DiscriminatorKeyword_6_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// discriminator=STRING
protected class Dao_DiscriminatorAssignment_6_2 extends AssignmentToken  {
	
	public Dao_DiscriminatorAssignment_6_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getDiscriminatorAssignment_6_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_EqualsSignKeyword_6_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("discriminator",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("discriminator");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDaoAccess().getDiscriminatorSTRINGTerminalRuleCall_6_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getDaoAccess().getDiscriminatorSTRINGTerminalRuleCall_6_2_0();
			return obj;
		}
		return null;
	}

}


// ("qualifier" "=" qualifier=STRING)?
protected class Dao_Group_7 extends GroupToken {
	
	public Dao_Group_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDaoAccess().getGroup_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_QualifierAssignment_7_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "qualifier"
protected class Dao_QualifierKeyword_7_0 extends KeywordToken  {
	
	public Dao_QualifierKeyword_7_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDaoAccess().getQualifierKeyword_7_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_Group_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Dao_Group_5(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// "="
protected class Dao_EqualsSignKeyword_7_1 extends KeywordToken  {
	
	public Dao_EqualsSignKeyword_7_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDaoAccess().getEqualsSignKeyword_7_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_QualifierKeyword_7_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// qualifier=STRING
protected class Dao_QualifierAssignment_7_2 extends AssignmentToken  {
	
	public Dao_QualifierAssignment_7_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getQualifierAssignment_7_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_EqualsSignKeyword_7_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("qualifier",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("qualifier");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDaoAccess().getQualifierSTRINGTerminalRuleCall_7_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getDaoAccess().getQualifierSTRINGTerminalRuleCall_7_2_0();
			return obj;
		}
		return null;
	}

}


// (operations+=Operation | queryOperation+=QueryOperation)*
protected class Dao_Alternatives_8 extends AlternativesToken {

	public Dao_Alternatives_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getDaoAccess().getAlternatives_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_OperationsAssignment_8_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Dao_QueryOperationAssignment_8_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// operations+=Operation
protected class Dao_OperationsAssignment_8_0 extends AssignmentToken  {
	
	public Dao_OperationsAssignment_8_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getOperationsAssignment_8_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Operation_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operations",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operations");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getOperationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDaoAccess().getOperationsOperationParserRuleCall_8_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Dao_Alternatives_8(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Dao_Group_7(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new Dao_Group_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new Dao_Group_5(lastRuleCallOrigin, next, actIndex, consumed);
			case 4: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// queryOperation+=QueryOperation
protected class Dao_QueryOperationAssignment_8_1 extends AssignmentToken  {
	
	public Dao_QueryOperationAssignment_8_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getQueryOperationAssignment_8_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("queryOperation",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("queryOperation");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getQueryOperationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDaoAccess().getQueryOperationQueryOperationParserRuleCall_8_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Dao_Alternatives_8(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Dao_Group_7(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new Dao_Group_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new Dao_Group_5(lastRuleCallOrigin, next, actIndex, consumed);
			case 4: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// (dataBaseConstraints+=DataBaseConstraint | columns+=Column | manyToOneAssociations+=ManyToOne |
// oneToOneAssociations+=OneToOne | oneToManyAssociations+=OneToMany | manyToManyAssociations+=ManyToMany)*
protected class Dao_Alternatives_9 extends AlternativesToken {

	public Dao_Alternatives_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getDaoAccess().getAlternatives_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_DataBaseConstraintsAssignment_9_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Dao_ColumnsAssignment_9_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Dao_ManyToOneAssociationsAssignment_9_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Dao_OneToOneAssociationsAssignment_9_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new Dao_OneToManyAssociationsAssignment_9_4(lastRuleCallOrigin, this, 4, inst);
			case 5: return new Dao_ManyToManyAssociationsAssignment_9_5(lastRuleCallOrigin, this, 5, inst);
			default: return null;
		}	
	}

}

// dataBaseConstraints+=DataBaseConstraint
protected class Dao_DataBaseConstraintsAssignment_9_0 extends AssignmentToken  {
	
	public Dao_DataBaseConstraintsAssignment_9_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getDataBaseConstraintsAssignment_9_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataBaseConstraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("dataBaseConstraints",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dataBaseConstraints");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDataBaseConstraintRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDaoAccess().getDataBaseConstraintsDataBaseConstraintParserRuleCall_9_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Dao_Alternatives_9(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Dao_Alternatives_8(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new Dao_Group_7(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new Dao_Group_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 4: return new Dao_Group_5(lastRuleCallOrigin, next, actIndex, consumed);
			case 5: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// columns+=Column
protected class Dao_ColumnsAssignment_9_1 extends AssignmentToken  {
	
	public Dao_ColumnsAssignment_9_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getColumnsAssignment_9_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getColumnRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDaoAccess().getColumnsColumnParserRuleCall_9_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Dao_Alternatives_9(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Dao_Alternatives_8(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new Dao_Group_7(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new Dao_Group_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 4: return new Dao_Group_5(lastRuleCallOrigin, next, actIndex, consumed);
			case 5: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// manyToOneAssociations+=ManyToOne
protected class Dao_ManyToOneAssociationsAssignment_9_2 extends AssignmentToken  {
	
	public Dao_ManyToOneAssociationsAssignment_9_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getManyToOneAssociationsAssignment_9_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("manyToOneAssociations",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("manyToOneAssociations");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getManyToOneRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDaoAccess().getManyToOneAssociationsManyToOneParserRuleCall_9_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Dao_Alternatives_9(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Dao_Alternatives_8(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new Dao_Group_7(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new Dao_Group_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 4: return new Dao_Group_5(lastRuleCallOrigin, next, actIndex, consumed);
			case 5: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// oneToOneAssociations+=OneToOne
protected class Dao_OneToOneAssociationsAssignment_9_3 extends AssignmentToken  {
	
	public Dao_OneToOneAssociationsAssignment_9_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getOneToOneAssociationsAssignment_9_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToOne_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oneToOneAssociations",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oneToOneAssociations");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getOneToOneRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDaoAccess().getOneToOneAssociationsOneToOneParserRuleCall_9_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Dao_Alternatives_9(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Dao_Alternatives_8(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new Dao_Group_7(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new Dao_Group_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 4: return new Dao_Group_5(lastRuleCallOrigin, next, actIndex, consumed);
			case 5: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// oneToManyAssociations+=OneToMany
protected class Dao_OneToManyAssociationsAssignment_9_4 extends AssignmentToken  {
	
	public Dao_OneToManyAssociationsAssignment_9_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getOneToManyAssociationsAssignment_9_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToMany_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oneToManyAssociations",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oneToManyAssociations");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getOneToManyRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDaoAccess().getOneToManyAssociationsOneToManyParserRuleCall_9_4_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Dao_Alternatives_9(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Dao_Alternatives_8(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new Dao_Group_7(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new Dao_Group_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 4: return new Dao_Group_5(lastRuleCallOrigin, next, actIndex, consumed);
			case 5: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// manyToManyAssociations+=ManyToMany
protected class Dao_ManyToManyAssociationsAssignment_9_5 extends AssignmentToken  {
	
	public Dao_ManyToManyAssociationsAssignment_9_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDaoAccess().getManyToManyAssociationsAssignment_9_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToMany_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("manyToManyAssociations",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("manyToManyAssociations");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getManyToManyRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDaoAccess().getManyToManyAssociationsManyToManyParserRuleCall_9_5_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Dao_Alternatives_9(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Dao_Alternatives_8(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new Dao_Group_7(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new Dao_Group_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 4: return new Dao_Group_5(lastRuleCallOrigin, next, actIndex, consumed);
			case 5: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class Dao_RightCurlyBracketKeyword_10 extends KeywordToken  {
	
	public Dao_RightCurlyBracketKeyword_10(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDaoAccess().getRightCurlyBracketKeyword_10();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Dao_Alternatives_9(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Dao_Alternatives_8(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Dao_Group_7(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Dao_Group_6(lastRuleCallOrigin, this, 3, inst);
			case 4: return new Dao_Group_5(lastRuleCallOrigin, this, 4, inst);
			case 5: return new Dao_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 5, inst);
			default: return null;
		}	
	}

}


/************ end Rule Dao ****************/


/************ begin Rule QueryOperation ****************
 *
 * QueryOperation:
 * 	"operation" (type=[core::Type|QualifiedName] many?="[]"?)? name=ID "(" (queryParameters+=QueryParameter (","
 * 	queryParameters+=QueryParameter)*)? ")" ":" statement=QlStatement;
 *
 **/

// "operation" (type=[core::Type|QualifiedName] many?="[]"?)? name=ID "(" (queryParameters+=QueryParameter (","
// queryParameters+=QueryParameter)*)? ")" ":" statement=QlStatement
protected class QueryOperation_Group extends GroupToken {
	
	public QueryOperation_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_StatementAssignment_7(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getQueryOperationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "operation"
protected class QueryOperation_OperationKeyword_0 extends KeywordToken  {
	
	public QueryOperation_OperationKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getOperationKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// (type=[core::Type|QualifiedName] many?="[]"?)?
protected class QueryOperation_Group_1 extends GroupToken {
	
	public QueryOperation_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_ManyAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new QueryOperation_TypeAssignment_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// type=[core::Type|QualifiedName]
protected class QueryOperation_TypeAssignment_1_0 extends AssignmentToken  {
	
	public QueryOperation_TypeAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getTypeAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_OperationKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getQueryOperationAccess().getTypeTypeCrossReference_1_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getQueryOperationAccess().getTypeTypeCrossReference_1_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// many?="[]"?
protected class QueryOperation_ManyAssignment_1_1 extends AssignmentToken  {
	
	public QueryOperation_ManyAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getManyAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_TypeAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("many",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("many");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getQueryOperationAccess().getManyLeftSquareBracketRightSquareBracketKeyword_1_1_0();
			return obj;
		}
		return null;
	}

}


// name=ID
protected class QueryOperation_NameAssignment_2 extends AssignmentToken  {
	
	public QueryOperation_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new QueryOperation_OperationKeyword_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getQueryOperationAccess().getNameIDTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getQueryOperationAccess().getNameIDTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class QueryOperation_LeftParenthesisKeyword_3 extends KeywordToken  {
	
	public QueryOperation_LeftParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getLeftParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// (queryParameters+=QueryParameter ("," queryParameters+=QueryParameter)*)?
protected class QueryOperation_Group_4 extends GroupToken {
	
	public QueryOperation_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_Group_4_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new QueryOperation_QueryParametersAssignment_4_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// queryParameters+=QueryParameter
protected class QueryOperation_QueryParametersAssignment_4_0 extends AssignmentToken  {
	
	public QueryOperation_QueryParametersAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getQueryParametersAssignment_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryParameter_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("queryParameters",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("queryParameters");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getQueryParameterRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getQueryOperationAccess().getQueryParametersQueryParameterParserRuleCall_4_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new QueryOperation_LeftParenthesisKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," queryParameters+=QueryParameter)*
protected class QueryOperation_Group_4_1 extends GroupToken {
	
	public QueryOperation_Group_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getGroup_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_QueryParametersAssignment_4_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class QueryOperation_CommaKeyword_4_1_0 extends KeywordToken  {
	
	public QueryOperation_CommaKeyword_4_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getCommaKeyword_4_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_Group_4_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new QueryOperation_QueryParametersAssignment_4_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// queryParameters+=QueryParameter
protected class QueryOperation_QueryParametersAssignment_4_1_1 extends AssignmentToken  {
	
	public QueryOperation_QueryParametersAssignment_4_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getQueryParametersAssignment_4_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryParameter_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("queryParameters",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("queryParameters");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getQueryParameterRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getQueryOperationAccess().getQueryParametersQueryParameterParserRuleCall_4_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new QueryOperation_CommaKeyword_4_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



// ")"
protected class QueryOperation_RightParenthesisKeyword_5 extends KeywordToken  {
	
	public QueryOperation_RightParenthesisKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getRightParenthesisKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new QueryOperation_LeftParenthesisKeyword_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// ":"
protected class QueryOperation_ColonKeyword_6 extends KeywordToken  {
	
	public QueryOperation_ColonKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getColonKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryOperation_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// statement=QlStatement
protected class QueryOperation_StatementAssignment_7 extends AssignmentToken  {
	
	public QueryOperation_StatementAssignment_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQueryOperationAccess().getStatementAssignment_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QlStatement_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("statement",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("statement");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getQlStatementRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getQueryOperationAccess().getStatementQlStatementParserRuleCall_7_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new QueryOperation_ColonKeyword_6(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule QueryOperation ****************/


/************ begin Rule QueryParameter ****************
 *
 * QueryParameter:
 * 	Parameter | attribute=[Attribute];
 *
 **/

// Parameter | attribute=[Attribute]
protected class QueryParameter_Alternatives extends AlternativesToken {

	public QueryParameter_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getQueryParameterAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryParameter_ParameterParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new QueryParameter_AttributeAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParameterRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// Parameter
protected class QueryParameter_ParameterParserRuleCall_0 extends RuleCallToken {
	
	public QueryParameter_ParameterParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getQueryParameterAccess().getParameterParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Parameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParameterRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Parameter_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// attribute=[Attribute]
protected class QueryParameter_AttributeAssignment_1 extends AssignmentToken  {
	
	public QueryParameter_AttributeAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQueryParameterAccess().getAttributeAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getQueryParameterRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("attribute",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getQueryParameterAccess().getAttributeAttributeCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getQueryParameterAccess().getAttributeAttributeCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


/************ end Rule QueryParameter ****************/


/************ begin Rule Column ****************
 *
 * Column:
 * 	"column" attribute=[Attribute] ("<->" columnName=STRING)? ("usertype" "=" userType=DataTypeAndTypeParameter)?
 * 	("sqltype" "=" columnType=[core::Type|QualifiedName])? ("{" columns+=Column+ "}")?;
 *
 **/

// "column" attribute=[Attribute] ("<->" columnName=STRING)? ("usertype" "=" userType=DataTypeAndTypeParameter)? ("sqltype"
// "=" columnType=[core::Type|QualifiedName])? ("{" columns+=Column+ "}")?
protected class Column_Group extends GroupToken {
	
	public Column_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getColumnAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Column_Group_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Column_Group_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Column_Group_2(lastRuleCallOrigin, this, 3, inst);
			case 4: return new Column_AttributeAssignment_1(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getColumnRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "column"
protected class Column_ColumnKeyword_0 extends KeywordToken  {
	
	public Column_ColumnKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnAccess().getColumnKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// attribute=[Attribute]
protected class Column_AttributeAssignment_1 extends AssignmentToken  {
	
	public Column_AttributeAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnAccess().getAttributeAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_ColumnKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attribute",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getColumnAccess().getAttributeAttributeCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getColumnAccess().getAttributeAttributeCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("<->" columnName=STRING)?
protected class Column_Group_2 extends GroupToken {
	
	public Column_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getColumnAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_ColumnNameAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "<->"
protected class Column_LessThanSignHyphenMinusGreaterThanSignKeyword_2_0 extends KeywordToken  {
	
	public Column_LessThanSignHyphenMinusGreaterThanSignKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_AttributeAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// columnName=STRING
protected class Column_ColumnNameAssignment_2_1 extends AssignmentToken  {
	
	public Column_ColumnNameAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnAccess().getColumnNameAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_LessThanSignHyphenMinusGreaterThanSignKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columnName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columnName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getColumnAccess().getColumnNameSTRINGTerminalRuleCall_2_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getColumnAccess().getColumnNameSTRINGTerminalRuleCall_2_1_0();
			return obj;
		}
		return null;
	}

}


// ("usertype" "=" userType=DataTypeAndTypeParameter)?
protected class Column_Group_3 extends GroupToken {
	
	public Column_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getColumnAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_UserTypeAssignment_3_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "usertype"
protected class Column_UsertypeKeyword_3_0 extends KeywordToken  {
	
	public Column_UsertypeKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnAccess().getUsertypeKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Column_AttributeAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "="
protected class Column_EqualsSignKeyword_3_1 extends KeywordToken  {
	
	public Column_EqualsSignKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnAccess().getEqualsSignKeyword_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_UsertypeKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// userType=DataTypeAndTypeParameter
protected class Column_UserTypeAssignment_3_2 extends AssignmentToken  {
	
	public Column_UserTypeAssignment_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnAccess().getUserTypeAssignment_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("userType",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("userType");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDataTypeAndTypeParameterRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getColumnAccess().getUserTypeDataTypeAndTypeParameterParserRuleCall_3_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Column_EqualsSignKeyword_3_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ("sqltype" "=" columnType=[core::Type|QualifiedName])?
protected class Column_Group_4 extends GroupToken {
	
	public Column_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getColumnAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_ColumnTypeAssignment_4_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "sqltype"
protected class Column_SqltypeKeyword_4_0 extends KeywordToken  {
	
	public Column_SqltypeKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnAccess().getSqltypeKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Column_Group_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Column_AttributeAssignment_1(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// "="
protected class Column_EqualsSignKeyword_4_1 extends KeywordToken  {
	
	public Column_EqualsSignKeyword_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnAccess().getEqualsSignKeyword_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_SqltypeKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// columnType=[core::Type|QualifiedName]
protected class Column_ColumnTypeAssignment_4_2 extends AssignmentToken  {
	
	public Column_ColumnTypeAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnAccess().getColumnTypeAssignment_4_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_EqualsSignKeyword_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columnType",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columnType");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getColumnAccess().getColumnTypeTypeCrossReference_4_2_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getColumnAccess().getColumnTypeTypeCrossReference_4_2_0(); 
				return obj;
			}
		}
		return null;
	}

}


// ("{" columns+=Column+ "}")?
protected class Column_Group_5 extends GroupToken {
	
	public Column_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getColumnAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_RightCurlyBracketKeyword_5_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "{"
protected class Column_LeftCurlyBracketKeyword_5_0 extends KeywordToken  {
	
	public Column_LeftCurlyBracketKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnAccess().getLeftCurlyBracketKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Column_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Column_Group_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Column_AttributeAssignment_1(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

}

// columns+=Column+
protected class Column_ColumnsAssignment_5_1 extends AssignmentToken  {
	
	public Column_ColumnsAssignment_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnAccess().getColumnsAssignment_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getColumnRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getColumnAccess().getColumnsColumnParserRuleCall_5_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Column_ColumnsAssignment_5_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Column_LeftCurlyBracketKeyword_5_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class Column_RightCurlyBracketKeyword_5_2 extends KeywordToken  {
	
	public Column_RightCurlyBracketKeyword_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnAccess().getRightCurlyBracketKeyword_5_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_ColumnsAssignment_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule Column ****************/


/************ begin Rule ManyToOne ****************
 *
 * ManyToOne:
 * 	"many-to-one" attribute=[Attribute] ("<->" columnName=STRING)? ("usertype" "=" userType=[core::Type|QualifiedName])?
 * 	("sqltype" "=" sqlType=[core::SqlType])? ("{" columns+=Column+ "}")?;
 *
 **/

// "many-to-one" attribute=[Attribute] ("<->" columnName=STRING)? ("usertype" "=" userType=[core::Type|QualifiedName])?
// ("sqltype" "=" sqlType=[core::SqlType])? ("{" columns+=Column+ "}")?
protected class ManyToOne_Group extends GroupToken {
	
	public ManyToOne_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ManyToOne_Group_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ManyToOne_Group_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ManyToOne_Group_2(lastRuleCallOrigin, this, 3, inst);
			case 4: return new ManyToOne_AttributeAssignment_1(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getManyToOneRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "many-to-one"
protected class ManyToOne_ManyToOneKeyword_0 extends KeywordToken  {
	
	public ManyToOne_ManyToOneKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getManyToOneKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// attribute=[Attribute]
protected class ManyToOne_AttributeAssignment_1 extends AssignmentToken  {
	
	public ManyToOne_AttributeAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getAttributeAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_ManyToOneKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attribute",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getManyToOneAccess().getAttributeAttributeCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getManyToOneAccess().getAttributeAttributeCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("<->" columnName=STRING)?
protected class ManyToOne_Group_2 extends GroupToken {
	
	public ManyToOne_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_ColumnNameAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "<->"
protected class ManyToOne_LessThanSignHyphenMinusGreaterThanSignKeyword_2_0 extends KeywordToken  {
	
	public ManyToOne_LessThanSignHyphenMinusGreaterThanSignKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_AttributeAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// columnName=STRING
protected class ManyToOne_ColumnNameAssignment_2_1 extends AssignmentToken  {
	
	public ManyToOne_ColumnNameAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getColumnNameAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_LessThanSignHyphenMinusGreaterThanSignKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columnName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columnName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getManyToOneAccess().getColumnNameSTRINGTerminalRuleCall_2_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getManyToOneAccess().getColumnNameSTRINGTerminalRuleCall_2_1_0();
			return obj;
		}
		return null;
	}

}


// ("usertype" "=" userType=[core::Type|QualifiedName])?
protected class ManyToOne_Group_3 extends GroupToken {
	
	public ManyToOne_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_UserTypeAssignment_3_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "usertype"
protected class ManyToOne_UsertypeKeyword_3_0 extends KeywordToken  {
	
	public ManyToOne_UsertypeKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getUsertypeKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ManyToOne_AttributeAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "="
protected class ManyToOne_EqualsSignKeyword_3_1 extends KeywordToken  {
	
	public ManyToOne_EqualsSignKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getEqualsSignKeyword_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_UsertypeKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// userType=[core::Type|QualifiedName]
protected class ManyToOne_UserTypeAssignment_3_2 extends AssignmentToken  {
	
	public ManyToOne_UserTypeAssignment_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getUserTypeAssignment_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_EqualsSignKeyword_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("userType",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("userType");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getManyToOneAccess().getUserTypeTypeCrossReference_3_2_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getManyToOneAccess().getUserTypeTypeCrossReference_3_2_0(); 
				return obj;
			}
		}
		return null;
	}

}


// ("sqltype" "=" sqlType=[core::SqlType])?
protected class ManyToOne_Group_4 extends GroupToken {
	
	public ManyToOne_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_SqlTypeAssignment_4_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "sqltype"
protected class ManyToOne_SqltypeKeyword_4_0 extends KeywordToken  {
	
	public ManyToOne_SqltypeKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getSqltypeKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ManyToOne_Group_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ManyToOne_AttributeAssignment_1(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// "="
protected class ManyToOne_EqualsSignKeyword_4_1 extends KeywordToken  {
	
	public ManyToOne_EqualsSignKeyword_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getEqualsSignKeyword_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_SqltypeKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// sqlType=[core::SqlType]
protected class ManyToOne_SqlTypeAssignment_4_2 extends AssignmentToken  {
	
	public ManyToOne_SqlTypeAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getSqlTypeAssignment_4_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_EqualsSignKeyword_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("sqlType",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("sqlType");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getManyToOneAccess().getSqlTypeSqlTypeCrossReference_4_2_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getManyToOneAccess().getSqlTypeSqlTypeCrossReference_4_2_0(); 
				return obj;
			}
		}
		return null;
	}

}


// ("{" columns+=Column+ "}")?
protected class ManyToOne_Group_5 extends GroupToken {
	
	public ManyToOne_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_RightCurlyBracketKeyword_5_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "{"
protected class ManyToOne_LeftCurlyBracketKeyword_5_0 extends KeywordToken  {
	
	public ManyToOne_LeftCurlyBracketKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getLeftCurlyBracketKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ManyToOne_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ManyToOne_Group_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ManyToOne_AttributeAssignment_1(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

}

// columns+=Column+
protected class ManyToOne_ColumnsAssignment_5_1 extends AssignmentToken  {
	
	public ManyToOne_ColumnsAssignment_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getColumnsAssignment_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getColumnRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getManyToOneAccess().getColumnsColumnParserRuleCall_5_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ManyToOne_ColumnsAssignment_5_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ManyToOne_LeftCurlyBracketKeyword_5_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class ManyToOne_RightCurlyBracketKeyword_5_2 extends KeywordToken  {
	
	public ManyToOne_RightCurlyBracketKeyword_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getManyToOneAccess().getRightCurlyBracketKeyword_5_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToOne_ColumnsAssignment_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule ManyToOne ****************/


/************ begin Rule OneToOne ****************
 *
 * OneToOne:
 * 	"one-to-one" attribute=[Attribute];
 *
 **/

// "one-to-one" attribute=[Attribute]
protected class OneToOne_Group extends GroupToken {
	
	public OneToOne_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getOneToOneAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToOne_AttributeAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getOneToOneRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "one-to-one"
protected class OneToOne_OneToOneKeyword_0 extends KeywordToken  {
	
	public OneToOne_OneToOneKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getOneToOneAccess().getOneToOneKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// attribute=[Attribute]
protected class OneToOne_AttributeAssignment_1 extends AssignmentToken  {
	
	public OneToOne_AttributeAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getOneToOneAccess().getAttributeAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToOne_OneToOneKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attribute",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getOneToOneAccess().getAttributeAttributeCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getOneToOneAccess().getAttributeAttributeCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


/************ end Rule OneToOne ****************/


/************ begin Rule OneToMany ****************
 *
 * OneToMany:
 * 	"one-to-many" attribute=[Attribute] ("<->" columnName=STRING)? ("{" columns+=Column+ "}")?;
 *
 **/

// "one-to-many" attribute=[Attribute] ("<->" columnName=STRING)? ("{" columns+=Column+ "}")?
protected class OneToMany_Group extends GroupToken {
	
	public OneToMany_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getOneToManyAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToMany_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new OneToMany_Group_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new OneToMany_AttributeAssignment_1(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getOneToManyRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "one-to-many"
protected class OneToMany_OneToManyKeyword_0 extends KeywordToken  {
	
	public OneToMany_OneToManyKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getOneToManyAccess().getOneToManyKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// attribute=[Attribute]
protected class OneToMany_AttributeAssignment_1 extends AssignmentToken  {
	
	public OneToMany_AttributeAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getOneToManyAccess().getAttributeAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToMany_OneToManyKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attribute",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getOneToManyAccess().getAttributeAttributeCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getOneToManyAccess().getAttributeAttributeCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("<->" columnName=STRING)?
protected class OneToMany_Group_2 extends GroupToken {
	
	public OneToMany_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getOneToManyAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToMany_ColumnNameAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "<->"
protected class OneToMany_LessThanSignHyphenMinusGreaterThanSignKeyword_2_0 extends KeywordToken  {
	
	public OneToMany_LessThanSignHyphenMinusGreaterThanSignKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getOneToManyAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToMany_AttributeAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// columnName=STRING
protected class OneToMany_ColumnNameAssignment_2_1 extends AssignmentToken  {
	
	public OneToMany_ColumnNameAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getOneToManyAccess().getColumnNameAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToMany_LessThanSignHyphenMinusGreaterThanSignKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columnName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columnName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getOneToManyAccess().getColumnNameSTRINGTerminalRuleCall_2_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getOneToManyAccess().getColumnNameSTRINGTerminalRuleCall_2_1_0();
			return obj;
		}
		return null;
	}

}


// ("{" columns+=Column+ "}")?
protected class OneToMany_Group_3 extends GroupToken {
	
	public OneToMany_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getOneToManyAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToMany_RightCurlyBracketKeyword_3_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "{"
protected class OneToMany_LeftCurlyBracketKeyword_3_0 extends KeywordToken  {
	
	public OneToMany_LeftCurlyBracketKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getOneToManyAccess().getLeftCurlyBracketKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToMany_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new OneToMany_AttributeAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// columns+=Column+
protected class OneToMany_ColumnsAssignment_3_1 extends AssignmentToken  {
	
	public OneToMany_ColumnsAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getOneToManyAccess().getColumnsAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getColumnRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getOneToManyAccess().getColumnsColumnParserRuleCall_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new OneToMany_ColumnsAssignment_3_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new OneToMany_LeftCurlyBracketKeyword_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class OneToMany_RightCurlyBracketKeyword_3_2 extends KeywordToken  {
	
	public OneToMany_RightCurlyBracketKeyword_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getOneToManyAccess().getRightCurlyBracketKeyword_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new OneToMany_ColumnsAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule OneToMany ****************/


/************ begin Rule ManyToMany ****************
 *
 * ManyToMany:
 * 	"many-to-many" attribute=[Attribute] "<->" tableName=STRING ("." columnName=STRING)?;
 *
 **/

// "many-to-many" attribute=[Attribute] "<->" tableName=STRING ("." columnName=STRING)?
protected class ManyToMany_Group extends GroupToken {
	
	public ManyToMany_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getManyToManyAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToMany_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ManyToMany_TableNameAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getManyToManyRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "many-to-many"
protected class ManyToMany_ManyToManyKeyword_0 extends KeywordToken  {
	
	public ManyToMany_ManyToManyKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getManyToManyAccess().getManyToManyKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// attribute=[Attribute]
protected class ManyToMany_AttributeAssignment_1 extends AssignmentToken  {
	
	public ManyToMany_AttributeAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getManyToManyAccess().getAttributeAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToMany_ManyToManyKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attribute",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getManyToManyAccess().getAttributeAttributeCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getManyToManyAccess().getAttributeAttributeCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// "<->"
protected class ManyToMany_LessThanSignHyphenMinusGreaterThanSignKeyword_2 extends KeywordToken  {
	
	public ManyToMany_LessThanSignHyphenMinusGreaterThanSignKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getManyToManyAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToMany_AttributeAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// tableName=STRING
protected class ManyToMany_TableNameAssignment_3 extends AssignmentToken  {
	
	public ManyToMany_TableNameAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getManyToManyAccess().getTableNameAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToMany_LessThanSignHyphenMinusGreaterThanSignKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("tableName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("tableName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getManyToManyAccess().getTableNameSTRINGTerminalRuleCall_3_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getManyToManyAccess().getTableNameSTRINGTerminalRuleCall_3_0();
			return obj;
		}
		return null;
	}

}

// ("." columnName=STRING)?
protected class ManyToMany_Group_4 extends GroupToken {
	
	public ManyToMany_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getManyToManyAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToMany_ColumnNameAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "."
protected class ManyToMany_FullStopKeyword_4_0 extends KeywordToken  {
	
	public ManyToMany_FullStopKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getManyToManyAccess().getFullStopKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToMany_TableNameAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// columnName=STRING
protected class ManyToMany_ColumnNameAssignment_4_1 extends AssignmentToken  {
	
	public ManyToMany_ColumnNameAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getManyToManyAccess().getColumnNameAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ManyToMany_FullStopKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columnName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columnName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getManyToManyAccess().getColumnNameSTRINGTerminalRuleCall_4_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getManyToManyAccess().getColumnNameSTRINGTerminalRuleCall_4_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule ManyToMany ****************/


/************ begin Rule DataBaseConstraint ****************
 *
 * / **
 *  * DataBaseConstraint used for efficient and consistent finder and ddl generation 
 *  * Generated artefacts: Service,ServiceImpl,Dao,DaoImpl,Hbm,Ddl
 *  * / DataBaseConstraint:
 * 	type=DataBaseConstraintType name=ID "(" attributes+=[Attribute] ("," attributes+=[Attribute])* ")";
 *
 **/

// type=DataBaseConstraintType name=ID "(" attributes+=[Attribute] ("," attributes+=[Attribute])* ")"
protected class DataBaseConstraint_Group extends GroupToken {
	
	public DataBaseConstraint_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataBaseConstraintAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataBaseConstraint_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDataBaseConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// type=DataBaseConstraintType
protected class DataBaseConstraint_TypeAssignment_0 extends AssignmentToken  {
	
	public DataBaseConstraint_TypeAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataBaseConstraintAccess().getTypeAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getDataBaseConstraintAccess().getTypeDataBaseConstraintTypeEnumRuleCall_0_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getDataBaseConstraintAccess().getTypeDataBaseConstraintTypeEnumRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// name=ID
protected class DataBaseConstraint_NameAssignment_1 extends AssignmentToken  {
	
	public DataBaseConstraint_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataBaseConstraintAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataBaseConstraint_TypeAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDataBaseConstraintAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getDataBaseConstraintAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class DataBaseConstraint_LeftParenthesisKeyword_2 extends KeywordToken  {
	
	public DataBaseConstraint_LeftParenthesisKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataBaseConstraintAccess().getLeftParenthesisKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataBaseConstraint_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// attributes+=[Attribute]
protected class DataBaseConstraint_AttributesAssignment_3 extends AssignmentToken  {
	
	public DataBaseConstraint_AttributesAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataBaseConstraintAccess().getAttributesAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataBaseConstraint_LeftParenthesisKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attributes",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attributes");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDataBaseConstraintAccess().getAttributesAttributeCrossReference_3_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getDataBaseConstraintAccess().getAttributesAttributeCrossReference_3_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("," attributes+=[Attribute])*
protected class DataBaseConstraint_Group_4 extends GroupToken {
	
	public DataBaseConstraint_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataBaseConstraintAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataBaseConstraint_AttributesAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class DataBaseConstraint_CommaKeyword_4_0 extends KeywordToken  {
	
	public DataBaseConstraint_CommaKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataBaseConstraintAccess().getCommaKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataBaseConstraint_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataBaseConstraint_AttributesAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// attributes+=[Attribute]
protected class DataBaseConstraint_AttributesAssignment_4_1 extends AssignmentToken  {
	
	public DataBaseConstraint_AttributesAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataBaseConstraintAccess().getAttributesAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataBaseConstraint_CommaKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attributes",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attributes");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDataBaseConstraintAccess().getAttributesAttributeCrossReference_4_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getDataBaseConstraintAccess().getAttributesAttributeCrossReference_4_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


// ")"
protected class DataBaseConstraint_RightParenthesisKeyword_5 extends KeywordToken  {
	
	public DataBaseConstraint_RightParenthesisKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataBaseConstraintAccess().getRightParenthesisKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataBaseConstraint_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataBaseConstraint_AttributesAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule DataBaseConstraint ****************/


/************ begin Rule ReferenceableByXmadslVariable ****************
 *
 * ReferenceableByXmadslVariable returns core::ReferenceableByXmadslVariable:
 * 	Property | StatusFlag | Attribute | IElementWithNoName;
 *
 **/

// Property | StatusFlag | Attribute | IElementWithNoName
protected class ReferenceableByXmadslVariable_Alternatives extends AlternativesToken {

	public ReferenceableByXmadslVariable_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getReferenceableByXmadslVariableAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceableByXmadslVariable_PropertyParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceableByXmadslVariable_StatusFlagParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ReferenceableByXmadslVariable_AttributeParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ReferenceableByXmadslVariable_IElementWithNoNameParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeAccess().getAttributeAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIElementWithNoNameRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStatusFlagRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// Property
protected class ReferenceableByXmadslVariable_PropertyParserRuleCall_0 extends RuleCallToken {
	
	public ReferenceableByXmadslVariable_PropertyParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getReferenceableByXmadslVariableAccess().getPropertyParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Property_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPropertyRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Property_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// StatusFlag
protected class ReferenceableByXmadslVariable_StatusFlagParserRuleCall_1 extends RuleCallToken {
	
	public ReferenceableByXmadslVariable_StatusFlagParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getReferenceableByXmadslVariableAccess().getStatusFlagParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StatusFlag_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getStatusFlagRule().getType().getClassifier())
			return null;
		if(checkForRecursion(StatusFlag_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Attribute
protected class ReferenceableByXmadslVariable_AttributeParserRuleCall_2 extends RuleCallToken {
	
	public ReferenceableByXmadslVariable_AttributeParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getReferenceableByXmadslVariableAccess().getAttributeParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeAccess().getAttributeAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(Attribute_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// IElementWithNoName
protected class ReferenceableByXmadslVariable_IElementWithNoNameParserRuleCall_3 extends RuleCallToken {
	
	public ReferenceableByXmadslVariable_IElementWithNoNameParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getReferenceableByXmadslVariableAccess().getIElementWithNoNameParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IElementWithNoName_NoNameAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getIElementWithNoNameRule().getType().getClassifier())
			return null;
		if(checkForRecursion(IElementWithNoName_NoNameAssignment.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule ReferenceableByXmadslVariable ****************/


/************ begin Rule ApplicationSession ****************
 *
 * ApplicationSession:
 * 	"context" name=ID "{" properties+=Property* functions+=SessionFunction* conditionsBlock=ConditionsBlock? "}";
 *
 **/

// "context" name=ID "{" properties+=Property* functions+=SessionFunction* conditionsBlock=ConditionsBlock? "}"
protected class ApplicationSession_Group extends GroupToken {
	
	public ApplicationSession_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getApplicationSessionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ApplicationSession_RightCurlyBracketKeyword_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getApplicationSessionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "context"
protected class ApplicationSession_ContextKeyword_0 extends KeywordToken  {
	
	public ApplicationSession_ContextKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getApplicationSessionAccess().getContextKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class ApplicationSession_NameAssignment_1 extends AssignmentToken  {
	
	public ApplicationSession_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getApplicationSessionAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ApplicationSession_ContextKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getApplicationSessionAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getApplicationSessionAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// "{"
protected class ApplicationSession_LeftCurlyBracketKeyword_2 extends KeywordToken  {
	
	public ApplicationSession_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getApplicationSessionAccess().getLeftCurlyBracketKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ApplicationSession_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// properties+=Property*
protected class ApplicationSession_PropertiesAssignment_3 extends AssignmentToken  {
	
	public ApplicationSession_PropertiesAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getApplicationSessionAccess().getPropertiesAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Property_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("properties",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("properties");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getApplicationSessionAccess().getPropertiesPropertyParserRuleCall_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ApplicationSession_PropertiesAssignment_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ApplicationSession_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// functions+=SessionFunction*
protected class ApplicationSession_FunctionsAssignment_4 extends AssignmentToken  {
	
	public ApplicationSession_FunctionsAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getApplicationSessionAccess().getFunctionsAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SessionFunction_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("functions",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("functions");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSessionFunctionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getApplicationSessionAccess().getFunctionsSessionFunctionParserRuleCall_4_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ApplicationSession_FunctionsAssignment_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ApplicationSession_PropertiesAssignment_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new ApplicationSession_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// conditionsBlock=ConditionsBlock?
protected class ApplicationSession_ConditionsBlockAssignment_5 extends AssignmentToken  {
	
	public ApplicationSession_ConditionsBlockAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getApplicationSessionAccess().getConditionsBlockAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConditionsBlock_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("conditionsBlock",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("conditionsBlock");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConditionsBlockRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getApplicationSessionAccess().getConditionsBlockConditionsBlockParserRuleCall_5_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ApplicationSession_FunctionsAssignment_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ApplicationSession_PropertiesAssignment_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new ApplicationSession_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class ApplicationSession_RightCurlyBracketKeyword_6 extends KeywordToken  {
	
	public ApplicationSession_RightCurlyBracketKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getApplicationSessionAccess().getRightCurlyBracketKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ApplicationSession_ConditionsBlockAssignment_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ApplicationSession_FunctionsAssignment_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ApplicationSession_PropertiesAssignment_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ApplicationSession_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

}


/************ end Rule ApplicationSession ****************/


/************ begin Rule SessionFunction ****************
 *
 * SessionFunction returns core::Function:
 * 	"function" resultType=[core::SimpleType|QualifiedName] name=ID "(" parameterType=[core::SimpleType|QualifiedName]
 * 	parameterName=ID ")";
 *
 **/

// "function" resultType=[core::SimpleType|QualifiedName] name=ID "(" parameterType=[core::SimpleType|QualifiedName]
// parameterName=ID ")"
protected class SessionFunction_Group extends GroupToken {
	
	public SessionFunction_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSessionFunctionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SessionFunction_RightParenthesisKeyword_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSessionFunctionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "function"
protected class SessionFunction_FunctionKeyword_0 extends KeywordToken  {
	
	public SessionFunction_FunctionKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSessionFunctionAccess().getFunctionKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// resultType=[core::SimpleType|QualifiedName]
protected class SessionFunction_ResultTypeAssignment_1 extends AssignmentToken  {
	
	public SessionFunction_ResultTypeAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSessionFunctionAccess().getResultTypeAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SessionFunction_FunctionKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("resultType",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("resultType");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSessionFunctionAccess().getResultTypeSimpleTypeCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getSessionFunctionAccess().getResultTypeSimpleTypeCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// name=ID
protected class SessionFunction_NameAssignment_2 extends AssignmentToken  {
	
	public SessionFunction_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSessionFunctionAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SessionFunction_ResultTypeAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSessionFunctionAccess().getNameIDTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSessionFunctionAccess().getNameIDTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class SessionFunction_LeftParenthesisKeyword_3 extends KeywordToken  {
	
	public SessionFunction_LeftParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSessionFunctionAccess().getLeftParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SessionFunction_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// parameterType=[core::SimpleType|QualifiedName]
protected class SessionFunction_ParameterTypeAssignment_4 extends AssignmentToken  {
	
	public SessionFunction_ParameterTypeAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSessionFunctionAccess().getParameterTypeAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SessionFunction_LeftParenthesisKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameterType",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameterType");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSessionFunctionAccess().getParameterTypeSimpleTypeCrossReference_4_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getSessionFunctionAccess().getParameterTypeSimpleTypeCrossReference_4_0(); 
				return obj;
			}
		}
		return null;
	}

}

// parameterName=ID
protected class SessionFunction_ParameterNameAssignment_5 extends AssignmentToken  {
	
	public SessionFunction_ParameterNameAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSessionFunctionAccess().getParameterNameAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SessionFunction_ParameterTypeAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameterName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameterName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSessionFunctionAccess().getParameterNameIDTerminalRuleCall_5_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSessionFunctionAccess().getParameterNameIDTerminalRuleCall_5_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class SessionFunction_RightParenthesisKeyword_6 extends KeywordToken  {
	
	public SessionFunction_RightParenthesisKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSessionFunctionAccess().getRightParenthesisKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SessionFunction_ParameterNameAssignment_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule SessionFunction ****************/


/************ begin Rule QlStatement ****************
 *
 * QlStatement:
 * 	InsertStatement | SelectStatement | UpdateStatement | DeleteStatement | CallableStatement;
 *
 **/

// InsertStatement | SelectStatement | UpdateStatement | DeleteStatement | CallableStatement
protected class QlStatement_Alternatives extends AlternativesToken {

	public QlStatement_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getQlStatementAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QlStatement_InsertStatementParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new QlStatement_SelectStatementParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new QlStatement_UpdateStatementParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new QlStatement_DeleteStatementParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new QlStatement_CallableStatementParserRuleCall_4(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCallableStatementRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getDeleteStatementRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getInsertStatementRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectClassRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectObjectRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectPropertiesRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectStatementRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUpdateStatementRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// InsertStatement
protected class QlStatement_InsertStatementParserRuleCall_0 extends RuleCallToken {
	
	public QlStatement_InsertStatementParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getQlStatementAccess().getInsertStatementParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InsertStatement_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getInsertStatementRule().getType().getClassifier())
			return null;
		if(checkForRecursion(InsertStatement_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// SelectStatement
protected class QlStatement_SelectStatementParserRuleCall_1 extends RuleCallToken {
	
	public QlStatement_SelectStatementParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getQlStatementAccess().getSelectStatementParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSelectClassRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectObjectRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectPropertiesRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectStatementRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SelectStatement_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// UpdateStatement
protected class QlStatement_UpdateStatementParserRuleCall_2 extends RuleCallToken {
	
	public QlStatement_UpdateStatementParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getQlStatementAccess().getUpdateStatementParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UpdateStatement_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getUpdateStatementRule().getType().getClassifier())
			return null;
		if(checkForRecursion(UpdateStatement_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// DeleteStatement
protected class QlStatement_DeleteStatementParserRuleCall_3 extends RuleCallToken {
	
	public QlStatement_DeleteStatementParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getQlStatementAccess().getDeleteStatementParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DeleteStatement_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDeleteStatementRule().getType().getClassifier())
			return null;
		if(checkForRecursion(DeleteStatement_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// CallableStatement
protected class QlStatement_CallableStatementParserRuleCall_4 extends RuleCallToken {
	
	public QlStatement_CallableStatementParserRuleCall_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getQlStatementAccess().getCallableStatementParserRuleCall_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCallableStatementRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CallableStatement_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule QlStatement ****************/


/************ begin Rule CallableStatement ****************
 *
 * CallableStatement:
 * 	"call" functionCall?="function"? name=QualifiedName "(" (inParameter+=CallInputParameter (","
 * 	inParameter+=CallInputParameter)*)? ")" ("return" outParameter+=CallOutputParameter (","
 * 	outParameter+=CallOutputParameter)*)?;
 *
 **/

// "call" functionCall?="function"? name=QualifiedName "(" (inParameter+=CallInputParameter (","
// inParameter+=CallInputParameter)*)? ")" ("return" outParameter+=CallOutputParameter (","
// outParameter+=CallOutputParameter)*)?
protected class CallableStatement_Group extends GroupToken {
	
	public CallableStatement_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_Group_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallableStatement_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCallableStatementRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "call"
protected class CallableStatement_CallKeyword_0 extends KeywordToken  {
	
	public CallableStatement_CallKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getCallKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// functionCall?="function"?
protected class CallableStatement_FunctionCallAssignment_1 extends AssignmentToken  {
	
	public CallableStatement_FunctionCallAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getFunctionCallAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_CallKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("functionCall",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("functionCall");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCallableStatementAccess().getFunctionCallFunctionKeyword_1_0();
			return obj;
		}
		return null;
	}

}

// name=QualifiedName
protected class CallableStatement_NameAssignment_2 extends AssignmentToken  {
	
	public CallableStatement_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_FunctionCallAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallableStatement_CallKeyword_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCallableStatementAccess().getNameQualifiedNameParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getCallableStatementAccess().getNameQualifiedNameParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class CallableStatement_LeftParenthesisKeyword_3 extends KeywordToken  {
	
	public CallableStatement_LeftParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getLeftParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// (inParameter+=CallInputParameter ("," inParameter+=CallInputParameter)*)?
protected class CallableStatement_Group_4 extends GroupToken {
	
	public CallableStatement_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_Group_4_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallableStatement_InParameterAssignment_4_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// inParameter+=CallInputParameter
protected class CallableStatement_InParameterAssignment_4_0 extends AssignmentToken  {
	
	public CallableStatement_InParameterAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getInParameterAssignment_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallInputParameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("inParameter",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("inParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCallInputParameterRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCallableStatementAccess().getInParameterCallInputParameterParserRuleCall_4_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CallableStatement_LeftParenthesisKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," inParameter+=CallInputParameter)*
protected class CallableStatement_Group_4_1 extends GroupToken {
	
	public CallableStatement_Group_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getGroup_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_InParameterAssignment_4_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class CallableStatement_CommaKeyword_4_1_0 extends KeywordToken  {
	
	public CallableStatement_CommaKeyword_4_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getCommaKeyword_4_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_Group_4_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallableStatement_InParameterAssignment_4_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// inParameter+=CallInputParameter
protected class CallableStatement_InParameterAssignment_4_1_1 extends AssignmentToken  {
	
	public CallableStatement_InParameterAssignment_4_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getInParameterAssignment_4_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallInputParameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("inParameter",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("inParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCallInputParameterRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCallableStatementAccess().getInParameterCallInputParameterParserRuleCall_4_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CallableStatement_CommaKeyword_4_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



// ")"
protected class CallableStatement_RightParenthesisKeyword_5 extends KeywordToken  {
	
	public CallableStatement_RightParenthesisKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getRightParenthesisKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallableStatement_LeftParenthesisKeyword_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// ("return" outParameter+=CallOutputParameter ("," outParameter+=CallOutputParameter)*)?
protected class CallableStatement_Group_6 extends GroupToken {
	
	public CallableStatement_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getGroup_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_Group_6_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallableStatement_OutParameterAssignment_6_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "return"
protected class CallableStatement_ReturnKeyword_6_0 extends KeywordToken  {
	
	public CallableStatement_ReturnKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getReturnKeyword_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// outParameter+=CallOutputParameter
protected class CallableStatement_OutParameterAssignment_6_1 extends AssignmentToken  {
	
	public CallableStatement_OutParameterAssignment_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getOutParameterAssignment_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallOutputParameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("outParameter",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("outParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCallOutputParameterRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCallableStatementAccess().getOutParameterCallOutputParameterParserRuleCall_6_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CallableStatement_ReturnKeyword_6_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," outParameter+=CallOutputParameter)*
protected class CallableStatement_Group_6_2 extends GroupToken {
	
	public CallableStatement_Group_6_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getGroup_6_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_OutParameterAssignment_6_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class CallableStatement_CommaKeyword_6_2_0 extends KeywordToken  {
	
	public CallableStatement_CommaKeyword_6_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getCommaKeyword_6_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallableStatement_Group_6_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallableStatement_OutParameterAssignment_6_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// outParameter+=CallOutputParameter
protected class CallableStatement_OutParameterAssignment_6_2_1 extends AssignmentToken  {
	
	public CallableStatement_OutParameterAssignment_6_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallableStatementAccess().getOutParameterAssignment_6_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallOutputParameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("outParameter",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("outParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCallOutputParameterRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCallableStatementAccess().getOutParameterCallOutputParameterParserRuleCall_6_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CallableStatement_CommaKeyword_6_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}




/************ end Rule CallableStatement ****************/


/************ begin Rule CallInputParameter ****************
 *
 * CallInputParameter:
 * 	{CallInputParameter} parameter=[QueryParameter] ("." attribute=[Attribute])? ("as" name=ID)?;
 *
 **/

// {CallInputParameter} parameter=[QueryParameter] ("." attribute=[Attribute])? ("as" name=ID)?
protected class CallInputParameter_Group extends GroupToken {
	
	public CallInputParameter_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallInputParameterAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallInputParameter_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallInputParameter_Group_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new CallInputParameter_ParameterAssignment_1(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCallInputParameterAccess().getCallInputParameterAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CallInputParameter}
protected class CallInputParameter_CallInputParameterAction_0 extends ActionToken  {

	public CallInputParameter_CallInputParameterAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCallInputParameterAccess().getCallInputParameterAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// parameter=[QueryParameter]
protected class CallInputParameter_ParameterAssignment_1 extends AssignmentToken  {
	
	public CallInputParameter_ParameterAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallInputParameterAccess().getParameterAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallInputParameter_CallInputParameterAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameter",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCallInputParameterAccess().getParameterQueryParameterCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getCallInputParameterAccess().getParameterQueryParameterCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("." attribute=[Attribute])?
protected class CallInputParameter_Group_2 extends GroupToken {
	
	public CallInputParameter_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallInputParameterAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallInputParameter_AttributeAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "."
protected class CallInputParameter_FullStopKeyword_2_0 extends KeywordToken  {
	
	public CallInputParameter_FullStopKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCallInputParameterAccess().getFullStopKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallInputParameter_ParameterAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// attribute=[Attribute]
protected class CallInputParameter_AttributeAssignment_2_1 extends AssignmentToken  {
	
	public CallInputParameter_AttributeAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallInputParameterAccess().getAttributeAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallInputParameter_FullStopKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attribute",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCallInputParameterAccess().getAttributeAttributeCrossReference_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getCallInputParameterAccess().getAttributeAttributeCrossReference_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


// ("as" name=ID)?
protected class CallInputParameter_Group_3 extends GroupToken {
	
	public CallInputParameter_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallInputParameterAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallInputParameter_NameAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "as"
protected class CallInputParameter_AsKeyword_3_0 extends KeywordToken  {
	
	public CallInputParameter_AsKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCallInputParameterAccess().getAsKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallInputParameter_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallInputParameter_ParameterAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// name=ID
protected class CallInputParameter_NameAssignment_3_1 extends AssignmentToken  {
	
	public CallInputParameter_NameAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallInputParameterAccess().getNameAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallInputParameter_AsKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCallInputParameterAccess().getNameIDTerminalRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCallInputParameterAccess().getNameIDTerminalRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule CallInputParameter ****************/


/************ begin Rule CallOutputParameter ****************
 *
 * CallOutputParameter:
 * 	{CallOutputParameter} (name=ID "as"?)? attribute=[Attribute]? ("." nestedAttribute=[Attribute])?;
 *
 **/

// {CallOutputParameter} (name=ID "as"?)? attribute=[Attribute]? ("." nestedAttribute=[Attribute])?
protected class CallOutputParameter_Group extends GroupToken {
	
	public CallOutputParameter_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallOutputParameterAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallOutputParameter_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallOutputParameter_AttributeAssignment_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new CallOutputParameter_Group_1(lastRuleCallOrigin, this, 2, inst);
			case 3: return new CallOutputParameter_CallOutputParameterAction_0(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCallOutputParameterAccess().getCallOutputParameterAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CallOutputParameter}
protected class CallOutputParameter_CallOutputParameterAction_0 extends ActionToken  {

	public CallOutputParameter_CallOutputParameterAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCallOutputParameterAccess().getCallOutputParameterAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// (name=ID "as"?)?
protected class CallOutputParameter_Group_1 extends GroupToken {
	
	public CallOutputParameter_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallOutputParameterAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallOutputParameter_NameAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name=ID
protected class CallOutputParameter_NameAssignment_1_0 extends AssignmentToken  {
	
	public CallOutputParameter_NameAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallOutputParameterAccess().getNameAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallOutputParameter_CallOutputParameterAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCallOutputParameterAccess().getNameIDTerminalRuleCall_1_0_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCallOutputParameterAccess().getNameIDTerminalRuleCall_1_0_0();
			return obj;
		}
		return null;
	}

}


// attribute=[Attribute]?
protected class CallOutputParameter_AttributeAssignment_2 extends AssignmentToken  {
	
	public CallOutputParameter_AttributeAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallOutputParameterAccess().getAttributeAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallOutputParameter_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallOutputParameter_CallOutputParameterAction_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attribute",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCallOutputParameterAccess().getAttributeAttributeCrossReference_2_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getCallOutputParameterAccess().getAttributeAttributeCrossReference_2_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("." nestedAttribute=[Attribute])?
protected class CallOutputParameter_Group_3 extends GroupToken {
	
	public CallOutputParameter_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallOutputParameterAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallOutputParameter_NestedAttributeAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "."
protected class CallOutputParameter_FullStopKeyword_3_0 extends KeywordToken  {
	
	public CallOutputParameter_FullStopKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCallOutputParameterAccess().getFullStopKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallOutputParameter_AttributeAssignment_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CallOutputParameter_Group_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new CallOutputParameter_CallOutputParameterAction_0(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// nestedAttribute=[Attribute]
protected class CallOutputParameter_NestedAttributeAssignment_3_1 extends AssignmentToken  {
	
	public CallOutputParameter_NestedAttributeAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallOutputParameterAccess().getNestedAttributeAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CallOutputParameter_FullStopKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("nestedAttribute",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("nestedAttribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCallOutputParameterAccess().getNestedAttributeAttributeCrossReference_3_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getCallOutputParameterAccess().getNestedAttributeAttributeCrossReference_3_1_0(); 
				return obj;
			}
		}
		return null;
	}

}



/************ end Rule CallOutputParameter ****************/


/************ begin Rule InsertStatement ****************
 *
 * InsertStatement:
 * 	"insert" "into" entity=[Entity|QualifiedName] "(" expression+=PrimaryExpression ("," expression+=PrimaryExpression)*
 * 	")" selectStatement=SelectStatement;
 *
 **/

// "insert" "into" entity=[Entity|QualifiedName] "(" expression+=PrimaryExpression ("," expression+=PrimaryExpression)* ")"
// selectStatement=SelectStatement
protected class InsertStatement_Group extends GroupToken {
	
	public InsertStatement_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getInsertStatementAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InsertStatement_SelectStatementAssignment_7(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getInsertStatementRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "insert"
protected class InsertStatement_InsertKeyword_0 extends KeywordToken  {
	
	public InsertStatement_InsertKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInsertStatementAccess().getInsertKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "into"
protected class InsertStatement_IntoKeyword_1 extends KeywordToken  {
	
	public InsertStatement_IntoKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInsertStatementAccess().getIntoKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InsertStatement_InsertKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// entity=[Entity|QualifiedName]
protected class InsertStatement_EntityAssignment_2 extends AssignmentToken  {
	
	public InsertStatement_EntityAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getInsertStatementAccess().getEntityAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InsertStatement_IntoKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("entity",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("entity");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getInsertStatementAccess().getEntityEntityCrossReference_2_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getInsertStatementAccess().getEntityEntityCrossReference_2_0(); 
				return obj;
			}
		}
		return null;
	}

}

// "("
protected class InsertStatement_LeftParenthesisKeyword_3 extends KeywordToken  {
	
	public InsertStatement_LeftParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInsertStatementAccess().getLeftParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InsertStatement_EntityAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// expression+=PrimaryExpression
protected class InsertStatement_ExpressionAssignment_4 extends AssignmentToken  {
	
	public InsertStatement_ExpressionAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getInsertStatementAccess().getExpressionAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPrimaryExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getInsertStatementAccess().getExpressionPrimaryExpressionParserRuleCall_4_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new InsertStatement_LeftParenthesisKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," expression+=PrimaryExpression)*
protected class InsertStatement_Group_5 extends GroupToken {
	
	public InsertStatement_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getInsertStatementAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InsertStatement_ExpressionAssignment_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class InsertStatement_CommaKeyword_5_0 extends KeywordToken  {
	
	public InsertStatement_CommaKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInsertStatementAccess().getCommaKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InsertStatement_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new InsertStatement_ExpressionAssignment_4(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// expression+=PrimaryExpression
protected class InsertStatement_ExpressionAssignment_5_1 extends AssignmentToken  {
	
	public InsertStatement_ExpressionAssignment_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getInsertStatementAccess().getExpressionAssignment_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPrimaryExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getInsertStatementAccess().getExpressionPrimaryExpressionParserRuleCall_5_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new InsertStatement_CommaKeyword_5_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ")"
protected class InsertStatement_RightParenthesisKeyword_6 extends KeywordToken  {
	
	public InsertStatement_RightParenthesisKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInsertStatementAccess().getRightParenthesisKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InsertStatement_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new InsertStatement_ExpressionAssignment_4(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// selectStatement=SelectStatement
protected class InsertStatement_SelectStatementAssignment_7 extends AssignmentToken  {
	
	public InsertStatement_SelectStatementAssignment_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getInsertStatementAccess().getSelectStatementAssignment_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("selectStatement",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("selectStatement");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSelectStatementRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getInsertStatementAccess().getSelectStatementSelectStatementParserRuleCall_7_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new InsertStatement_RightParenthesisKeyword_6(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule InsertStatement ****************/


/************ begin Rule DeleteStatement ****************
 *
 * DeleteStatement:
 * 	"delete" "from"? entity=[Entity|QualifiedName] "as"? name=ID ("where" where=Expression)?;
 *
 **/

// "delete" "from"? entity=[Entity|QualifiedName] "as"? name=ID ("where" where=Expression)?
protected class DeleteStatement_Group extends GroupToken {
	
	public DeleteStatement_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDeleteStatementAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DeleteStatement_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DeleteStatement_NameAssignment_4(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDeleteStatementRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "delete"
protected class DeleteStatement_DeleteKeyword_0 extends KeywordToken  {
	
	public DeleteStatement_DeleteKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDeleteStatementAccess().getDeleteKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// entity=[Entity|QualifiedName]
protected class DeleteStatement_EntityAssignment_2 extends AssignmentToken  {
	
	public DeleteStatement_EntityAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDeleteStatementAccess().getEntityAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DeleteStatement_DeleteKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("entity",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("entity");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDeleteStatementAccess().getEntityEntityCrossReference_2_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getDeleteStatementAccess().getEntityEntityCrossReference_2_0(); 
				return obj;
			}
		}
		return null;
	}

}

// name=ID
protected class DeleteStatement_NameAssignment_4 extends AssignmentToken  {
	
	public DeleteStatement_NameAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDeleteStatementAccess().getNameAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DeleteStatement_EntityAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDeleteStatementAccess().getNameIDTerminalRuleCall_4_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getDeleteStatementAccess().getNameIDTerminalRuleCall_4_0();
			return obj;
		}
		return null;
	}

}

// ("where" where=Expression)?
protected class DeleteStatement_Group_5 extends GroupToken {
	
	public DeleteStatement_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDeleteStatementAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DeleteStatement_WhereAssignment_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "where"
protected class DeleteStatement_WhereKeyword_5_0 extends KeywordToken  {
	
	public DeleteStatement_WhereKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDeleteStatementAccess().getWhereKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DeleteStatement_NameAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// where=Expression
protected class DeleteStatement_WhereAssignment_5_1 extends AssignmentToken  {
	
	public DeleteStatement_WhereAssignment_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDeleteStatementAccess().getWhereAssignment_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("where",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("where");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDeleteStatementAccess().getWhereExpressionParserRuleCall_5_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new DeleteStatement_WhereKeyword_5_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule DeleteStatement ****************/


/************ begin Rule UpdateStatement ****************
 *
 * UpdateStatement:
 * 	"update" versioned?="versioned"? "from"? entity=[Entity|QualifiedName] "as"? name=ID "set"
 * 	assignment+=PropertyAssignment ("," assignment+=PropertyAssignment)* ("where" where=Expression)?;
 *
 **/

// "update" versioned?="versioned"? "from"? entity=[Entity|QualifiedName] "as"? name=ID "set"
// assignment+=PropertyAssignment ("," assignment+=PropertyAssignment)* ("where" where=Expression)?
protected class UpdateStatement_Group extends GroupToken {
	
	public UpdateStatement_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UpdateStatement_Group_9(lastRuleCallOrigin, this, 0, inst);
			case 1: return new UpdateStatement_Group_8(lastRuleCallOrigin, this, 1, inst);
			case 2: return new UpdateStatement_AssignmentAssignment_7(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getUpdateStatementRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "update"
protected class UpdateStatement_UpdateKeyword_0 extends KeywordToken  {
	
	public UpdateStatement_UpdateKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getUpdateKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// versioned?="versioned"?
protected class UpdateStatement_VersionedAssignment_1 extends AssignmentToken  {
	
	public UpdateStatement_VersionedAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getVersionedAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UpdateStatement_UpdateKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("versioned",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("versioned");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getUpdateStatementAccess().getVersionedVersionedKeyword_1_0();
			return obj;
		}
		return null;
	}

}

// entity=[Entity|QualifiedName]
protected class UpdateStatement_EntityAssignment_3 extends AssignmentToken  {
	
	public UpdateStatement_EntityAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getEntityAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UpdateStatement_VersionedAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new UpdateStatement_UpdateKeyword_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("entity",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("entity");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getUpdateStatementAccess().getEntityEntityCrossReference_3_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getUpdateStatementAccess().getEntityEntityCrossReference_3_0(); 
				return obj;
			}
		}
		return null;
	}

}

// name=ID
protected class UpdateStatement_NameAssignment_5 extends AssignmentToken  {
	
	public UpdateStatement_NameAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getNameAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UpdateStatement_EntityAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getUpdateStatementAccess().getNameIDTerminalRuleCall_5_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getUpdateStatementAccess().getNameIDTerminalRuleCall_5_0();
			return obj;
		}
		return null;
	}

}

// "set"
protected class UpdateStatement_SetKeyword_6 extends KeywordToken  {
	
	public UpdateStatement_SetKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getSetKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UpdateStatement_NameAssignment_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// assignment+=PropertyAssignment
protected class UpdateStatement_AssignmentAssignment_7 extends AssignmentToken  {
	
	public UpdateStatement_AssignmentAssignment_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getAssignmentAssignment_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyAssignment_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("assignment",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("assignment");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyAssignmentRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getUpdateStatementAccess().getAssignmentPropertyAssignmentParserRuleCall_7_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new UpdateStatement_SetKeyword_6(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," assignment+=PropertyAssignment)*
protected class UpdateStatement_Group_8 extends GroupToken {
	
	public UpdateStatement_Group_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getGroup_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UpdateStatement_AssignmentAssignment_8_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class UpdateStatement_CommaKeyword_8_0 extends KeywordToken  {
	
	public UpdateStatement_CommaKeyword_8_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getCommaKeyword_8_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UpdateStatement_Group_8(lastRuleCallOrigin, this, 0, inst);
			case 1: return new UpdateStatement_AssignmentAssignment_7(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// assignment+=PropertyAssignment
protected class UpdateStatement_AssignmentAssignment_8_1 extends AssignmentToken  {
	
	public UpdateStatement_AssignmentAssignment_8_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getAssignmentAssignment_8_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyAssignment_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("assignment",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("assignment");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyAssignmentRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getUpdateStatementAccess().getAssignmentPropertyAssignmentParserRuleCall_8_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new UpdateStatement_CommaKeyword_8_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ("where" where=Expression)?
protected class UpdateStatement_Group_9 extends GroupToken {
	
	public UpdateStatement_Group_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getGroup_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UpdateStatement_WhereAssignment_9_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "where"
protected class UpdateStatement_WhereKeyword_9_0 extends KeywordToken  {
	
	public UpdateStatement_WhereKeyword_9_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getWhereKeyword_9_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UpdateStatement_Group_8(lastRuleCallOrigin, this, 0, inst);
			case 1: return new UpdateStatement_AssignmentAssignment_7(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// where=Expression
protected class UpdateStatement_WhereAssignment_9_1 extends AssignmentToken  {
	
	public UpdateStatement_WhereAssignment_9_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getUpdateStatementAccess().getWhereAssignment_9_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("where",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("where");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getUpdateStatementAccess().getWhereExpressionParserRuleCall_9_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new UpdateStatement_WhereKeyword_9_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule UpdateStatement ****************/


/************ begin Rule PropertyAssignment ****************
 *
 * PropertyAssignment:
 * 	property=PropertyValue "=" expression=ConcatenationExpression;
 *
 **/

// property=PropertyValue "=" expression=ConcatenationExpression
protected class PropertyAssignment_Group extends GroupToken {
	
	public PropertyAssignment_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPropertyAssignmentAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyAssignment_ExpressionAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPropertyAssignmentRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// property=PropertyValue
protected class PropertyAssignment_PropertyAssignment_0 extends AssignmentToken  {
	
	public PropertyAssignment_PropertyAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyAssignmentAccess().getPropertyAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyValue_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("property",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("property");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyValueRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPropertyAssignmentAccess().getPropertyPropertyValueParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}

// "="
protected class PropertyAssignment_EqualsSignKeyword_1 extends KeywordToken  {
	
	public PropertyAssignment_EqualsSignKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPropertyAssignmentAccess().getEqualsSignKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyAssignment_PropertyAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// expression=ConcatenationExpression
protected class PropertyAssignment_ExpressionAssignment_2 extends AssignmentToken  {
	
	public PropertyAssignment_ExpressionAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyAssignmentAccess().getExpressionAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConcatenationExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConcatenationExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPropertyAssignmentAccess().getExpressionConcatenationExpressionParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PropertyAssignment_EqualsSignKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule PropertyAssignment ****************/


/************ begin Rule SelectStatement ****************
 *
 * SelectStatement:
 * 	("select" (SelectProperties | SelectClass | SelectObject))? ("from" from+=FromRange (join+=Join | ","
 * 	from+=FromRange)*)? ("where" where=Expression)? ("group" "by" groupBy+=Expression ("," groupBy+=Expression)* ("having"
 * 	having=Expression)?)? ("order" "by" orderBy+=SortOrderElement ("," orderBy+=SortOrderElement)*)?;
 *
 **/

// ("select" (SelectProperties | SelectClass | SelectObject))? ("from" from+=FromRange (join+=Join | ","
// from+=FromRange)*)? ("where" where=Expression)? ("group" "by" groupBy+=Expression ("," groupBy+=Expression)* ("having"
// having=Expression)?)? ("order" "by" orderBy+=SortOrderElement ("," orderBy+=SortOrderElement)*)?
protected class SelectStatement_Group extends GroupToken {
	
	public SelectStatement_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new SelectStatement_Group_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new SelectStatement_Group_1(lastRuleCallOrigin, this, 3, inst);
			case 4: return new SelectStatement_Group_0(lastRuleCallOrigin, this, 4, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 5, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSelectClassRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectObjectRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectPropertiesRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectStatementRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// ("select" (SelectProperties | SelectClass | SelectObject))?
protected class SelectStatement_Group_0 extends GroupToken {
	
	public SelectStatement_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Alternatives_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSelectClassRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectObjectRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectPropertiesRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "select"
protected class SelectStatement_SelectKeyword_0_0 extends KeywordToken  {
	
	public SelectStatement_SelectKeyword_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getSelectKeyword_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// SelectProperties | SelectClass | SelectObject
protected class SelectStatement_Alternatives_0_1 extends AlternativesToken {

	public SelectStatement_Alternatives_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getAlternatives_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_SelectPropertiesParserRuleCall_0_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_SelectClassParserRuleCall_0_1_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new SelectStatement_SelectObjectParserRuleCall_0_1_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// SelectProperties
protected class SelectStatement_SelectPropertiesParserRuleCall_0_1_0 extends RuleCallToken {
	
	public SelectStatement_SelectPropertiesParserRuleCall_0_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getSelectPropertiesParserRuleCall_0_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectProperties_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSelectPropertiesRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SelectProperties_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_SelectKeyword_0_0(lastRuleCallOrigin, next, actIndex, inst);
			default: return null;
		}	
	}	
}

// SelectClass
protected class SelectStatement_SelectClassParserRuleCall_0_1_1 extends RuleCallToken {
	
	public SelectStatement_SelectClassParserRuleCall_0_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getSelectClassParserRuleCall_0_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectClass_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSelectClassRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SelectClass_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_SelectKeyword_0_0(lastRuleCallOrigin, next, actIndex, inst);
			default: return null;
		}	
	}	
}

// SelectObject
protected class SelectStatement_SelectObjectParserRuleCall_0_1_2 extends RuleCallToken {
	
	public SelectStatement_SelectObjectParserRuleCall_0_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getSelectObjectParserRuleCall_0_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectObject_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSelectObjectRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SelectObject_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_SelectKeyword_0_0(lastRuleCallOrigin, next, actIndex, inst);
			default: return null;
		}	
	}	
}



// ("from" from+=FromRange (join+=Join | "," from+=FromRange)*)?
protected class SelectStatement_Group_1 extends GroupToken {
	
	public SelectStatement_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Alternatives_1_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_FromAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "from"
protected class SelectStatement_FromKeyword_1_0 extends KeywordToken  {
	
	public SelectStatement_FromKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getFromKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSelectClassRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectObjectRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSelectPropertiesRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// from+=FromRange
protected class SelectStatement_FromAssignment_1_1 extends AssignmentToken  {
	
	public SelectStatement_FromAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getFromAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FromRange_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("from",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("from");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getFromRangeRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectStatementAccess().getFromFromRangeParserRuleCall_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectStatement_FromKeyword_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (join+=Join | "," from+=FromRange)*
protected class SelectStatement_Alternatives_1_2 extends AlternativesToken {

	public SelectStatement_Alternatives_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getAlternatives_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_JoinAssignment_1_2_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_Group_1_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// join+=Join
protected class SelectStatement_JoinAssignment_1_2_0 extends AssignmentToken  {
	
	public SelectStatement_JoinAssignment_1_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getJoinAssignment_1_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("join",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("join");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getJoinRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectStatementAccess().getJoinJoinParserRuleCall_1_2_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectStatement_Alternatives_1_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new SelectStatement_FromAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "," from+=FromRange
protected class SelectStatement_Group_1_2_1 extends GroupToken {
	
	public SelectStatement_Group_1_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroup_1_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_FromAssignment_1_2_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class SelectStatement_CommaKeyword_1_2_1_0 extends KeywordToken  {
	
	public SelectStatement_CommaKeyword_1_2_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getCommaKeyword_1_2_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Alternatives_1_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_FromAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// from+=FromRange
protected class SelectStatement_FromAssignment_1_2_1_1 extends AssignmentToken  {
	
	public SelectStatement_FromAssignment_1_2_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getFromAssignment_1_2_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FromRange_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("from",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("from");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getFromRangeRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectStatementAccess().getFromFromRangeParserRuleCall_1_2_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectStatement_CommaKeyword_1_2_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}




// ("where" where=Expression)?
protected class SelectStatement_Group_2 extends GroupToken {
	
	public SelectStatement_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_WhereAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "where"
protected class SelectStatement_WhereKeyword_2_0 extends KeywordToken  {
	
	public SelectStatement_WhereKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getWhereKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_Group_0(lastRuleCallOrigin, this, 1, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 2, inst);
		}	
	}

}

// where=Expression
protected class SelectStatement_WhereAssignment_2_1 extends AssignmentToken  {
	
	public SelectStatement_WhereAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getWhereAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("where",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("where");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectStatementAccess().getWhereExpressionParserRuleCall_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectStatement_WhereKeyword_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ("group" "by" groupBy+=Expression ("," groupBy+=Expression)* ("having" having=Expression)?)?
protected class SelectStatement_Group_3 extends GroupToken {
	
	public SelectStatement_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group_3_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_Group_3_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new SelectStatement_GroupByAssignment_3_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// "group"
protected class SelectStatement_GroupKeyword_3_0 extends KeywordToken  {
	
	public SelectStatement_GroupKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroupKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_Group_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new SelectStatement_Group_0(lastRuleCallOrigin, this, 2, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 3, inst);
		}	
	}

}

// "by"
protected class SelectStatement_ByKeyword_3_1 extends KeywordToken  {
	
	public SelectStatement_ByKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getByKeyword_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_GroupKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// groupBy+=Expression
protected class SelectStatement_GroupByAssignment_3_2 extends AssignmentToken  {
	
	public SelectStatement_GroupByAssignment_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroupByAssignment_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("groupBy",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("groupBy");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectStatementAccess().getGroupByExpressionParserRuleCall_3_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectStatement_ByKeyword_3_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," groupBy+=Expression)*
protected class SelectStatement_Group_3_3 extends GroupToken {
	
	public SelectStatement_Group_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroup_3_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_GroupByAssignment_3_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class SelectStatement_CommaKeyword_3_3_0 extends KeywordToken  {
	
	public SelectStatement_CommaKeyword_3_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getCommaKeyword_3_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group_3_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_GroupByAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// groupBy+=Expression
protected class SelectStatement_GroupByAssignment_3_3_1 extends AssignmentToken  {
	
	public SelectStatement_GroupByAssignment_3_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroupByAssignment_3_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("groupBy",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("groupBy");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectStatementAccess().getGroupByExpressionParserRuleCall_3_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectStatement_CommaKeyword_3_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ("having" having=Expression)?
protected class SelectStatement_Group_3_4 extends GroupToken {
	
	public SelectStatement_Group_3_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroup_3_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_HavingAssignment_3_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "having"
protected class SelectStatement_HavingKeyword_3_4_0 extends KeywordToken  {
	
	public SelectStatement_HavingKeyword_3_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getHavingKeyword_3_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group_3_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_GroupByAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// having=Expression
protected class SelectStatement_HavingAssignment_3_4_1 extends AssignmentToken  {
	
	public SelectStatement_HavingAssignment_3_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getHavingAssignment_3_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("having",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("having");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectStatementAccess().getHavingExpressionParserRuleCall_3_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectStatement_HavingKeyword_3_4_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



// ("order" "by" orderBy+=SortOrderElement ("," orderBy+=SortOrderElement)*)?
protected class SelectStatement_Group_4 extends GroupToken {
	
	public SelectStatement_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group_4_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_OrderByAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "order"
protected class SelectStatement_OrderKeyword_4_0 extends KeywordToken  {
	
	public SelectStatement_OrderKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getOrderKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_Group_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new SelectStatement_Group_1(lastRuleCallOrigin, this, 2, inst);
			case 3: return new SelectStatement_Group_0(lastRuleCallOrigin, this, 3, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 4, inst);
		}	
	}

}

// "by"
protected class SelectStatement_ByKeyword_4_1 extends KeywordToken  {
	
	public SelectStatement_ByKeyword_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getByKeyword_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_OrderKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// orderBy+=SortOrderElement
protected class SelectStatement_OrderByAssignment_4_2 extends AssignmentToken  {
	
	public SelectStatement_OrderByAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getOrderByAssignment_4_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SortOrderElement_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("orderBy",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("orderBy");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSortOrderElementRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectStatementAccess().getOrderBySortOrderElementParserRuleCall_4_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectStatement_ByKeyword_4_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," orderBy+=SortOrderElement)*
protected class SelectStatement_Group_4_3 extends GroupToken {
	
	public SelectStatement_Group_4_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getGroup_4_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_OrderByAssignment_4_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class SelectStatement_CommaKeyword_4_3_0 extends KeywordToken  {
	
	public SelectStatement_CommaKeyword_4_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getCommaKeyword_4_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group_4_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectStatement_OrderByAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// orderBy+=SortOrderElement
protected class SelectStatement_OrderByAssignment_4_3_1 extends AssignmentToken  {
	
	public SelectStatement_OrderByAssignment_4_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectStatementAccess().getOrderByAssignment_4_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SortOrderElement_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("orderBy",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("orderBy");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSortOrderElementRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectStatementAccess().getOrderBySortOrderElementParserRuleCall_4_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectStatement_CommaKeyword_4_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}




/************ end Rule SelectStatement ****************/


/************ begin Rule SortOrderElement ****************
 *
 * SortOrderElement:
 * 	expression=Expression sortOrder=AscendingOrDescending?;
 *
 **/

// expression=Expression sortOrder=AscendingOrDescending?
protected class SortOrderElement_Group extends GroupToken {
	
	public SortOrderElement_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSortOrderElementAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SortOrderElement_SortOrderAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SortOrderElement_ExpressionAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSortOrderElementRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// expression=Expression
protected class SortOrderElement_ExpressionAssignment_0 extends AssignmentToken  {
	
	public SortOrderElement_ExpressionAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSortOrderElementAccess().getExpressionAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSortOrderElementAccess().getExpressionExpressionParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}

// sortOrder=AscendingOrDescending?
protected class SortOrderElement_SortOrderAssignment_1 extends AssignmentToken  {
	
	public SortOrderElement_SortOrderAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSortOrderElementAccess().getSortOrderAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SortOrderElement_ExpressionAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("sortOrder",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("sortOrder");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSortOrderElementAccess().getSortOrderAscendingOrDescendingParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getSortOrderElementAccess().getSortOrderAscendingOrDescendingParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule SortOrderElement ****************/


/************ begin Rule SelectProperties ****************
 *
 * SelectProperties:
 * 	distinct?="distinct"? properties+=AliasedExpression ("," properties+=AliasedExpression)*;
 *
 **/

// distinct?="distinct"? properties+=AliasedExpression ("," properties+=AliasedExpression)*
protected class SelectProperties_Group extends GroupToken {
	
	public SelectProperties_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectPropertiesAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectProperties_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectProperties_PropertiesAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSelectPropertiesRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// distinct?="distinct"?
protected class SelectProperties_DistinctAssignment_0 extends AssignmentToken  {
	
	public SelectProperties_DistinctAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectPropertiesAccess().getDistinctAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("distinct",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("distinct");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSelectPropertiesAccess().getDistinctDistinctKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// properties+=AliasedExpression
protected class SelectProperties_PropertiesAssignment_1 extends AssignmentToken  {
	
	public SelectProperties_PropertiesAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectPropertiesAccess().getPropertiesAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AliasedExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("properties",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("properties");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAliasedExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectPropertiesAccess().getPropertiesAliasedExpressionParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectProperties_DistinctAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index - 1, consumed);
		}	
	}	
}

// ("," properties+=AliasedExpression)*
protected class SelectProperties_Group_2 extends GroupToken {
	
	public SelectProperties_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectPropertiesAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectProperties_PropertiesAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class SelectProperties_CommaKeyword_2_0 extends KeywordToken  {
	
	public SelectProperties_CommaKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectPropertiesAccess().getCommaKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectProperties_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectProperties_PropertiesAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// properties+=AliasedExpression
protected class SelectProperties_PropertiesAssignment_2_1 extends AssignmentToken  {
	
	public SelectProperties_PropertiesAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectPropertiesAccess().getPropertiesAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AliasedExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("properties",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("properties");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAliasedExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectPropertiesAccess().getPropertiesAliasedExpressionParserRuleCall_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectProperties_CommaKeyword_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule SelectProperties ****************/


/************ begin Rule SelectClass ****************
 *
 * SelectClass:
 * 	"new" class=QualifiedName "(" arguments+=AliasedExpression ("," arguments+=AliasedExpression)* ")";
 *
 **/

// "new" class=QualifiedName "(" arguments+=AliasedExpression ("," arguments+=AliasedExpression)* ")"
protected class SelectClass_Group extends GroupToken {
	
	public SelectClass_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectClassAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectClass_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSelectClassRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "new"
protected class SelectClass_NewKeyword_0 extends KeywordToken  {
	
	public SelectClass_NewKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectClassAccess().getNewKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// class=QualifiedName
protected class SelectClass_ClassAssignment_1 extends AssignmentToken  {
	
	public SelectClass_ClassAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectClassAccess().getClassAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectClass_NewKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("class",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("class");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSelectClassAccess().getClassQualifiedNameParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getSelectClassAccess().getClassQualifiedNameParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class SelectClass_LeftParenthesisKeyword_2 extends KeywordToken  {
	
	public SelectClass_LeftParenthesisKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectClassAccess().getLeftParenthesisKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectClass_ClassAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// arguments+=AliasedExpression
protected class SelectClass_ArgumentsAssignment_3 extends AssignmentToken  {
	
	public SelectClass_ArgumentsAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectClassAccess().getArgumentsAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AliasedExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("arguments",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("arguments");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAliasedExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectClassAccess().getArgumentsAliasedExpressionParserRuleCall_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectClass_LeftParenthesisKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," arguments+=AliasedExpression)*
protected class SelectClass_Group_4 extends GroupToken {
	
	public SelectClass_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectClassAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectClass_ArgumentsAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class SelectClass_CommaKeyword_4_0 extends KeywordToken  {
	
	public SelectClass_CommaKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectClassAccess().getCommaKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectClass_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectClass_ArgumentsAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// arguments+=AliasedExpression
protected class SelectClass_ArgumentsAssignment_4_1 extends AssignmentToken  {
	
	public SelectClass_ArgumentsAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectClassAccess().getArgumentsAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AliasedExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("arguments",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("arguments");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAliasedExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSelectClassAccess().getArgumentsAliasedExpressionParserRuleCall_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SelectClass_CommaKeyword_4_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ")"
protected class SelectClass_RightParenthesisKeyword_5 extends KeywordToken  {
	
	public SelectClass_RightParenthesisKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectClassAccess().getRightParenthesisKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectClass_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SelectClass_ArgumentsAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule SelectClass ****************/


/************ begin Rule SelectObject ****************
 *
 * SelectObject:
 * 	"object" "(" name=ID ")";
 *
 **/

// "object" "(" name=ID ")"
protected class SelectObject_Group extends GroupToken {
	
	public SelectObject_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSelectObjectAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectObject_RightParenthesisKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSelectObjectRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "object"
protected class SelectObject_ObjectKeyword_0 extends KeywordToken  {
	
	public SelectObject_ObjectKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectObjectAccess().getObjectKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "("
protected class SelectObject_LeftParenthesisKeyword_1 extends KeywordToken  {
	
	public SelectObject_LeftParenthesisKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectObjectAccess().getLeftParenthesisKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectObject_ObjectKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name=ID
protected class SelectObject_NameAssignment_2 extends AssignmentToken  {
	
	public SelectObject_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSelectObjectAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectObject_LeftParenthesisKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSelectObjectAccess().getNameIDTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSelectObjectAccess().getNameIDTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class SelectObject_RightParenthesisKeyword_3 extends KeywordToken  {
	
	public SelectObject_RightParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSelectObjectAccess().getRightParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectObject_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule SelectObject ****************/


/************ begin Rule FromRange ****************
 *
 * FromRange:
 * 	FromClass | InClass | InCollection | InCollectionElements;
 *
 **/

// FromClass | InClass | InCollection | InCollectionElements
protected class FromRange_Alternatives extends AlternativesToken {

	public FromRange_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getFromRangeAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FromRange_FromClassParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new FromRange_InClassParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new FromRange_InCollectionParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new FromRange_InCollectionElementsParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFromClassRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getInClassRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getInCollectionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getInCollectionElementsRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// FromClass
protected class FromRange_FromClassParserRuleCall_0 extends RuleCallToken {
	
	public FromRange_FromClassParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getFromRangeAccess().getFromClassParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FromClass_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFromClassRule().getType().getClassifier())
			return null;
		if(checkForRecursion(FromClass_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// InClass
protected class FromRange_InClassParserRuleCall_1 extends RuleCallToken {
	
	public FromRange_InClassParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getFromRangeAccess().getInClassParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InClass_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getInClassRule().getType().getClassifier())
			return null;
		if(checkForRecursion(InClass_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// InCollection
protected class FromRange_InCollectionParserRuleCall_2 extends RuleCallToken {
	
	public FromRange_InCollectionParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getFromRangeAccess().getInCollectionParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollection_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getInCollectionRule().getType().getClassifier())
			return null;
		if(checkForRecursion(InCollection_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// InCollectionElements
protected class FromRange_InCollectionElementsParserRuleCall_3 extends RuleCallToken {
	
	public FromRange_InCollectionElementsParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getFromRangeAccess().getInCollectionElementsParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollectionElements_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getInCollectionElementsRule().getType().getClassifier())
			return null;
		if(checkForRecursion(InCollectionElements_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule FromRange ****************/


/************ begin Rule FromClass ****************
 *
 * FromClass:
 * 	entity=[Entity|QualifiedName] "as"? name=ID popertyFetch?=PropertyFetch?;
 *
 **/

// entity=[Entity|QualifiedName] "as"? name=ID popertyFetch?=PropertyFetch?
protected class FromClass_Group extends GroupToken {
	
	public FromClass_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getFromClassAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FromClass_PopertyFetchAssignment_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new FromClass_NameAssignment_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFromClassRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// entity=[Entity|QualifiedName]
protected class FromClass_EntityAssignment_0 extends AssignmentToken  {
	
	public FromClass_EntityAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFromClassAccess().getEntityAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("entity",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("entity");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getFromClassAccess().getEntityEntityCrossReference_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getFromClassAccess().getEntityEntityCrossReference_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// name=ID
protected class FromClass_NameAssignment_2 extends AssignmentToken  {
	
	public FromClass_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFromClassAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FromClass_EntityAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getFromClassAccess().getNameIDTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getFromClassAccess().getNameIDTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// popertyFetch?=PropertyFetch?
protected class FromClass_PopertyFetchAssignment_3 extends AssignmentToken  {
	
	public FromClass_PopertyFetchAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFromClassAccess().getPopertyFetchAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FromClass_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("popertyFetch",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("popertyFetch");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getFromClassAccess().getPopertyFetchPropertyFetchParserRuleCall_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getFromClassAccess().getPopertyFetchPropertyFetchParserRuleCall_3_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule FromClass ****************/


/************ begin Rule InClass ****************
 *
 * InClass:
 * 	name=ID "in" "class" class=QualifiedName;
 *
 **/

// name=ID "in" "class" class=QualifiedName
protected class InClass_Group extends GroupToken {
	
	public InClass_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getInClassAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InClass_ClassAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getInClassRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name=ID
protected class InClass_NameAssignment_0 extends AssignmentToken  {
	
	public InClass_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getInClassAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInClassAccess().getNameIDTerminalRuleCall_0_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getInClassAccess().getNameIDTerminalRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// "in"
protected class InClass_InKeyword_1 extends KeywordToken  {
	
	public InClass_InKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInClassAccess().getInKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InClass_NameAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "class"
protected class InClass_ClassKeyword_2 extends KeywordToken  {
	
	public InClass_ClassKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInClassAccess().getClassKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InClass_InKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// class=QualifiedName
protected class InClass_ClassAssignment_3 extends AssignmentToken  {
	
	public InClass_ClassAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getInClassAccess().getClassAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InClass_ClassKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("class",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("class");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInClassAccess().getClassQualifiedNameParserRuleCall_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getInClassAccess().getClassQualifiedNameParserRuleCall_3_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule InClass ****************/


/************ begin Rule InCollection ****************
 *
 * InCollection:
 * 	"in" "(" path=QualifiedName ")" alias=ID;
 *
 **/

// "in" "(" path=QualifiedName ")" alias=ID
protected class InCollection_Group extends GroupToken {
	
	public InCollection_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getInCollectionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollection_AliasAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getInCollectionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "in"
protected class InCollection_InKeyword_0 extends KeywordToken  {
	
	public InCollection_InKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInCollectionAccess().getInKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "("
protected class InCollection_LeftParenthesisKeyword_1 extends KeywordToken  {
	
	public InCollection_LeftParenthesisKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInCollectionAccess().getLeftParenthesisKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollection_InKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// path=QualifiedName
protected class InCollection_PathAssignment_2 extends AssignmentToken  {
	
	public InCollection_PathAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getInCollectionAccess().getPathAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollection_LeftParenthesisKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("path",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("path");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInCollectionAccess().getPathQualifiedNameParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getInCollectionAccess().getPathQualifiedNameParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class InCollection_RightParenthesisKeyword_3 extends KeywordToken  {
	
	public InCollection_RightParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInCollectionAccess().getRightParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollection_PathAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// alias=ID
protected class InCollection_AliasAssignment_4 extends AssignmentToken  {
	
	public InCollection_AliasAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getInCollectionAccess().getAliasAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollection_RightParenthesisKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("alias",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("alias");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInCollectionAccess().getAliasIDTerminalRuleCall_4_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getInCollectionAccess().getAliasIDTerminalRuleCall_4_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule InCollection ****************/


/************ begin Rule InCollectionElements ****************
 *
 * InCollectionElements:
 * 	name=ID "in" "elements" "(" reference=QualifiedName ")";
 *
 **/

// name=ID "in" "elements" "(" reference=QualifiedName ")"
protected class InCollectionElements_Group extends GroupToken {
	
	public InCollectionElements_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getInCollectionElementsAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollectionElements_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getInCollectionElementsRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name=ID
protected class InCollectionElements_NameAssignment_0 extends AssignmentToken  {
	
	public InCollectionElements_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getInCollectionElementsAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInCollectionElementsAccess().getNameIDTerminalRuleCall_0_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getInCollectionElementsAccess().getNameIDTerminalRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// "in"
protected class InCollectionElements_InKeyword_1 extends KeywordToken  {
	
	public InCollectionElements_InKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInCollectionElementsAccess().getInKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollectionElements_NameAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "elements"
protected class InCollectionElements_ElementsKeyword_2 extends KeywordToken  {
	
	public InCollectionElements_ElementsKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInCollectionElementsAccess().getElementsKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollectionElements_InKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class InCollectionElements_LeftParenthesisKeyword_3 extends KeywordToken  {
	
	public InCollectionElements_LeftParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInCollectionElementsAccess().getLeftParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollectionElements_ElementsKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// reference=QualifiedName
protected class InCollectionElements_ReferenceAssignment_4 extends AssignmentToken  {
	
	public InCollectionElements_ReferenceAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getInCollectionElementsAccess().getReferenceAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollectionElements_LeftParenthesisKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("reference",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("reference");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInCollectionElementsAccess().getReferenceQualifiedNameParserRuleCall_4_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getInCollectionElementsAccess().getReferenceQualifiedNameParserRuleCall_4_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class InCollectionElements_RightParenthesisKeyword_5 extends KeywordToken  {
	
	public InCollectionElements_RightParenthesisKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getInCollectionElementsAccess().getRightParenthesisKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new InCollectionElements_ReferenceAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule InCollectionElements ****************/


/************ begin Rule Join ****************
 *
 * Join:
 * 	type=JoinType? "join" fetch?="fetch"? entity=[JoinEntity] "." reference=[Attribute] "as"? name=ID
 * 	propertyFetch?=PropertyFetch? ("with" expression=Expression)?;
 *
 **/

// type=JoinType? "join" fetch?="fetch"? entity=[JoinEntity] "." reference=[Attribute] "as"? name=ID
// propertyFetch?=PropertyFetch? ("with" expression=Expression)?
protected class Join_Group extends GroupToken {
	
	public Join_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getJoinAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_Group_9(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Join_PropertyFetchAssignment_8(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Join_NameAssignment_7(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getJoinRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// type=JoinType?
protected class Join_TypeAssignment_0 extends AssignmentToken  {
	
	public Join_TypeAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getJoinAccess().getTypeAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getJoinAccess().getTypeJoinTypeParserRuleCall_0_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getJoinAccess().getTypeJoinTypeParserRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// "join"
protected class Join_JoinKeyword_1 extends KeywordToken  {
	
	public Join_JoinKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getJoinAccess().getJoinKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_TypeAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

}

// fetch?="fetch"?
protected class Join_FetchAssignment_2 extends AssignmentToken  {
	
	public Join_FetchAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getJoinAccess().getFetchAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_JoinKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("fetch",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("fetch");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getJoinAccess().getFetchFetchKeyword_2_0();
			return obj;
		}
		return null;
	}

}

// entity=[JoinEntity]
protected class Join_EntityAssignment_3 extends AssignmentToken  {
	
	public Join_EntityAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getJoinAccess().getEntityAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_FetchAssignment_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Join_JoinKeyword_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("entity",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("entity");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getJoinAccess().getEntityJoinEntityCrossReference_3_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getJoinAccess().getEntityJoinEntityCrossReference_3_0(); 
				return obj;
			}
		}
		return null;
	}

}

// "."
protected class Join_FullStopKeyword_4 extends KeywordToken  {
	
	public Join_FullStopKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getJoinAccess().getFullStopKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_EntityAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// reference=[Attribute]
protected class Join_ReferenceAssignment_5 extends AssignmentToken  {
	
	public Join_ReferenceAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getJoinAccess().getReferenceAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_FullStopKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("reference",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("reference");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getJoinAccess().getReferenceAttributeCrossReference_5_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getJoinAccess().getReferenceAttributeCrossReference_5_0(); 
				return obj;
			}
		}
		return null;
	}

}

// name=ID
protected class Join_NameAssignment_7 extends AssignmentToken  {
	
	public Join_NameAssignment_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getJoinAccess().getNameAssignment_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_ReferenceAssignment_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getJoinAccess().getNameIDTerminalRuleCall_7_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getJoinAccess().getNameIDTerminalRuleCall_7_0();
			return obj;
		}
		return null;
	}

}

// propertyFetch?=PropertyFetch?
protected class Join_PropertyFetchAssignment_8 extends AssignmentToken  {
	
	public Join_PropertyFetchAssignment_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getJoinAccess().getPropertyFetchAssignment_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_NameAssignment_7(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("propertyFetch",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("propertyFetch");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getJoinAccess().getPropertyFetchPropertyFetchParserRuleCall_8_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getJoinAccess().getPropertyFetchPropertyFetchParserRuleCall_8_0();
			return obj;
		}
		return null;
	}

}

// ("with" expression=Expression)?
protected class Join_Group_9 extends GroupToken {
	
	public Join_Group_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getJoinAccess().getGroup_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_ExpressionAssignment_9_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "with"
protected class Join_WithKeyword_9_0 extends KeywordToken  {
	
	public Join_WithKeyword_9_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getJoinAccess().getWithKeyword_9_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_PropertyFetchAssignment_8(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Join_NameAssignment_7(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// expression=Expression
protected class Join_ExpressionAssignment_9_1 extends AssignmentToken  {
	
	public Join_ExpressionAssignment_9_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getJoinAccess().getExpressionAssignment_9_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getJoinAccess().getExpressionExpressionParserRuleCall_9_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Join_WithKeyword_9_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule Join ****************/


/************ begin Rule JoinEntity ****************
 *
 * JoinEntity:
 * 	FromClass | Join;
 *
 **/

// FromClass | Join
protected class JoinEntity_Alternatives extends AlternativesToken {

	public JoinEntity_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getJoinEntityAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new JoinEntity_FromClassParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new JoinEntity_JoinParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFromClassRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getJoinRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// FromClass
protected class JoinEntity_FromClassParserRuleCall_0 extends RuleCallToken {
	
	public JoinEntity_FromClassParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getJoinEntityAccess().getFromClassParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FromClass_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFromClassRule().getType().getClassifier())
			return null;
		if(checkForRecursion(FromClass_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Join
protected class JoinEntity_JoinParserRuleCall_1 extends RuleCallToken {
	
	public JoinEntity_JoinParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getJoinEntityAccess().getJoinParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Join_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getJoinRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Join_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule JoinEntity ****************/


/************ begin Rule AliasedExpression ****************
 *
 * AliasedExpression returns Expression:
 * 	Expression ({AliasedExpression.expression=current} "as" name=ID)?;
 *
 **/

// Expression ({AliasedExpression.expression=current} "as" name=ID)?
protected class AliasedExpression_Group extends GroupToken {
	
	public AliasedExpression_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAliasedExpressionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AliasedExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AliasedExpression_ExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getAliasedExpressionAccess().getAliasedExpressionExpressionAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getBetweenExpressionExpressionAction_1_2_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getInExpressionExpressionAction_1_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getLikeExpressionExpressionAction_1_3_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getMemberOfExpressionExpressionAction_1_4_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPrefixExpressionAccess().getNotExpressionAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// Expression
protected class AliasedExpression_ExpressionParserRuleCall_0 extends RuleCallToken {
	
	public AliasedExpression_ExpressionParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAliasedExpressionAccess().getExpressionParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getBetweenExpressionExpressionAction_1_2_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getInExpressionExpressionAction_1_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getLikeExpressionExpressionAction_1_3_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getMemberOfExpressionExpressionAction_1_4_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPrefixExpressionAccess().getNotExpressionAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		if(checkForRecursion(Expression_LogicalOrExpressionParserRuleCall.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({AliasedExpression.expression=current} "as" name=ID)?
protected class AliasedExpression_Group_1 extends GroupToken {
	
	public AliasedExpression_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAliasedExpressionAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AliasedExpression_NameAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAliasedExpressionAccess().getAliasedExpressionExpressionAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {AliasedExpression.expression=current}
protected class AliasedExpression_AliasedExpressionExpressionAction_1_0 extends ActionToken  {

	public AliasedExpression_AliasedExpressionExpressionAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getAliasedExpressionAccess().getAliasedExpressionExpressionAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AliasedExpression_ExpressionParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("expression", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("expression")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// "as"
protected class AliasedExpression_AsKeyword_1_1 extends KeywordToken  {
	
	public AliasedExpression_AsKeyword_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAliasedExpressionAccess().getAsKeyword_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AliasedExpression_AliasedExpressionExpressionAction_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name=ID
protected class AliasedExpression_NameAssignment_1_2 extends AssignmentToken  {
	
	public AliasedExpression_NameAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAliasedExpressionAccess().getNameAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AliasedExpression_AsKeyword_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAliasedExpressionAccess().getNameIDTerminalRuleCall_1_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getAliasedExpressionAccess().getNameIDTerminalRuleCall_1_2_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule AliasedExpression ****************/


/************ begin Rule Expression ****************
 *
 * Expression:
 * 	LogicalOrExpression;
 *
 **/

// LogicalOrExpression
protected class Expression_LogicalOrExpressionParserRuleCall extends RuleCallToken {
	
	public Expression_LogicalOrExpressionParserRuleCall(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getExpressionAccess().getLogicalOrExpressionParserRuleCall();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LogicalOrExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getBetweenExpressionExpressionAction_1_2_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getInExpressionExpressionAction_1_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getLikeExpressionExpressionAction_1_3_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getMemberOfExpressionExpressionAction_1_4_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPrefixExpressionAccess().getNotExpressionAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		if(checkForRecursion(LogicalOrExpression_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

/************ end Rule Expression ****************/


/************ begin Rule LogicalOrExpression ****************
 *
 * LogicalOrExpression returns Expression:
 * 	LogicalAndExpression ({BinaryExpression.left=current} operator="or" right=LogicalAndExpression)*;
 *
 **/

// LogicalAndExpression ({BinaryExpression.left=current} operator="or" right=LogicalAndExpression)*
protected class LogicalOrExpression_Group extends GroupToken {
	
	public LogicalOrExpression_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getLogicalOrExpressionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LogicalOrExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new LogicalOrExpression_LogicalAndExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getBetweenExpressionExpressionAction_1_2_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getInExpressionExpressionAction_1_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getLikeExpressionExpressionAction_1_3_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getMemberOfExpressionExpressionAction_1_4_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPrefixExpressionAccess().getNotExpressionAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// LogicalAndExpression
protected class LogicalOrExpression_LogicalAndExpressionParserRuleCall_0 extends RuleCallToken {
	
	public LogicalOrExpression_LogicalAndExpressionParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLogicalOrExpressionAccess().getLogicalAndExpressionParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LogicalAndExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(checkForRecursion(LogicalAndExpression_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({BinaryExpression.left=current} operator="or" right=LogicalAndExpression)*
protected class LogicalOrExpression_Group_1 extends GroupToken {
	
	public LogicalOrExpression_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getLogicalOrExpressionAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LogicalOrExpression_RightAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getLogicalOrExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {BinaryExpression.left=current}
protected class LogicalOrExpression_BinaryExpressionLeftAction_1_0 extends ActionToken  {

	public LogicalOrExpression_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getLogicalOrExpressionAccess().getBinaryExpressionLeftAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LogicalOrExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new LogicalOrExpression_LogicalAndExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("left", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("left")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// operator="or"
protected class LogicalOrExpression_OperatorAssignment_1_1 extends AssignmentToken  {
	
	public LogicalOrExpression_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getLogicalOrExpressionAccess().getOperatorAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LogicalOrExpression_BinaryExpressionLeftAction_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getLogicalOrExpressionAccess().getOperatorOrKeyword_1_1_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getLogicalOrExpressionAccess().getOperatorOrKeyword_1_1_0();
			return obj;
		}
		return null;
	}

}

// right=LogicalAndExpression
protected class LogicalOrExpression_RightAssignment_1_2 extends AssignmentToken  {
	
	public LogicalOrExpression_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getLogicalOrExpressionAccess().getRightAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LogicalAndExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getLogicalAndExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getLogicalOrExpressionAccess().getRightLogicalAndExpressionParserRuleCall_1_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new LogicalOrExpression_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule LogicalOrExpression ****************/


/************ begin Rule LogicalAndExpression ****************
 *
 * LogicalAndExpression returns Expression:
 * 	PrefixExpression ({BinaryExpression.left=current} operator="and" right=PrefixExpression)*;
 *
 **/

// PrefixExpression ({BinaryExpression.left=current} operator="and" right=PrefixExpression)*
protected class LogicalAndExpression_Group extends GroupToken {
	
	public LogicalAndExpression_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getLogicalAndExpressionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LogicalAndExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new LogicalAndExpression_PrefixExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getBetweenExpressionExpressionAction_1_2_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getInExpressionExpressionAction_1_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getLikeExpressionExpressionAction_1_3_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getMemberOfExpressionExpressionAction_1_4_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPrefixExpressionAccess().getNotExpressionAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// PrefixExpression
protected class LogicalAndExpression_PrefixExpressionParserRuleCall_0 extends RuleCallToken {
	
	public LogicalAndExpression_PrefixExpressionParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLogicalAndExpressionAccess().getPrefixExpressionParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrefixExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(checkForRecursion(PrefixExpression_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({BinaryExpression.left=current} operator="and" right=PrefixExpression)*
protected class LogicalAndExpression_Group_1 extends GroupToken {
	
	public LogicalAndExpression_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getLogicalAndExpressionAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LogicalAndExpression_RightAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getLogicalAndExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {BinaryExpression.left=current}
protected class LogicalAndExpression_BinaryExpressionLeftAction_1_0 extends ActionToken  {

	public LogicalAndExpression_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getLogicalAndExpressionAccess().getBinaryExpressionLeftAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LogicalAndExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new LogicalAndExpression_PrefixExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("left", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("left")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// operator="and"
protected class LogicalAndExpression_OperatorAssignment_1_1 extends AssignmentToken  {
	
	public LogicalAndExpression_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getLogicalAndExpressionAccess().getOperatorAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LogicalAndExpression_BinaryExpressionLeftAction_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getLogicalAndExpressionAccess().getOperatorAndKeyword_1_1_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getLogicalAndExpressionAccess().getOperatorAndKeyword_1_1_0();
			return obj;
		}
		return null;
	}

}

// right=PrefixExpression
protected class LogicalAndExpression_RightAssignment_1_2 extends AssignmentToken  {
	
	public LogicalAndExpression_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getLogicalAndExpressionAccess().getRightAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrefixExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPrefixExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getLogicalAndExpressionAccess().getRightPrefixExpressionParserRuleCall_1_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new LogicalAndExpression_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule LogicalAndExpression ****************/


/************ begin Rule PrefixExpression ****************
 *
 * PrefixExpression returns Expression:
 * 	{NotExpression} "not" expression=PrefixExpression | EqualityExpression;
 *
 **/

// {NotExpression} "not" expression=PrefixExpression | EqualityExpression
protected class PrefixExpression_Alternatives extends AlternativesToken {

	public PrefixExpression_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getPrefixExpressionAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrefixExpression_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PrefixExpression_EqualityExpressionParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getBetweenExpressionExpressionAction_1_2_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getInExpressionExpressionAction_1_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getLikeExpressionExpressionAction_1_3_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getMemberOfExpressionExpressionAction_1_4_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPrefixExpressionAccess().getNotExpressionAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {NotExpression} "not" expression=PrefixExpression
protected class PrefixExpression_Group_0 extends GroupToken {
	
	public PrefixExpression_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPrefixExpressionAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrefixExpression_ExpressionAssignment_0_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPrefixExpressionAccess().getNotExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {NotExpression}
protected class PrefixExpression_NotExpressionAction_0_0 extends ActionToken  {

	public PrefixExpression_NotExpressionAction_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getPrefixExpressionAccess().getNotExpressionAction_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// "not"
protected class PrefixExpression_NotKeyword_0_1 extends KeywordToken  {
	
	public PrefixExpression_NotKeyword_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPrefixExpressionAccess().getNotKeyword_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrefixExpression_NotExpressionAction_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// expression=PrefixExpression
protected class PrefixExpression_ExpressionAssignment_0_2 extends AssignmentToken  {
	
	public PrefixExpression_ExpressionAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPrefixExpressionAccess().getExpressionAssignment_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrefixExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPrefixExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPrefixExpressionAccess().getExpressionPrefixExpressionParserRuleCall_0_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PrefixExpression_NotKeyword_0_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// EqualityExpression
protected class PrefixExpression_EqualityExpressionParserRuleCall_1 extends RuleCallToken {
	
	public PrefixExpression_EqualityExpressionParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPrefixExpressionAccess().getEqualityExpressionParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getBetweenExpressionExpressionAction_1_2_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getInExpressionExpressionAction_1_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getLikeExpressionExpressionAction_1_3_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getMemberOfExpressionExpressionAction_1_4_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		if(checkForRecursion(EqualityExpression_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule PrefixExpression ****************/


/************ begin Rule EqualityExpression ****************
 *
 * EqualityExpression returns Expression:
 * 	RelationalExpression ({BinaryExpression.left=current} operator=("=" | "is" | IsNot | "!=" | "<>")
 * 	right=RelationalExpression)*;
 *
 **/

// RelationalExpression ({BinaryExpression.left=current} operator=("=" | "is" | IsNot | "!=" | "<>")
// right=RelationalExpression)*
protected class EqualityExpression_Group extends GroupToken {
	
	public EqualityExpression_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEqualityExpressionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EqualityExpression_RelationalExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getBetweenExpressionExpressionAction_1_2_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getInExpressionExpressionAction_1_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getLikeExpressionExpressionAction_1_3_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getMemberOfExpressionExpressionAction_1_4_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// RelationalExpression
protected class EqualityExpression_RelationalExpressionParserRuleCall_0 extends RuleCallToken {
	
	public EqualityExpression_RelationalExpressionParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getEqualityExpressionAccess().getRelationalExpressionParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(checkForRecursion(RelationalExpression_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({BinaryExpression.left=current} operator=("=" | "is" | IsNot | "!=" | "<>") right=RelationalExpression)*
protected class EqualityExpression_Group_1 extends GroupToken {
	
	public EqualityExpression_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEqualityExpressionAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpression_RightAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEqualityExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {BinaryExpression.left=current}
protected class EqualityExpression_BinaryExpressionLeftAction_1_0 extends ActionToken  {

	public EqualityExpression_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getEqualityExpressionAccess().getBinaryExpressionLeftAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EqualityExpression_RelationalExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("left", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("left")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// operator=("=" | "is" | IsNot | "!=" | "<>")
protected class EqualityExpression_OperatorAssignment_1_1 extends AssignmentToken  {
	
	public EqualityExpression_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEqualityExpressionAccess().getOperatorAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpression_BinaryExpressionLeftAction_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getEqualityExpressionAccess().getOperatorEqualsSignKeyword_1_1_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getEqualityExpressionAccess().getOperatorEqualsSignKeyword_1_1_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getEqualityExpressionAccess().getOperatorIsKeyword_1_1_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getEqualityExpressionAccess().getOperatorIsKeyword_1_1_0_1();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getEqualityExpressionAccess().getOperatorExclamationMarkEqualsSignKeyword_1_1_0_3(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getEqualityExpressionAccess().getOperatorExclamationMarkEqualsSignKeyword_1_1_0_3();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getEqualityExpressionAccess().getOperatorLessThanSignGreaterThanSignKeyword_1_1_0_4(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getEqualityExpressionAccess().getOperatorLessThanSignGreaterThanSignKeyword_1_1_0_4();
			return obj;
		}
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEqualityExpressionAccess().getOperatorIsNotParserRuleCall_1_1_0_2(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEqualityExpressionAccess().getOperatorIsNotParserRuleCall_1_1_0_2();
			return obj;
		}
		return null;
	}

}

// right=RelationalExpression
protected class EqualityExpression_RightAssignment_1_2 extends AssignmentToken  {
	
	public EqualityExpression_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEqualityExpressionAccess().getRightAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getRelationalExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEqualityExpressionAccess().getRightRelationalExpressionParserRuleCall_1_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new EqualityExpression_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule EqualityExpression ****************/


/************ begin Rule RelationalExpression ****************
 *
 * RelationalExpression returns Expression:
 * 	ConcatenationExpression (({BinaryExpression.left=current} operator=("<" | ">" | "<=" | ">=")
 * 	right=AdditiveExpression)* | {InExpression.expression=current} not?="not"? operator="in" in=(CollectionFunction |
 * 	ParenthesizedExpression | SubQuery) | {BetweenExpression.expression=current} not?="not"? operator="between"
 * 	left=ConcatenationExpression "and" right=ConcatenationExpression | {LikeExpression.expression=current} not?="not"?
 * 	operator="like" like=ConcatenationExpression ("escape" escape=ConcatenationExpression)? |
 * 	{MemberOfExpression.expression=current} not?="not"? operator="member" "of"? memberOf=QualifiedName);
 *
 **/

// ConcatenationExpression (({BinaryExpression.left=current} operator=("<" | ">" | "<=" | ">=") right=AdditiveExpression)*
// | {InExpression.expression=current} not?="not"? operator="in" in=(CollectionFunction | ParenthesizedExpression |
// SubQuery) | {BetweenExpression.expression=current} not?="not"? operator="between" left=ConcatenationExpression "and"
// right=ConcatenationExpression | {LikeExpression.expression=current} not?="not"? operator="like"
// like=ConcatenationExpression ("escape" escape=ConcatenationExpression)? | {MemberOfExpression.expression=current}
// not?="not"? operator="member" "of"? memberOf=QualifiedName)
protected class RelationalExpression_Group extends GroupToken {
	
	public RelationalExpression_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_Alternatives_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getBetweenExpressionExpressionAction_1_2_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getInExpressionExpressionAction_1_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getLikeExpressionExpressionAction_1_3_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getMemberOfExpressionExpressionAction_1_4_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// ConcatenationExpression
protected class RelationalExpression_ConcatenationExpressionParserRuleCall_0 extends RuleCallToken {
	
	public RelationalExpression_ConcatenationExpressionParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getConcatenationExpressionParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConcatenationExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		if(checkForRecursion(ConcatenationExpression_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({BinaryExpression.left=current} operator=("<" | ">" | "<=" | ">=") right=AdditiveExpression)* |
// {InExpression.expression=current} not?="not"? operator="in" in=(CollectionFunction | ParenthesizedExpression |
// SubQuery) | {BetweenExpression.expression=current} not?="not"? operator="between" left=ConcatenationExpression "and"
// right=ConcatenationExpression | {LikeExpression.expression=current} not?="not"? operator="like"
// like=ConcatenationExpression ("escape" escape=ConcatenationExpression)? | {MemberOfExpression.expression=current}
// not?="not"? operator="member" "of"? memberOf=QualifiedName
protected class RelationalExpression_Alternatives_1 extends AlternativesToken {

	public RelationalExpression_Alternatives_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getAlternatives_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_Group_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new RelationalExpression_Group_1_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new RelationalExpression_Group_1_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new RelationalExpression_Group_1_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new RelationalExpression_Group_1_4(lastRuleCallOrigin, this, 4, inst);
			case 5: return new RelationalExpression_ConcatenationExpressionParserRuleCall_0(lastRuleCallOrigin, this, 5, inst);
			default: return null;
		}	
	}

}

// ({BinaryExpression.left=current} operator=("<" | ">" | "<=" | ">=") right=AdditiveExpression)*
protected class RelationalExpression_Group_1_0 extends GroupToken {
	
	public RelationalExpression_Group_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getGroup_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_RightAssignment_1_0_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getBinaryExpressionLeftAction_1_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {BinaryExpression.left=current}
protected class RelationalExpression_BinaryExpressionLeftAction_1_0_0 extends ActionToken  {

	public RelationalExpression_BinaryExpressionLeftAction_1_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getBinaryExpressionLeftAction_1_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_Group_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new RelationalExpression_ConcatenationExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("left", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("left")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// operator=("<" | ">" | "<=" | ">=")
protected class RelationalExpression_OperatorAssignment_1_0_1 extends AssignmentToken  {
	
	public RelationalExpression_OperatorAssignment_1_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getOperatorAssignment_1_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_BinaryExpressionLeftAction_1_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getRelationalExpressionAccess().getOperatorLessThanSignKeyword_1_0_1_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getOperatorLessThanSignKeyword_1_0_1_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getRelationalExpressionAccess().getOperatorGreaterThanSignKeyword_1_0_1_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getOperatorGreaterThanSignKeyword_1_0_1_0_1();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getRelationalExpressionAccess().getOperatorLessThanSignEqualsSignKeyword_1_0_1_0_2(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getOperatorLessThanSignEqualsSignKeyword_1_0_1_0_2();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getRelationalExpressionAccess().getOperatorGreaterThanSignEqualsSignKeyword_1_0_1_0_3(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getOperatorGreaterThanSignEqualsSignKeyword_1_0_1_0_3();
			return obj;
		}
		return null;
	}

}

// right=AdditiveExpression
protected class RelationalExpression_RightAssignment_1_0_2 extends AssignmentToken  {
	
	public RelationalExpression_RightAssignment_1_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getRightAssignment_1_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAdditiveExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getRelationalExpressionAccess().getRightAdditiveExpressionParserRuleCall_1_0_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new RelationalExpression_OperatorAssignment_1_0_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// {InExpression.expression=current} not?="not"? operator="in" in=(CollectionFunction | ParenthesizedExpression | SubQuery)
protected class RelationalExpression_Group_1_1 extends GroupToken {
	
	public RelationalExpression_Group_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getGroup_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_InAssignment_1_1_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getInExpressionExpressionAction_1_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {InExpression.expression=current}
protected class RelationalExpression_InExpressionExpressionAction_1_1_0 extends ActionToken  {

	public RelationalExpression_InExpressionExpressionAction_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getInExpressionExpressionAction_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_ConcatenationExpressionParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("expression", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("expression")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// not?="not"?
protected class RelationalExpression_NotAssignment_1_1_1 extends AssignmentToken  {
	
	public RelationalExpression_NotAssignment_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getNotAssignment_1_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_InExpressionExpressionAction_1_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("not",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("not");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getNotNotKeyword_1_1_1_0();
			return obj;
		}
		return null;
	}

}

// operator="in"
protected class RelationalExpression_OperatorAssignment_1_1_2 extends AssignmentToken  {
	
	public RelationalExpression_OperatorAssignment_1_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getOperatorAssignment_1_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_NotAssignment_1_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new RelationalExpression_InExpressionExpressionAction_1_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getRelationalExpressionAccess().getOperatorInKeyword_1_1_2_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getOperatorInKeyword_1_1_2_0();
			return obj;
		}
		return null;
	}

}

// in=(CollectionFunction | ParenthesizedExpression | SubQuery)
protected class RelationalExpression_InAssignment_1_1_3 extends AssignmentToken  {
	
	public RelationalExpression_InAssignment_1_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getInAssignment_1_1_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CollectionFunction_Group(this, this, 0, inst);
			case 1: return new ParenthesizedExpression_Group(this, this, 1, inst);
			case 2: return new SubQuery_Group(this, this, 2, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("in",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("in");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCollectionFunctionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getRelationalExpressionAccess().getInCollectionFunctionParserRuleCall_1_1_3_0_0(); 
				consumed = obj;
				return param;
			}
		}
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParenthesizedExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getRelationalExpressionAccess().getInParenthesizedExpressionParserRuleCall_1_1_3_0_1(); 
				consumed = obj;
				return param;
			}
		}
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSubQueryRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getRelationalExpressionAccess().getInSubQueryParserRuleCall_1_1_3_0_2(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new RelationalExpression_OperatorAssignment_1_1_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// {BetweenExpression.expression=current} not?="not"? operator="between" left=ConcatenationExpression "and"
// right=ConcatenationExpression
protected class RelationalExpression_Group_1_2 extends GroupToken {
	
	public RelationalExpression_Group_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getGroup_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_RightAssignment_1_2_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getBetweenExpressionExpressionAction_1_2_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {BetweenExpression.expression=current}
protected class RelationalExpression_BetweenExpressionExpressionAction_1_2_0 extends ActionToken  {

	public RelationalExpression_BetweenExpressionExpressionAction_1_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getBetweenExpressionExpressionAction_1_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_ConcatenationExpressionParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("expression", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("expression")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// not?="not"?
protected class RelationalExpression_NotAssignment_1_2_1 extends AssignmentToken  {
	
	public RelationalExpression_NotAssignment_1_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getNotAssignment_1_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_BetweenExpressionExpressionAction_1_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("not",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("not");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getNotNotKeyword_1_2_1_0();
			return obj;
		}
		return null;
	}

}

// operator="between"
protected class RelationalExpression_OperatorAssignment_1_2_2 extends AssignmentToken  {
	
	public RelationalExpression_OperatorAssignment_1_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getOperatorAssignment_1_2_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_NotAssignment_1_2_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new RelationalExpression_BetweenExpressionExpressionAction_1_2_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getRelationalExpressionAccess().getOperatorBetweenKeyword_1_2_2_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getOperatorBetweenKeyword_1_2_2_0();
			return obj;
		}
		return null;
	}

}

// left=ConcatenationExpression
protected class RelationalExpression_LeftAssignment_1_2_3 extends AssignmentToken  {
	
	public RelationalExpression_LeftAssignment_1_2_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getLeftAssignment_1_2_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConcatenationExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("left",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("left");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConcatenationExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getRelationalExpressionAccess().getLeftConcatenationExpressionParserRuleCall_1_2_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new RelationalExpression_OperatorAssignment_1_2_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "and"
protected class RelationalExpression_AndKeyword_1_2_4 extends KeywordToken  {
	
	public RelationalExpression_AndKeyword_1_2_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getAndKeyword_1_2_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_LeftAssignment_1_2_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// right=ConcatenationExpression
protected class RelationalExpression_RightAssignment_1_2_5 extends AssignmentToken  {
	
	public RelationalExpression_RightAssignment_1_2_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getRightAssignment_1_2_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConcatenationExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConcatenationExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getRelationalExpressionAccess().getRightConcatenationExpressionParserRuleCall_1_2_5_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new RelationalExpression_AndKeyword_1_2_4(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// {LikeExpression.expression=current} not?="not"? operator="like" like=ConcatenationExpression ("escape"
// escape=ConcatenationExpression)?
protected class RelationalExpression_Group_1_3 extends GroupToken {
	
	public RelationalExpression_Group_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getGroup_1_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_Group_1_3_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new RelationalExpression_LikeAssignment_1_3_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getLikeExpressionExpressionAction_1_3_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {LikeExpression.expression=current}
protected class RelationalExpression_LikeExpressionExpressionAction_1_3_0 extends ActionToken  {

	public RelationalExpression_LikeExpressionExpressionAction_1_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getLikeExpressionExpressionAction_1_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_ConcatenationExpressionParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("expression", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("expression")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// not?="not"?
protected class RelationalExpression_NotAssignment_1_3_1 extends AssignmentToken  {
	
	public RelationalExpression_NotAssignment_1_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getNotAssignment_1_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_LikeExpressionExpressionAction_1_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("not",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("not");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getNotNotKeyword_1_3_1_0();
			return obj;
		}
		return null;
	}

}

// operator="like"
protected class RelationalExpression_OperatorAssignment_1_3_2 extends AssignmentToken  {
	
	public RelationalExpression_OperatorAssignment_1_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getOperatorAssignment_1_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_NotAssignment_1_3_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new RelationalExpression_LikeExpressionExpressionAction_1_3_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getRelationalExpressionAccess().getOperatorLikeKeyword_1_3_2_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getOperatorLikeKeyword_1_3_2_0();
			return obj;
		}
		return null;
	}

}

// like=ConcatenationExpression
protected class RelationalExpression_LikeAssignment_1_3_3 extends AssignmentToken  {
	
	public RelationalExpression_LikeAssignment_1_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getLikeAssignment_1_3_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConcatenationExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("like",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("like");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConcatenationExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getRelationalExpressionAccess().getLikeConcatenationExpressionParserRuleCall_1_3_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new RelationalExpression_OperatorAssignment_1_3_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("escape" escape=ConcatenationExpression)?
protected class RelationalExpression_Group_1_3_4 extends GroupToken {
	
	public RelationalExpression_Group_1_3_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getGroup_1_3_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_EscapeAssignment_1_3_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "escape"
protected class RelationalExpression_EscapeKeyword_1_3_4_0 extends KeywordToken  {
	
	public RelationalExpression_EscapeKeyword_1_3_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getEscapeKeyword_1_3_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_LikeAssignment_1_3_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// escape=ConcatenationExpression
protected class RelationalExpression_EscapeAssignment_1_3_4_1 extends AssignmentToken  {
	
	public RelationalExpression_EscapeAssignment_1_3_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getEscapeAssignment_1_3_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConcatenationExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("escape",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("escape");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConcatenationExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getRelationalExpressionAccess().getEscapeConcatenationExpressionParserRuleCall_1_3_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new RelationalExpression_EscapeKeyword_1_3_4_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



// {MemberOfExpression.expression=current} not?="not"? operator="member" "of"? memberOf=QualifiedName
protected class RelationalExpression_Group_1_4 extends GroupToken {
	
	public RelationalExpression_Group_1_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getGroup_1_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_MemberOfAssignment_1_4_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRelationalExpressionAccess().getMemberOfExpressionExpressionAction_1_4_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {MemberOfExpression.expression=current}
protected class RelationalExpression_MemberOfExpressionExpressionAction_1_4_0 extends ActionToken  {

	public RelationalExpression_MemberOfExpressionExpressionAction_1_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getMemberOfExpressionExpressionAction_1_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_ConcatenationExpressionParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("expression", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("expression")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// not?="not"?
protected class RelationalExpression_NotAssignment_1_4_1 extends AssignmentToken  {
	
	public RelationalExpression_NotAssignment_1_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getNotAssignment_1_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_MemberOfExpressionExpressionAction_1_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("not",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("not");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getNotNotKeyword_1_4_1_0();
			return obj;
		}
		return null;
	}

}

// operator="member"
protected class RelationalExpression_OperatorAssignment_1_4_2 extends AssignmentToken  {
	
	public RelationalExpression_OperatorAssignment_1_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getOperatorAssignment_1_4_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_NotAssignment_1_4_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new RelationalExpression_MemberOfExpressionExpressionAction_1_4_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getRelationalExpressionAccess().getOperatorMemberKeyword_1_4_2_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRelationalExpressionAccess().getOperatorMemberKeyword_1_4_2_0();
			return obj;
		}
		return null;
	}

}

// memberOf=QualifiedName
protected class RelationalExpression_MemberOfAssignment_1_4_4 extends AssignmentToken  {
	
	public RelationalExpression_MemberOfAssignment_1_4_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExpressionAccess().getMemberOfAssignment_1_4_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpression_OperatorAssignment_1_4_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("memberOf",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("memberOf");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getRelationalExpressionAccess().getMemberOfQualifiedNameParserRuleCall_1_4_4_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getRelationalExpressionAccess().getMemberOfQualifiedNameParserRuleCall_1_4_4_0();
			return obj;
		}
		return null;
	}

}




/************ end Rule RelationalExpression ****************/


/************ begin Rule ConcatenationExpression ****************
 *
 * ConcatenationExpression returns Expression:
 * 	AdditiveExpression ({BinaryExpression.left=current} operator="||" right=AdditiveExpression)*;
 *
 **/

// AdditiveExpression ({BinaryExpression.left=current} operator="||" right=AdditiveExpression)*
protected class ConcatenationExpression_Group extends GroupToken {
	
	public ConcatenationExpression_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getConcatenationExpressionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConcatenationExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ConcatenationExpression_AdditiveExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// AdditiveExpression
protected class ConcatenationExpression_AdditiveExpressionParserRuleCall_0 extends RuleCallToken {
	
	public ConcatenationExpression_AdditiveExpressionParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getConcatenationExpressionAccess().getAdditiveExpressionParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(checkForRecursion(AdditiveExpression_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({BinaryExpression.left=current} operator="||" right=AdditiveExpression)*
protected class ConcatenationExpression_Group_1 extends GroupToken {
	
	public ConcatenationExpression_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getConcatenationExpressionAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConcatenationExpression_RightAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getConcatenationExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {BinaryExpression.left=current}
protected class ConcatenationExpression_BinaryExpressionLeftAction_1_0 extends ActionToken  {

	public ConcatenationExpression_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getConcatenationExpressionAccess().getBinaryExpressionLeftAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConcatenationExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ConcatenationExpression_AdditiveExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("left", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("left")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// operator="||"
protected class ConcatenationExpression_OperatorAssignment_1_1 extends AssignmentToken  {
	
	public ConcatenationExpression_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getConcatenationExpressionAccess().getOperatorAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConcatenationExpression_BinaryExpressionLeftAction_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getConcatenationExpressionAccess().getOperatorVerticalLineVerticalLineKeyword_1_1_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getConcatenationExpressionAccess().getOperatorVerticalLineVerticalLineKeyword_1_1_0();
			return obj;
		}
		return null;
	}

}

// right=AdditiveExpression
protected class ConcatenationExpression_RightAssignment_1_2 extends AssignmentToken  {
	
	public ConcatenationExpression_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getConcatenationExpressionAccess().getRightAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAdditiveExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getConcatenationExpressionAccess().getRightAdditiveExpressionParserRuleCall_1_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ConcatenationExpression_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule ConcatenationExpression ****************/


/************ begin Rule AdditiveExpression ****************
 *
 * AdditiveExpression returns Expression:
 * 	MultiplyExpression ({BinaryExpression.left=current} operator=("+" | "-") right=MultiplyExpression)*;
 *
 **/

// MultiplyExpression ({BinaryExpression.left=current} operator=("+" | "-") right=MultiplyExpression)*
protected class AdditiveExpression_Group extends GroupToken {
	
	public AdditiveExpression_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAdditiveExpressionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AdditiveExpression_MultiplyExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// MultiplyExpression
protected class AdditiveExpression_MultiplyExpressionParserRuleCall_0 extends RuleCallToken {
	
	public AdditiveExpression_MultiplyExpressionParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAdditiveExpressionAccess().getMultiplyExpressionParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new MultiplyExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(checkForRecursion(MultiplyExpression_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({BinaryExpression.left=current} operator=("+" | "-") right=MultiplyExpression)*
protected class AdditiveExpression_Group_1 extends GroupToken {
	
	public AdditiveExpression_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAdditiveExpressionAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveExpression_RightAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAdditiveExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {BinaryExpression.left=current}
protected class AdditiveExpression_BinaryExpressionLeftAction_1_0 extends ActionToken  {

	public AdditiveExpression_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getAdditiveExpressionAccess().getBinaryExpressionLeftAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AdditiveExpression_MultiplyExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("left", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("left")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// operator=("+" | "-")
protected class AdditiveExpression_OperatorAssignment_1_1 extends AssignmentToken  {
	
	public AdditiveExpression_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAdditiveExpressionAccess().getOperatorAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveExpression_BinaryExpressionLeftAction_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getAdditiveExpressionAccess().getOperatorPlusSignKeyword_1_1_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAdditiveExpressionAccess().getOperatorPlusSignKeyword_1_1_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getAdditiveExpressionAccess().getOperatorHyphenMinusKeyword_1_1_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAdditiveExpressionAccess().getOperatorHyphenMinusKeyword_1_1_0_1();
			return obj;
		}
		return null;
	}

}

// right=MultiplyExpression
protected class AdditiveExpression_RightAssignment_1_2 extends AssignmentToken  {
	
	public AdditiveExpression_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAdditiveExpressionAccess().getRightAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new MultiplyExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getMultiplyExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAdditiveExpressionAccess().getRightMultiplyExpressionParserRuleCall_1_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AdditiveExpression_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule AdditiveExpression ****************/


/************ begin Rule MultiplyExpression ****************
 *
 * MultiplyExpression returns Expression:
 * 	UnaryExpression ({BinaryExpression.left=current} operator=("*" | "/" | "%") right=UnaryExpression)*;
 *
 **/

// UnaryExpression ({BinaryExpression.left=current} operator=("*" | "/" | "%") right=UnaryExpression)*
protected class MultiplyExpression_Group extends GroupToken {
	
	public MultiplyExpression_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getMultiplyExpressionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new MultiplyExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new MultiplyExpression_UnaryExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// UnaryExpression
protected class MultiplyExpression_UnaryExpressionParserRuleCall_0 extends RuleCallToken {
	
	public MultiplyExpression_UnaryExpressionParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getMultiplyExpressionAccess().getUnaryExpressionParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		if(checkForRecursion(UnaryExpression_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({BinaryExpression.left=current} operator=("*" | "/" | "%") right=UnaryExpression)*
protected class MultiplyExpression_Group_1 extends GroupToken {
	
	public MultiplyExpression_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getMultiplyExpressionAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new MultiplyExpression_RightAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {BinaryExpression.left=current}
protected class MultiplyExpression_BinaryExpressionLeftAction_1_0 extends ActionToken  {

	public MultiplyExpression_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getMultiplyExpressionAccess().getBinaryExpressionLeftAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new MultiplyExpression_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new MultiplyExpression_UnaryExpressionParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("left", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("left")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// operator=("*" | "/" | "%")
protected class MultiplyExpression_OperatorAssignment_1_1 extends AssignmentToken  {
	
	public MultiplyExpression_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMultiplyExpressionAccess().getOperatorAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new MultiplyExpression_BinaryExpressionLeftAction_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getMultiplyExpressionAccess().getOperatorAsteriskKeyword_1_1_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getMultiplyExpressionAccess().getOperatorAsteriskKeyword_1_1_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getMultiplyExpressionAccess().getOperatorSolidusKeyword_1_1_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getMultiplyExpressionAccess().getOperatorSolidusKeyword_1_1_0_1();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getMultiplyExpressionAccess().getOperatorPercentSignKeyword_1_1_0_2(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getMultiplyExpressionAccess().getOperatorPercentSignKeyword_1_1_0_2();
			return obj;
		}
		return null;
	}

}

// right=UnaryExpression
protected class MultiplyExpression_RightAssignment_1_2 extends AssignmentToken  {
	
	public MultiplyExpression_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMultiplyExpressionAccess().getRightAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getUnaryExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getMultiplyExpressionAccess().getRightUnaryExpressionParserRuleCall_1_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new MultiplyExpression_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule MultiplyExpression ****************/


/************ begin Rule UnaryExpression ****************
 *
 * UnaryExpression returns Expression:
 * 	{UnaryExpression} operator=("-" | "+") expression=UnaryExpression | PrimaryExpression | CaseExpression |
 * 	QuantifiedExpression;
 *
 **/

// {UnaryExpression} operator=("-" | "+") expression=UnaryExpression | PrimaryExpression | CaseExpression |
// QuantifiedExpression
protected class UnaryExpression_Alternatives extends AlternativesToken {

	public UnaryExpression_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getUnaryExpressionAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new UnaryExpression_PrimaryExpressionParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new UnaryExpression_CaseExpressionParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new UnaryExpression_QuantifiedExpressionParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {UnaryExpression} operator=("-" | "+") expression=UnaryExpression
protected class UnaryExpression_Group_0 extends GroupToken {
	
	public UnaryExpression_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getUnaryExpressionAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_ExpressionAssignment_0_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {UnaryExpression}
protected class UnaryExpression_UnaryExpressionAction_0_0 extends ActionToken  {

	public UnaryExpression_UnaryExpressionAction_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getUnaryExpressionAccess().getUnaryExpressionAction_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// operator=("-" | "+")
protected class UnaryExpression_OperatorAssignment_0_1 extends AssignmentToken  {
	
	public UnaryExpression_OperatorAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getUnaryExpressionAccess().getOperatorAssignment_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_UnaryExpressionAction_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("operator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("operator");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getUnaryExpressionAccess().getOperatorHyphenMinusKeyword_0_1_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getUnaryExpressionAccess().getOperatorHyphenMinusKeyword_0_1_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getUnaryExpressionAccess().getOperatorPlusSignKeyword_0_1_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getUnaryExpressionAccess().getOperatorPlusSignKeyword_0_1_0_1();
			return obj;
		}
		return null;
	}

}

// expression=UnaryExpression
protected class UnaryExpression_ExpressionAssignment_0_2 extends AssignmentToken  {
	
	public UnaryExpression_ExpressionAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getUnaryExpressionAccess().getExpressionAssignment_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getUnaryExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getUnaryExpressionAccess().getExpressionUnaryExpressionParserRuleCall_0_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new UnaryExpression_OperatorAssignment_0_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// PrimaryExpression
protected class UnaryExpression_PrimaryExpressionParserRuleCall_1 extends RuleCallToken {
	
	public UnaryExpression_PrimaryExpressionParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getUnaryExpressionAccess().getPrimaryExpressionParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier())
			return null;
		if(checkForRecursion(PrimaryExpression_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// CaseExpression
protected class UnaryExpression_CaseExpressionParserRuleCall_2 extends RuleCallToken {
	
	public UnaryExpression_CaseExpressionParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getUnaryExpressionAccess().getCaseExpressionParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CaseExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CaseExpression_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// QuantifiedExpression
protected class UnaryExpression_QuantifiedExpressionParserRuleCall_3 extends RuleCallToken {
	
	public UnaryExpression_QuantifiedExpressionParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getUnaryExpressionAccess().getQuantifiedExpressionParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QuantifiedExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier())
			return null;
		if(checkForRecursion(QuantifiedExpression_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule UnaryExpression ****************/


/************ begin Rule PrimaryExpression ****************
 *
 * PrimaryExpression returns Expression:
 * 	PropertyValue | TrimFunction | CastFunction | AggregateFunction | CollectionFunction | FunctionCall |
 * 	ParenthesizedExpression | SubQuery | LiteralValue | QueryParameterValue;
 *
 **/

// PropertyValue | TrimFunction | CastFunction | AggregateFunction | CollectionFunction | FunctionCall |
// ParenthesizedExpression | SubQuery | LiteralValue | QueryParameterValue
protected class PrimaryExpression_Alternatives extends AlternativesToken {

	public PrimaryExpression_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getPrimaryExpressionAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryExpression_PropertyValueParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PrimaryExpression_TrimFunctionParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PrimaryExpression_CastFunctionParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new PrimaryExpression_AggregateFunctionParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new PrimaryExpression_CollectionFunctionParserRuleCall_4(lastRuleCallOrigin, this, 4, inst);
			case 5: return new PrimaryExpression_FunctionCallParserRuleCall_5(lastRuleCallOrigin, this, 5, inst);
			case 6: return new PrimaryExpression_ParenthesizedExpressionParserRuleCall_6(lastRuleCallOrigin, this, 6, inst);
			case 7: return new PrimaryExpression_SubQueryParserRuleCall_7(lastRuleCallOrigin, this, 7, inst);
			case 8: return new PrimaryExpression_LiteralValueParserRuleCall_8(lastRuleCallOrigin, this, 8, inst);
			case 9: return new PrimaryExpression_QueryParameterValueParserRuleCall_9(lastRuleCallOrigin, this, 9, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// PropertyValue
protected class PrimaryExpression_PropertyValueParserRuleCall_0 extends RuleCallToken {
	
	public PrimaryExpression_PropertyValueParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPrimaryExpressionAccess().getPropertyValueParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyValue_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier())
			return null;
		if(checkForRecursion(PropertyValue_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// TrimFunction
protected class PrimaryExpression_TrimFunctionParserRuleCall_1 extends RuleCallToken {
	
	public PrimaryExpression_TrimFunctionParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPrimaryExpressionAccess().getTrimFunctionParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TrimFunction_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier())
			return null;
		if(checkForRecursion(TrimFunction_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// CastFunction
protected class PrimaryExpression_CastFunctionParserRuleCall_2 extends RuleCallToken {
	
	public PrimaryExpression_CastFunctionParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPrimaryExpressionAccess().getCastFunctionParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CastFunction_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// AggregateFunction
protected class PrimaryExpression_AggregateFunctionParserRuleCall_3 extends RuleCallToken {
	
	public PrimaryExpression_AggregateFunctionParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPrimaryExpressionAccess().getAggregateFunctionParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier())
			return null;
		if(checkForRecursion(AggregateFunction_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// CollectionFunction
protected class PrimaryExpression_CollectionFunctionParserRuleCall_4 extends RuleCallToken {
	
	public PrimaryExpression_CollectionFunctionParserRuleCall_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPrimaryExpressionAccess().getCollectionFunctionParserRuleCall_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CollectionFunction_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CollectionFunction_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// FunctionCall
protected class PrimaryExpression_FunctionCallParserRuleCall_5 extends RuleCallToken {
	
	public PrimaryExpression_FunctionCallParserRuleCall_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPrimaryExpressionAccess().getFunctionCallParserRuleCall_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FunctionCall_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier())
			return null;
		if(checkForRecursion(FunctionCall_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ParenthesizedExpression
protected class PrimaryExpression_ParenthesizedExpressionParserRuleCall_6 extends RuleCallToken {
	
	public PrimaryExpression_ParenthesizedExpressionParserRuleCall_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPrimaryExpressionAccess().getParenthesizedExpressionParserRuleCall_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParenthesizedExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ParenthesizedExpression_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// SubQuery
protected class PrimaryExpression_SubQueryParserRuleCall_7 extends RuleCallToken {
	
	public PrimaryExpression_SubQueryParserRuleCall_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPrimaryExpressionAccess().getSubQueryParserRuleCall_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubQuery_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SubQuery_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// LiteralValue
protected class PrimaryExpression_LiteralValueParserRuleCall_8 extends RuleCallToken {
	
	public PrimaryExpression_LiteralValueParserRuleCall_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPrimaryExpressionAccess().getLiteralValueParserRuleCall_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LiteralValue_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(LiteralValue_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// QueryParameterValue
protected class PrimaryExpression_QueryParameterValueParserRuleCall_9 extends RuleCallToken {
	
	public PrimaryExpression_QueryParameterValueParserRuleCall_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPrimaryExpressionAccess().getQueryParameterValueParserRuleCall_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryParameterValue_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier())
			return null;
		if(checkForRecursion(QueryParameterValue_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule PrimaryExpression ****************/


/************ begin Rule PropertyValue ****************
 *
 * PropertyValue:
 * 	name=ID ("." segments+=ID? ("[" index+=Expression "]")?)* classProperty?="class"?;
 *
 **/

// name=ID ("." segments+=ID? ("[" index+=Expression "]")?)* classProperty?="class"?
protected class PropertyValue_Group extends GroupToken {
	
	public PropertyValue_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPropertyValueAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyValue_ClassPropertyAssignment_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PropertyValue_Group_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PropertyValue_NameAssignment_0(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPropertyValueRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name=ID
protected class PropertyValue_NameAssignment_0 extends AssignmentToken  {
	
	public PropertyValue_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyValueAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPropertyValueAccess().getNameIDTerminalRuleCall_0_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getPropertyValueAccess().getNameIDTerminalRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// ("." segments+=ID? ("[" index+=Expression "]")?)*
protected class PropertyValue_Group_1 extends GroupToken {
	
	public PropertyValue_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPropertyValueAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyValue_Group_1_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PropertyValue_SegmentsAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "."
protected class PropertyValue_FullStopKeyword_1_0 extends KeywordToken  {
	
	public PropertyValue_FullStopKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPropertyValueAccess().getFullStopKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyValue_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PropertyValue_NameAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// segments+=ID?
protected class PropertyValue_SegmentsAssignment_1_1 extends AssignmentToken  {
	
	public PropertyValue_SegmentsAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyValueAccess().getSegmentsAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyValue_FullStopKeyword_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("segments",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("segments");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPropertyValueAccess().getSegmentsIDTerminalRuleCall_1_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getPropertyValueAccess().getSegmentsIDTerminalRuleCall_1_1_0();
			return obj;
		}
		return null;
	}

}

// ("[" index+=Expression "]")?
protected class PropertyValue_Group_1_2 extends GroupToken {
	
	public PropertyValue_Group_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPropertyValueAccess().getGroup_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyValue_RightSquareBracketKeyword_1_2_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "["
protected class PropertyValue_LeftSquareBracketKeyword_1_2_0 extends KeywordToken  {
	
	public PropertyValue_LeftSquareBracketKeyword_1_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPropertyValueAccess().getLeftSquareBracketKeyword_1_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyValue_SegmentsAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PropertyValue_FullStopKeyword_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// index+=Expression
protected class PropertyValue_IndexAssignment_1_2_1 extends AssignmentToken  {
	
	public PropertyValue_IndexAssignment_1_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyValueAccess().getIndexAssignment_1_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("index",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("index");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPropertyValueAccess().getIndexExpressionParserRuleCall_1_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PropertyValue_LeftSquareBracketKeyword_1_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "]"
protected class PropertyValue_RightSquareBracketKeyword_1_2_2 extends KeywordToken  {
	
	public PropertyValue_RightSquareBracketKeyword_1_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPropertyValueAccess().getRightSquareBracketKeyword_1_2_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyValue_IndexAssignment_1_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



// classProperty?="class"?
protected class PropertyValue_ClassPropertyAssignment_2 extends AssignmentToken  {
	
	public PropertyValue_ClassPropertyAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyValueAccess().getClassPropertyAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyValue_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PropertyValue_NameAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("classProperty",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("classProperty");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getPropertyValueAccess().getClassPropertyClassKeyword_2_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule PropertyValue ****************/


/************ begin Rule FunctionCall ****************
 *
 * FunctionCall:
 * 	function=ID "(" arguments+=Expression ("," arguments+=Expression)* ")";
 *
 **/

// function=ID "(" arguments+=Expression ("," arguments+=Expression)* ")"
protected class FunctionCall_Group extends GroupToken {
	
	public FunctionCall_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getFunctionCallAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FunctionCall_RightParenthesisKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFunctionCallRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// function=ID
protected class FunctionCall_FunctionAssignment_0 extends AssignmentToken  {
	
	public FunctionCall_FunctionAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFunctionCallAccess().getFunctionAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("function",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("function");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getFunctionCallAccess().getFunctionIDTerminalRuleCall_0_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getFunctionCallAccess().getFunctionIDTerminalRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class FunctionCall_LeftParenthesisKeyword_1 extends KeywordToken  {
	
	public FunctionCall_LeftParenthesisKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getFunctionCallAccess().getLeftParenthesisKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FunctionCall_FunctionAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// arguments+=Expression
protected class FunctionCall_ArgumentsAssignment_2 extends AssignmentToken  {
	
	public FunctionCall_ArgumentsAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFunctionCallAccess().getArgumentsAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("arguments",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("arguments");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getFunctionCallAccess().getArgumentsExpressionParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new FunctionCall_LeftParenthesisKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," arguments+=Expression)*
protected class FunctionCall_Group_3 extends GroupToken {
	
	public FunctionCall_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getFunctionCallAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FunctionCall_ArgumentsAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class FunctionCall_CommaKeyword_3_0 extends KeywordToken  {
	
	public FunctionCall_CommaKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getFunctionCallAccess().getCommaKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FunctionCall_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new FunctionCall_ArgumentsAssignment_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// arguments+=Expression
protected class FunctionCall_ArgumentsAssignment_3_1 extends AssignmentToken  {
	
	public FunctionCall_ArgumentsAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFunctionCallAccess().getArgumentsAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("arguments",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("arguments");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getFunctionCallAccess().getArgumentsExpressionParserRuleCall_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new FunctionCall_CommaKeyword_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ")"
protected class FunctionCall_RightParenthesisKeyword_4 extends KeywordToken  {
	
	public FunctionCall_RightParenthesisKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getFunctionCallAccess().getRightParenthesisKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FunctionCall_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new FunctionCall_ArgumentsAssignment_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule FunctionCall ****************/


/************ begin Rule TrimFunction ****************
 *
 * TrimFunction:
 * 	function="trim" "(" mode=("trailing" | "leading" | "both")? (character=StringLiteralValue "from")? from=Expression
 * 	")";
 *
 **/

// function="trim" "(" mode=("trailing" | "leading" | "both")? (character=StringLiteralValue "from")? from=Expression ")"
protected class TrimFunction_Group extends GroupToken {
	
	public TrimFunction_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getTrimFunctionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TrimFunction_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getTrimFunctionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// function="trim"
protected class TrimFunction_FunctionAssignment_0 extends AssignmentToken  {
	
	public TrimFunction_FunctionAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getTrimFunctionAccess().getFunctionAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("function",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("function");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getTrimFunctionAccess().getFunctionTrimKeyword_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getTrimFunctionAccess().getFunctionTrimKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class TrimFunction_LeftParenthesisKeyword_1 extends KeywordToken  {
	
	public TrimFunction_LeftParenthesisKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTrimFunctionAccess().getLeftParenthesisKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TrimFunction_FunctionAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// mode=("trailing" | "leading" | "both")?
protected class TrimFunction_ModeAssignment_2 extends AssignmentToken  {
	
	public TrimFunction_ModeAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getTrimFunctionAccess().getModeAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TrimFunction_LeftParenthesisKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("mode",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("mode");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getTrimFunctionAccess().getModeTrailingKeyword_2_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getTrimFunctionAccess().getModeTrailingKeyword_2_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getTrimFunctionAccess().getModeLeadingKeyword_2_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getTrimFunctionAccess().getModeLeadingKeyword_2_0_1();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getTrimFunctionAccess().getModeBothKeyword_2_0_2(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getTrimFunctionAccess().getModeBothKeyword_2_0_2();
			return obj;
		}
		return null;
	}

}

// (character=StringLiteralValue "from")?
protected class TrimFunction_Group_3 extends GroupToken {
	
	public TrimFunction_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getTrimFunctionAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TrimFunction_FromKeyword_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// character=StringLiteralValue
protected class TrimFunction_CharacterAssignment_3_0 extends AssignmentToken  {
	
	public TrimFunction_CharacterAssignment_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getTrimFunctionAccess().getCharacterAssignment_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StringLiteralValue_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("character",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("character");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getStringLiteralValueRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getTrimFunctionAccess().getCharacterStringLiteralValueParserRuleCall_3_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new TrimFunction_ModeAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new TrimFunction_LeftParenthesisKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "from"
protected class TrimFunction_FromKeyword_3_1 extends KeywordToken  {
	
	public TrimFunction_FromKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTrimFunctionAccess().getFromKeyword_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TrimFunction_CharacterAssignment_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


// from=Expression
protected class TrimFunction_FromAssignment_4 extends AssignmentToken  {
	
	public TrimFunction_FromAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getTrimFunctionAccess().getFromAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("from",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("from");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getTrimFunctionAccess().getFromExpressionParserRuleCall_4_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new TrimFunction_Group_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new TrimFunction_ModeAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new TrimFunction_LeftParenthesisKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ")"
protected class TrimFunction_RightParenthesisKeyword_5 extends KeywordToken  {
	
	public TrimFunction_RightParenthesisKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTrimFunctionAccess().getRightParenthesisKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TrimFunction_FromAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule TrimFunction ****************/


/************ begin Rule CastFunction ****************
 *
 * CastFunction:
 * 	function="cast" "(" from=Expression "as" name=ID ")" | function="extract" "(" name=ID "from" from=Expression ")";
 *
 **/

// function="cast" "(" from=Expression "as" name=ID ")" | function="extract" "(" name=ID "from" from=Expression ")"
protected class CastFunction_Alternatives extends AlternativesToken {

	public CastFunction_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CastFunction_Group_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCastFunctionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// function="cast" "(" from=Expression "as" name=ID ")"
protected class CastFunction_Group_0 extends GroupToken {
	
	public CastFunction_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_RightParenthesisKeyword_0_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// function="cast"
protected class CastFunction_FunctionAssignment_0_0 extends AssignmentToken  {
	
	public CastFunction_FunctionAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getFunctionAssignment_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("function",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("function");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCastFunctionAccess().getFunctionCastKeyword_0_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCastFunctionAccess().getFunctionCastKeyword_0_0_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class CastFunction_LeftParenthesisKeyword_0_1 extends KeywordToken  {
	
	public CastFunction_LeftParenthesisKeyword_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getLeftParenthesisKeyword_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_FunctionAssignment_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// from=Expression
protected class CastFunction_FromAssignment_0_2 extends AssignmentToken  {
	
	public CastFunction_FromAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getFromAssignment_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("from",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("from");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCastFunctionAccess().getFromExpressionParserRuleCall_0_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CastFunction_LeftParenthesisKeyword_0_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "as"
protected class CastFunction_AsKeyword_0_3 extends KeywordToken  {
	
	public CastFunction_AsKeyword_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getAsKeyword_0_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_FromAssignment_0_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name=ID
protected class CastFunction_NameAssignment_0_4 extends AssignmentToken  {
	
	public CastFunction_NameAssignment_0_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getNameAssignment_0_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_AsKeyword_0_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCastFunctionAccess().getNameIDTerminalRuleCall_0_4_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCastFunctionAccess().getNameIDTerminalRuleCall_0_4_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class CastFunction_RightParenthesisKeyword_0_5 extends KeywordToken  {
	
	public CastFunction_RightParenthesisKeyword_0_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getRightParenthesisKeyword_0_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_NameAssignment_0_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


// function="extract" "(" name=ID "from" from=Expression ")"
protected class CastFunction_Group_1 extends GroupToken {
	
	public CastFunction_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_RightParenthesisKeyword_1_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// function="extract"
protected class CastFunction_FunctionAssignment_1_0 extends AssignmentToken  {
	
	public CastFunction_FunctionAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getFunctionAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("function",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("function");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCastFunctionAccess().getFunctionExtractKeyword_1_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCastFunctionAccess().getFunctionExtractKeyword_1_0_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class CastFunction_LeftParenthesisKeyword_1_1 extends KeywordToken  {
	
	public CastFunction_LeftParenthesisKeyword_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getLeftParenthesisKeyword_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_FunctionAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name=ID
protected class CastFunction_NameAssignment_1_2 extends AssignmentToken  {
	
	public CastFunction_NameAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getNameAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_LeftParenthesisKeyword_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCastFunctionAccess().getNameIDTerminalRuleCall_1_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCastFunctionAccess().getNameIDTerminalRuleCall_1_2_0();
			return obj;
		}
		return null;
	}

}

// "from"
protected class CastFunction_FromKeyword_1_3 extends KeywordToken  {
	
	public CastFunction_FromKeyword_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getFromKeyword_1_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_NameAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// from=Expression
protected class CastFunction_FromAssignment_1_4 extends AssignmentToken  {
	
	public CastFunction_FromAssignment_1_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getFromAssignment_1_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("from",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("from");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCastFunctionAccess().getFromExpressionParserRuleCall_1_4_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CastFunction_FromKeyword_1_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ")"
protected class CastFunction_RightParenthesisKeyword_1_5 extends KeywordToken  {
	
	public CastFunction_RightParenthesisKeyword_1_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCastFunctionAccess().getRightParenthesisKeyword_1_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CastFunction_FromAssignment_1_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule CastFunction ****************/


/************ begin Rule AggregateFunction ****************
 *
 * AggregateFunction:
 * 	function=("sum" | "avg" | "max" | "min") "(" aggregateExpression=AdditiveExpression ")" | function="count" "("
 * 	(all?="*" | (distinct?="distinct" | all?="all")? (from=QualifiedName | collection=CollectionFunction)) ")";
 *
 **/

// function=("sum" | "avg" | "max" | "min") "(" aggregateExpression=AdditiveExpression ")" | function="count" "(" (all?="*"
// | (distinct?="distinct" | all?="all")? (from=QualifiedName | collection=CollectionFunction)) ")"
protected class AggregateFunction_Alternatives extends AlternativesToken {

	public AggregateFunction_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AggregateFunction_Group_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAggregateFunctionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// function=("sum" | "avg" | "max" | "min") "(" aggregateExpression=AdditiveExpression ")"
protected class AggregateFunction_Group_0 extends GroupToken {
	
	public AggregateFunction_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_RightParenthesisKeyword_0_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// function=("sum" | "avg" | "max" | "min")
protected class AggregateFunction_FunctionAssignment_0_0 extends AssignmentToken  {
	
	public AggregateFunction_FunctionAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getFunctionAssignment_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("function",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("function");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getAggregateFunctionAccess().getFunctionSumKeyword_0_0_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAggregateFunctionAccess().getFunctionSumKeyword_0_0_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getAggregateFunctionAccess().getFunctionAvgKeyword_0_0_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAggregateFunctionAccess().getFunctionAvgKeyword_0_0_0_1();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getAggregateFunctionAccess().getFunctionMaxKeyword_0_0_0_2(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAggregateFunctionAccess().getFunctionMaxKeyword_0_0_0_2();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getAggregateFunctionAccess().getFunctionMinKeyword_0_0_0_3(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAggregateFunctionAccess().getFunctionMinKeyword_0_0_0_3();
			return obj;
		}
		return null;
	}

}

// "("
protected class AggregateFunction_LeftParenthesisKeyword_0_1 extends KeywordToken  {
	
	public AggregateFunction_LeftParenthesisKeyword_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getLeftParenthesisKeyword_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_FunctionAssignment_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// aggregateExpression=AdditiveExpression
protected class AggregateFunction_AggregateExpressionAssignment_0_2 extends AssignmentToken  {
	
	public AggregateFunction_AggregateExpressionAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getAggregateExpressionAssignment_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveExpression_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("aggregateExpression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("aggregateExpression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAdditiveExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAggregateFunctionAccess().getAggregateExpressionAdditiveExpressionParserRuleCall_0_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AggregateFunction_LeftParenthesisKeyword_0_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ")"
protected class AggregateFunction_RightParenthesisKeyword_0_3 extends KeywordToken  {
	
	public AggregateFunction_RightParenthesisKeyword_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getRightParenthesisKeyword_0_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_AggregateExpressionAssignment_0_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


// function="count" "(" (all?="*" | (distinct?="distinct" | all?="all")? (from=QualifiedName |
// collection=CollectionFunction)) ")"
protected class AggregateFunction_Group_1 extends GroupToken {
	
	public AggregateFunction_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_RightParenthesisKeyword_1_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// function="count"
protected class AggregateFunction_FunctionAssignment_1_0 extends AssignmentToken  {
	
	public AggregateFunction_FunctionAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getFunctionAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("function",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("function");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getAggregateFunctionAccess().getFunctionCountKeyword_1_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAggregateFunctionAccess().getFunctionCountKeyword_1_0_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class AggregateFunction_LeftParenthesisKeyword_1_1 extends KeywordToken  {
	
	public AggregateFunction_LeftParenthesisKeyword_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getLeftParenthesisKeyword_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_FunctionAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// all?="*" | (distinct?="distinct" | all?="all")? (from=QualifiedName | collection=CollectionFunction)
protected class AggregateFunction_Alternatives_1_2 extends AlternativesToken {

	public AggregateFunction_Alternatives_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getAlternatives_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_AllAssignment_1_2_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AggregateFunction_Group_1_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// all?="*"
protected class AggregateFunction_AllAssignment_1_2_0 extends AssignmentToken  {
	
	public AggregateFunction_AllAssignment_1_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getAllAssignment_1_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_LeftParenthesisKeyword_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("all",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("all");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAggregateFunctionAccess().getAllAsteriskKeyword_1_2_0_0();
			return obj;
		}
		return null;
	}

}

// (distinct?="distinct" | all?="all")? (from=QualifiedName | collection=CollectionFunction)
protected class AggregateFunction_Group_1_2_1 extends GroupToken {
	
	public AggregateFunction_Group_1_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getGroup_1_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_Alternatives_1_2_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// (distinct?="distinct" | all?="all")?
protected class AggregateFunction_Alternatives_1_2_1_0 extends AlternativesToken {

	public AggregateFunction_Alternatives_1_2_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getAlternatives_1_2_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_DistinctAssignment_1_2_1_0_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AggregateFunction_AllAssignment_1_2_1_0_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// distinct?="distinct"
protected class AggregateFunction_DistinctAssignment_1_2_1_0_0 extends AssignmentToken  {
	
	public AggregateFunction_DistinctAssignment_1_2_1_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getDistinctAssignment_1_2_1_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_LeftParenthesisKeyword_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("distinct",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("distinct");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAggregateFunctionAccess().getDistinctDistinctKeyword_1_2_1_0_0_0();
			return obj;
		}
		return null;
	}

}

// all?="all"
protected class AggregateFunction_AllAssignment_1_2_1_0_1 extends AssignmentToken  {
	
	public AggregateFunction_AllAssignment_1_2_1_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getAllAssignment_1_2_1_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_LeftParenthesisKeyword_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("all",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("all");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAggregateFunctionAccess().getAllAllKeyword_1_2_1_0_1_0();
			return obj;
		}
		return null;
	}

}


// from=QualifiedName | collection=CollectionFunction
protected class AggregateFunction_Alternatives_1_2_1_1 extends AlternativesToken {

	public AggregateFunction_Alternatives_1_2_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getAlternatives_1_2_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_FromAssignment_1_2_1_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AggregateFunction_CollectionAssignment_1_2_1_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// from=QualifiedName
protected class AggregateFunction_FromAssignment_1_2_1_1_0 extends AssignmentToken  {
	
	public AggregateFunction_FromAssignment_1_2_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getFromAssignment_1_2_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_Alternatives_1_2_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AggregateFunction_LeftParenthesisKeyword_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("from",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("from");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAggregateFunctionAccess().getFromQualifiedNameParserRuleCall_1_2_1_1_0_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAggregateFunctionAccess().getFromQualifiedNameParserRuleCall_1_2_1_1_0_0();
			return obj;
		}
		return null;
	}

}

// collection=CollectionFunction
protected class AggregateFunction_CollectionAssignment_1_2_1_1_1 extends AssignmentToken  {
	
	public AggregateFunction_CollectionAssignment_1_2_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getCollectionAssignment_1_2_1_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CollectionFunction_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("collection",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("collection");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCollectionFunctionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAggregateFunctionAccess().getCollectionCollectionFunctionParserRuleCall_1_2_1_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AggregateFunction_Alternatives_1_2_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new AggregateFunction_LeftParenthesisKeyword_1_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}




// ")"
protected class AggregateFunction_RightParenthesisKeyword_1_3 extends KeywordToken  {
	
	public AggregateFunction_RightParenthesisKeyword_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAggregateFunctionAccess().getRightParenthesisKeyword_1_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AggregateFunction_Alternatives_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule AggregateFunction ****************/


/************ begin Rule QueryParameterReference ****************
 *
 * QueryParameterReference:
 * 	Parameter | Attribute | IElementWithNoName;
 *
 **/

// Parameter | Attribute | IElementWithNoName
protected class QueryParameterReference_Alternatives extends AlternativesToken {

	public QueryParameterReference_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getQueryParameterReferenceAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryParameterReference_ParameterParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new QueryParameterReference_AttributeParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new QueryParameterReference_IElementWithNoNameParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeAccess().getAttributeAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIElementWithNoNameRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParameterRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// Parameter
protected class QueryParameterReference_ParameterParserRuleCall_0 extends RuleCallToken {
	
	public QueryParameterReference_ParameterParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getQueryParameterReferenceAccess().getParameterParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Parameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParameterRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Parameter_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Attribute
protected class QueryParameterReference_AttributeParserRuleCall_1 extends RuleCallToken {
	
	public QueryParameterReference_AttributeParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getQueryParameterReferenceAccess().getAttributeParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeAccess().getAttributeAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(Attribute_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// IElementWithNoName
protected class QueryParameterReference_IElementWithNoNameParserRuleCall_2 extends RuleCallToken {
	
	public QueryParameterReference_IElementWithNoNameParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getQueryParameterReferenceAccess().getIElementWithNoNameParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IElementWithNoName_NoNameAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getIElementWithNoNameRule().getType().getClassifier())
			return null;
		if(checkForRecursion(IElementWithNoName_NoNameAssignment.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule QueryParameterReference ****************/


/************ begin Rule QueryParameterValue ****************
 *
 * QueryParameterValue:
 * 	":" parameter=[QueryParameterReference] ("." attribute=[Attribute])?;
 *
 **/

// ":" parameter=[QueryParameterReference] ("." attribute=[Attribute])?
protected class QueryParameterValue_Group extends GroupToken {
	
	public QueryParameterValue_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getQueryParameterValueAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryParameterValue_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new QueryParameterValue_ParameterAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getQueryParameterValueRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// ":"
protected class QueryParameterValue_ColonKeyword_0 extends KeywordToken  {
	
	public QueryParameterValue_ColonKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getQueryParameterValueAccess().getColonKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// parameter=[QueryParameterReference]
protected class QueryParameterValue_ParameterAssignment_1 extends AssignmentToken  {
	
	public QueryParameterValue_ParameterAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQueryParameterValueAccess().getParameterAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryParameterValue_ColonKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameter",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getQueryParameterValueAccess().getParameterQueryParameterReferenceCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getQueryParameterValueAccess().getParameterQueryParameterReferenceCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("." attribute=[Attribute])?
protected class QueryParameterValue_Group_2 extends GroupToken {
	
	public QueryParameterValue_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getQueryParameterValueAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryParameterValue_AttributeAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "."
protected class QueryParameterValue_FullStopKeyword_2_0 extends KeywordToken  {
	
	public QueryParameterValue_FullStopKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getQueryParameterValueAccess().getFullStopKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryParameterValue_ParameterAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// attribute=[Attribute]
protected class QueryParameterValue_AttributeAssignment_2_1 extends AssignmentToken  {
	
	public QueryParameterValue_AttributeAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQueryParameterValueAccess().getAttributeAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QueryParameterValue_FullStopKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attribute",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attribute");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getQueryParameterValueAccess().getAttributeAttributeCrossReference_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getQueryParameterValueAccess().getAttributeAttributeCrossReference_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}



/************ end Rule QueryParameterValue ****************/


/************ begin Rule QuantifiedExpression ****************
 *
 * QuantifiedExpression:
 * 	quantifier=("some" | "exists" | "all" | "any") (expression=(CollectionFunction | SubQuery) | name=ID);
 *
 **/

// quantifier=("some" | "exists" | "all" | "any") (expression=(CollectionFunction | SubQuery) | name=ID)
protected class QuantifiedExpression_Group extends GroupToken {
	
	public QuantifiedExpression_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getQuantifiedExpressionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QuantifiedExpression_Alternatives_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getQuantifiedExpressionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// quantifier=("some" | "exists" | "all" | "any")
protected class QuantifiedExpression_QuantifierAssignment_0 extends AssignmentToken  {
	
	public QuantifiedExpression_QuantifierAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQuantifiedExpressionAccess().getQuantifierAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("quantifier",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("quantifier");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getQuantifiedExpressionAccess().getQuantifierSomeKeyword_0_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getQuantifiedExpressionAccess().getQuantifierSomeKeyword_0_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getQuantifiedExpressionAccess().getQuantifierExistsKeyword_0_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getQuantifiedExpressionAccess().getQuantifierExistsKeyword_0_0_1();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getQuantifiedExpressionAccess().getQuantifierAllKeyword_0_0_2(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getQuantifiedExpressionAccess().getQuantifierAllKeyword_0_0_2();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getQuantifiedExpressionAccess().getQuantifierAnyKeyword_0_0_3(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getQuantifiedExpressionAccess().getQuantifierAnyKeyword_0_0_3();
			return obj;
		}
		return null;
	}

}

// expression=(CollectionFunction | SubQuery) | name=ID
protected class QuantifiedExpression_Alternatives_1 extends AlternativesToken {

	public QuantifiedExpression_Alternatives_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getQuantifiedExpressionAccess().getAlternatives_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QuantifiedExpression_ExpressionAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new QuantifiedExpression_NameAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// expression=(CollectionFunction | SubQuery)
protected class QuantifiedExpression_ExpressionAssignment_1_0 extends AssignmentToken  {
	
	public QuantifiedExpression_ExpressionAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQuantifiedExpressionAccess().getExpressionAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CollectionFunction_Group(this, this, 0, inst);
			case 1: return new SubQuery_Group(this, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCollectionFunctionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getQuantifiedExpressionAccess().getExpressionCollectionFunctionParserRuleCall_1_0_0_0(); 
				consumed = obj;
				return param;
			}
		}
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSubQueryRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getQuantifiedExpressionAccess().getExpressionSubQueryParserRuleCall_1_0_0_1(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new QuantifiedExpression_QuantifierAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// name=ID
protected class QuantifiedExpression_NameAssignment_1_1 extends AssignmentToken  {
	
	public QuantifiedExpression_NameAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getQuantifiedExpressionAccess().getNameAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new QuantifiedExpression_QuantifierAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getQuantifiedExpressionAccess().getNameIDTerminalRuleCall_1_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getQuantifiedExpressionAccess().getNameIDTerminalRuleCall_1_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule QuantifiedExpression ****************/


/************ begin Rule CaseExpression ****************
 *
 * CaseExpression:
 * 	"case" whenClause+=WhenClause+ ("else" elseExpression=UnaryExpression)? "end" | "case" expression=UnaryExpression
 * 	altWhenClause+=AltWhenClause+ ("else" elseExpression=UnaryExpression)? "end";
 *
 **/

// "case" whenClause+=WhenClause+ ("else" elseExpression=UnaryExpression)? "end" | "case" expression=UnaryExpression
// altWhenClause+=AltWhenClause+ ("else" elseExpression=UnaryExpression)? "end"
protected class CaseExpression_Alternatives extends AlternativesToken {

	public CaseExpression_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CaseExpression_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CaseExpression_Group_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCaseExpressionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "case" whenClause+=WhenClause+ ("else" elseExpression=UnaryExpression)? "end"
protected class CaseExpression_Group_0 extends GroupToken {
	
	public CaseExpression_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CaseExpression_EndKeyword_0_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "case"
protected class CaseExpression_CaseKeyword_0_0 extends KeywordToken  {
	
	public CaseExpression_CaseKeyword_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getCaseKeyword_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// whenClause+=WhenClause+
protected class CaseExpression_WhenClauseAssignment_0_1 extends AssignmentToken  {
	
	public CaseExpression_WhenClauseAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getWhenClauseAssignment_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new WhenClause_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("whenClause",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("whenClause");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getWhenClauseRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCaseExpressionAccess().getWhenClauseWhenClauseParserRuleCall_0_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CaseExpression_WhenClauseAssignment_0_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new CaseExpression_CaseKeyword_0_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("else" elseExpression=UnaryExpression)?
protected class CaseExpression_Group_0_2 extends GroupToken {
	
	public CaseExpression_Group_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getGroup_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CaseExpression_ElseExpressionAssignment_0_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "else"
protected class CaseExpression_ElseKeyword_0_2_0 extends KeywordToken  {
	
	public CaseExpression_ElseKeyword_0_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getElseKeyword_0_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CaseExpression_WhenClauseAssignment_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// elseExpression=UnaryExpression
protected class CaseExpression_ElseExpressionAssignment_0_2_1 extends AssignmentToken  {
	
	public CaseExpression_ElseExpressionAssignment_0_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getElseExpressionAssignment_0_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("elseExpression",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("elseExpression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getUnaryExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCaseExpressionAccess().getElseExpressionUnaryExpressionParserRuleCall_0_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CaseExpression_ElseKeyword_0_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "end"
protected class CaseExpression_EndKeyword_0_3 extends KeywordToken  {
	
	public CaseExpression_EndKeyword_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getEndKeyword_0_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CaseExpression_Group_0_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CaseExpression_WhenClauseAssignment_0_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


// "case" expression=UnaryExpression altWhenClause+=AltWhenClause+ ("else" elseExpression=UnaryExpression)? "end"
protected class CaseExpression_Group_1 extends GroupToken {
	
	public CaseExpression_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CaseExpression_EndKeyword_1_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "case"
protected class CaseExpression_CaseKeyword_1_0 extends KeywordToken  {
	
	public CaseExpression_CaseKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getCaseKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// expression=UnaryExpression
protected class CaseExpression_ExpressionAssignment_1_1 extends AssignmentToken  {
	
	public CaseExpression_ExpressionAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getExpressionAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getUnaryExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCaseExpressionAccess().getExpressionUnaryExpressionParserRuleCall_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CaseExpression_CaseKeyword_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// altWhenClause+=AltWhenClause+
protected class CaseExpression_AltWhenClauseAssignment_1_2 extends AssignmentToken  {
	
	public CaseExpression_AltWhenClauseAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getAltWhenClauseAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AltWhenClause_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("altWhenClause",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("altWhenClause");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAltWhenClauseRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCaseExpressionAccess().getAltWhenClauseAltWhenClauseParserRuleCall_1_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CaseExpression_AltWhenClauseAssignment_1_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new CaseExpression_ExpressionAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("else" elseExpression=UnaryExpression)?
protected class CaseExpression_Group_1_3 extends GroupToken {
	
	public CaseExpression_Group_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getGroup_1_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CaseExpression_ElseExpressionAssignment_1_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "else"
protected class CaseExpression_ElseKeyword_1_3_0 extends KeywordToken  {
	
	public CaseExpression_ElseKeyword_1_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getElseKeyword_1_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CaseExpression_AltWhenClauseAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// elseExpression=UnaryExpression
protected class CaseExpression_ElseExpressionAssignment_1_3_1 extends AssignmentToken  {
	
	public CaseExpression_ElseExpressionAssignment_1_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getElseExpressionAssignment_1_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("elseExpression",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("elseExpression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getUnaryExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCaseExpressionAccess().getElseExpressionUnaryExpressionParserRuleCall_1_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CaseExpression_ElseKeyword_1_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "end"
protected class CaseExpression_EndKeyword_1_4 extends KeywordToken  {
	
	public CaseExpression_EndKeyword_1_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCaseExpressionAccess().getEndKeyword_1_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CaseExpression_Group_1_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CaseExpression_AltWhenClauseAssignment_1_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule CaseExpression ****************/


/************ begin Rule WhenClause ****************
 *
 * WhenClause:
 * 	"when" whenExpression=Expression "then" thenExpression=UnaryExpression;
 *
 **/

// "when" whenExpression=Expression "then" thenExpression=UnaryExpression
protected class WhenClause_Group extends GroupToken {
	
	public WhenClause_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getWhenClauseAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new WhenClause_ThenExpressionAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getWhenClauseRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "when"
protected class WhenClause_WhenKeyword_0 extends KeywordToken  {
	
	public WhenClause_WhenKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getWhenClauseAccess().getWhenKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// whenExpression=Expression
protected class WhenClause_WhenExpressionAssignment_1 extends AssignmentToken  {
	
	public WhenClause_WhenExpressionAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getWhenClauseAccess().getWhenExpressionAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("whenExpression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("whenExpression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getWhenClauseAccess().getWhenExpressionExpressionParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new WhenClause_WhenKeyword_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "then"
protected class WhenClause_ThenKeyword_2 extends KeywordToken  {
	
	public WhenClause_ThenKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getWhenClauseAccess().getThenKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new WhenClause_WhenExpressionAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// thenExpression=UnaryExpression
protected class WhenClause_ThenExpressionAssignment_3 extends AssignmentToken  {
	
	public WhenClause_ThenExpressionAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getWhenClauseAccess().getThenExpressionAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("thenExpression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("thenExpression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getUnaryExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getWhenClauseAccess().getThenExpressionUnaryExpressionParserRuleCall_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new WhenClause_ThenKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule WhenClause ****************/


/************ begin Rule AltWhenClause ****************
 *
 * AltWhenClause:
 * 	"when" whenExpression=UnaryExpression "then" thenExpression=UnaryExpression;
 *
 **/

// "when" whenExpression=UnaryExpression "then" thenExpression=UnaryExpression
protected class AltWhenClause_Group extends GroupToken {
	
	public AltWhenClause_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAltWhenClauseAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AltWhenClause_ThenExpressionAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAltWhenClauseRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "when"
protected class AltWhenClause_WhenKeyword_0 extends KeywordToken  {
	
	public AltWhenClause_WhenKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAltWhenClauseAccess().getWhenKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// whenExpression=UnaryExpression
protected class AltWhenClause_WhenExpressionAssignment_1 extends AssignmentToken  {
	
	public AltWhenClause_WhenExpressionAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAltWhenClauseAccess().getWhenExpressionAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("whenExpression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("whenExpression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getUnaryExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAltWhenClauseAccess().getWhenExpressionUnaryExpressionParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AltWhenClause_WhenKeyword_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "then"
protected class AltWhenClause_ThenKeyword_2 extends KeywordToken  {
	
	public AltWhenClause_ThenKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAltWhenClauseAccess().getThenKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AltWhenClause_WhenExpressionAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// thenExpression=UnaryExpression
protected class AltWhenClause_ThenExpressionAssignment_3 extends AssignmentToken  {
	
	public AltWhenClause_ThenExpressionAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAltWhenClauseAccess().getThenExpressionAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UnaryExpression_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("thenExpression",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("thenExpression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getUnaryExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAltWhenClauseAccess().getThenExpressionUnaryExpressionParserRuleCall_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AltWhenClause_ThenKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule AltWhenClause ****************/


/************ begin Rule CollectionFunction ****************
 *
 * CollectionFunction:
 * 	function=("elements" | "indices") "(" property=PropertyValue ")";
 *
 **/

// function=("elements" | "indices") "(" property=PropertyValue ")"
protected class CollectionFunction_Group extends GroupToken {
	
	public CollectionFunction_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCollectionFunctionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CollectionFunction_RightParenthesisKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCollectionFunctionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// function=("elements" | "indices")
protected class CollectionFunction_FunctionAssignment_0 extends AssignmentToken  {
	
	public CollectionFunction_FunctionAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCollectionFunctionAccess().getFunctionAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("function",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("function");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCollectionFunctionAccess().getFunctionElementsKeyword_0_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCollectionFunctionAccess().getFunctionElementsKeyword_0_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCollectionFunctionAccess().getFunctionIndicesKeyword_0_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCollectionFunctionAccess().getFunctionIndicesKeyword_0_0_1();
			return obj;
		}
		return null;
	}

}

// "("
protected class CollectionFunction_LeftParenthesisKeyword_1 extends KeywordToken  {
	
	public CollectionFunction_LeftParenthesisKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCollectionFunctionAccess().getLeftParenthesisKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CollectionFunction_FunctionAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// property=PropertyValue
protected class CollectionFunction_PropertyAssignment_2 extends AssignmentToken  {
	
	public CollectionFunction_PropertyAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCollectionFunctionAccess().getPropertyAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyValue_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("property",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("property");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyValueRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCollectionFunctionAccess().getPropertyPropertyValueParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CollectionFunction_LeftParenthesisKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ")"
protected class CollectionFunction_RightParenthesisKeyword_3 extends KeywordToken  {
	
	public CollectionFunction_RightParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCollectionFunctionAccess().getRightParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CollectionFunction_PropertyAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule CollectionFunction ****************/


/************ begin Rule SubQuery ****************
 *
 * SubQuery:
 * 	"(" queries+=SelectStatement ("union" queries+=SelectStatement)* ")";
 *
 **/

// "(" queries+=SelectStatement ("union" queries+=SelectStatement)* ")"
protected class SubQuery_Group extends GroupToken {
	
	public SubQuery_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSubQueryAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubQuery_RightParenthesisKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSubQueryRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "("
protected class SubQuery_LeftParenthesisKeyword_0 extends KeywordToken  {
	
	public SubQuery_LeftParenthesisKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSubQueryAccess().getLeftParenthesisKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// queries+=SelectStatement
protected class SubQuery_QueriesAssignment_1 extends AssignmentToken  {
	
	public SubQuery_QueriesAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSubQueryAccess().getQueriesAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("queries",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("queries");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSelectStatementRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSubQueryAccess().getQueriesSelectStatementParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SubQuery_LeftParenthesisKeyword_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("union" queries+=SelectStatement)*
protected class SubQuery_Group_2 extends GroupToken {
	
	public SubQuery_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSubQueryAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubQuery_QueriesAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "union"
protected class SubQuery_UnionKeyword_2_0 extends KeywordToken  {
	
	public SubQuery_UnionKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSubQueryAccess().getUnionKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubQuery_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SubQuery_QueriesAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// queries+=SelectStatement
protected class SubQuery_QueriesAssignment_2_1 extends AssignmentToken  {
	
	public SubQuery_QueriesAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSubQueryAccess().getQueriesAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SelectStatement_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("queries",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("queries");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSelectStatementRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSubQueryAccess().getQueriesSelectStatementParserRuleCall_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SubQuery_UnionKeyword_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ")"
protected class SubQuery_RightParenthesisKeyword_3 extends KeywordToken  {
	
	public SubQuery_RightParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSubQueryAccess().getRightParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubQuery_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SubQuery_QueriesAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule SubQuery ****************/


/************ begin Rule ParenthesizedExpression ****************
 *
 * ParenthesizedExpression:
 * 	"(" expressions+=Expression ("," expressions+=Expression)* ")";
 *
 **/

// "(" expressions+=Expression ("," expressions+=Expression)* ")"
protected class ParenthesizedExpression_Group extends GroupToken {
	
	public ParenthesizedExpression_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getParenthesizedExpressionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParenthesizedExpression_RightParenthesisKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParenthesizedExpressionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "("
protected class ParenthesizedExpression_LeftParenthesisKeyword_0 extends KeywordToken  {
	
	public ParenthesizedExpression_LeftParenthesisKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getParenthesizedExpressionAccess().getLeftParenthesisKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// expressions+=Expression
protected class ParenthesizedExpression_ExpressionsAssignment_1 extends AssignmentToken  {
	
	public ParenthesizedExpression_ExpressionsAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParenthesizedExpressionAccess().getExpressionsAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expressions",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expressions");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getParenthesizedExpressionAccess().getExpressionsExpressionParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ParenthesizedExpression_LeftParenthesisKeyword_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," expressions+=Expression)*
protected class ParenthesizedExpression_Group_2 extends GroupToken {
	
	public ParenthesizedExpression_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getParenthesizedExpressionAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParenthesizedExpression_ExpressionsAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class ParenthesizedExpression_CommaKeyword_2_0 extends KeywordToken  {
	
	public ParenthesizedExpression_CommaKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getParenthesizedExpressionAccess().getCommaKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParenthesizedExpression_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ParenthesizedExpression_ExpressionsAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// expressions+=Expression
protected class ParenthesizedExpression_ExpressionsAssignment_2_1 extends AssignmentToken  {
	
	public ParenthesizedExpression_ExpressionsAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParenthesizedExpressionAccess().getExpressionsAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Expression_LogicalOrExpressionParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expressions",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expressions");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getParenthesizedExpressionAccess().getExpressionsExpressionParserRuleCall_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ParenthesizedExpression_CommaKeyword_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ")"
protected class ParenthesizedExpression_RightParenthesisKeyword_3 extends KeywordToken  {
	
	public ParenthesizedExpression_RightParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getParenthesizedExpressionAccess().getRightParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParenthesizedExpression_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ParenthesizedExpression_ExpressionsAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule ParenthesizedExpression ****************/


/************ begin Rule LiteralValue ****************
 *
 * LiteralValue:
 * 	BooleanLiteralValue | RealLiteralValue | IntegerLiteralValue | NullLiteralValue | EmptyLiteralValue |
 * 	StringLiteralValue;
 *
 **/

// BooleanLiteralValue | RealLiteralValue | IntegerLiteralValue | NullLiteralValue | EmptyLiteralValue | StringLiteralValue
protected class LiteralValue_Alternatives extends AlternativesToken {

	public LiteralValue_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getLiteralValueAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LiteralValue_BooleanLiteralValueParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new LiteralValue_RealLiteralValueParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new LiteralValue_IntegerLiteralValueParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new LiteralValue_NullLiteralValueParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new LiteralValue_EmptyLiteralValueParserRuleCall_4(lastRuleCallOrigin, this, 4, inst);
			case 5: return new LiteralValue_StringLiteralValueParserRuleCall_5(lastRuleCallOrigin, this, 5, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// BooleanLiteralValue
protected class LiteralValue_BooleanLiteralValueParserRuleCall_0 extends RuleCallToken {
	
	public LiteralValue_BooleanLiteralValueParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLiteralValueAccess().getBooleanLiteralValueParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new BooleanLiteralValue_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier())
			return null;
		if(checkForRecursion(BooleanLiteralValue_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// RealLiteralValue
protected class LiteralValue_RealLiteralValueParserRuleCall_1 extends RuleCallToken {
	
	public LiteralValue_RealLiteralValueParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLiteralValueAccess().getRealLiteralValueParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RealLiteralValue_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(RealLiteralValue_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// IntegerLiteralValue
protected class LiteralValue_IntegerLiteralValueParserRuleCall_2 extends RuleCallToken {
	
	public LiteralValue_IntegerLiteralValueParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLiteralValueAccess().getIntegerLiteralValueParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IntegerLiteralValue_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(IntegerLiteralValue_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// NullLiteralValue
protected class LiteralValue_NullLiteralValueParserRuleCall_3 extends RuleCallToken {
	
	public LiteralValue_NullLiteralValueParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLiteralValueAccess().getNullLiteralValueParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new NullLiteralValue_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(NullLiteralValue_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// EmptyLiteralValue
protected class LiteralValue_EmptyLiteralValueParserRuleCall_4 extends RuleCallToken {
	
	public LiteralValue_EmptyLiteralValueParserRuleCall_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLiteralValueAccess().getEmptyLiteralValueParserRuleCall_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EmptyLiteralValue_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(EmptyLiteralValue_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// StringLiteralValue
protected class LiteralValue_StringLiteralValueParserRuleCall_5 extends RuleCallToken {
	
	public LiteralValue_StringLiteralValueParserRuleCall_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLiteralValueAccess().getStringLiteralValueParserRuleCall_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StringLiteralValue_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(StringLiteralValue_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule LiteralValue ****************/


/************ begin Rule StringLiteralValue ****************
 *
 * StringLiteralValue:
 * 	{StringLiteralValue} value=STRING;
 *
 **/

// {StringLiteralValue} value=STRING
protected class StringLiteralValue_Group extends GroupToken {
	
	public StringLiteralValue_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getStringLiteralValueAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StringLiteralValue_ValueAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {StringLiteralValue}
protected class StringLiteralValue_StringLiteralValueAction_0 extends ActionToken  {

	public StringLiteralValue_StringLiteralValueAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getStringLiteralValueAccess().getStringLiteralValueAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// value=STRING
protected class StringLiteralValue_ValueAssignment_1 extends AssignmentToken  {
	
	public StringLiteralValue_ValueAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getStringLiteralValueAccess().getValueAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StringLiteralValue_StringLiteralValueAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("value",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("value");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getStringLiteralValueAccess().getValueSTRINGTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getStringLiteralValueAccess().getValueSTRINGTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule StringLiteralValue ****************/


/************ begin Rule IntegerLiteralValue ****************
 *
 * IntegerLiteralValue:
 * 	{IntegerLiteralValue} value=IntValue;
 *
 **/

// {IntegerLiteralValue} value=IntValue
protected class IntegerLiteralValue_Group extends GroupToken {
	
	public IntegerLiteralValue_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getIntegerLiteralValueAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IntegerLiteralValue_ValueAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {IntegerLiteralValue}
protected class IntegerLiteralValue_IntegerLiteralValueAction_0 extends ActionToken  {

	public IntegerLiteralValue_IntegerLiteralValueAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getIntegerLiteralValueAccess().getIntegerLiteralValueAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// value=IntValue
protected class IntegerLiteralValue_ValueAssignment_1 extends AssignmentToken  {
	
	public IntegerLiteralValue_ValueAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getIntegerLiteralValueAccess().getValueAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IntegerLiteralValue_IntegerLiteralValueAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("value",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("value");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getIntegerLiteralValueAccess().getValueIntValueParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getIntegerLiteralValueAccess().getValueIntValueParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule IntegerLiteralValue ****************/


/************ begin Rule RealLiteralValue ****************
 *
 * RealLiteralValue:
 * 	{RealLiteralValue} value=RealValue;
 *
 **/

// {RealLiteralValue} value=RealValue
protected class RealLiteralValue_Group extends GroupToken {
	
	public RealLiteralValue_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRealLiteralValueAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RealLiteralValue_ValueAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {RealLiteralValue}
protected class RealLiteralValue_RealLiteralValueAction_0 extends ActionToken  {

	public RealLiteralValue_RealLiteralValueAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getRealLiteralValueAccess().getRealLiteralValueAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// value=RealValue
protected class RealLiteralValue_ValueAssignment_1 extends AssignmentToken  {
	
	public RealLiteralValue_ValueAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRealLiteralValueAccess().getValueAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RealLiteralValue_RealLiteralValueAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("value",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("value");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getRealLiteralValueAccess().getValueRealValueParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getRealLiteralValueAccess().getValueRealValueParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule RealLiteralValue ****************/


/************ begin Rule BooleanLiteralValue ****************
 *
 * BooleanLiteralValue:
 * 	{BooleanLiteralValue} "false" | isTrue?="true";
 *
 **/

// {BooleanLiteralValue} "false" | isTrue?="true"
protected class BooleanLiteralValue_Alternatives extends AlternativesToken {

	public BooleanLiteralValue_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getBooleanLiteralValueAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new BooleanLiteralValue_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new BooleanLiteralValue_IsTrueAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getBooleanLiteralValueRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {BooleanLiteralValue} "false"
protected class BooleanLiteralValue_Group_0 extends GroupToken {
	
	public BooleanLiteralValue_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getBooleanLiteralValueAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new BooleanLiteralValue_FalseKeyword_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// {BooleanLiteralValue}
protected class BooleanLiteralValue_BooleanLiteralValueAction_0_0 extends ActionToken  {

	public BooleanLiteralValue_BooleanLiteralValueAction_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getBooleanLiteralValueAccess().getBooleanLiteralValueAction_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// "false"
protected class BooleanLiteralValue_FalseKeyword_0_1 extends KeywordToken  {
	
	public BooleanLiteralValue_FalseKeyword_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getBooleanLiteralValueAccess().getFalseKeyword_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new BooleanLiteralValue_BooleanLiteralValueAction_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


// isTrue?="true"
protected class BooleanLiteralValue_IsTrueAssignment_1 extends AssignmentToken  {
	
	public BooleanLiteralValue_IsTrueAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getBooleanLiteralValueAccess().getIsTrueAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("isTrue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("isTrue");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getBooleanLiteralValueAccess().getIsTrueTrueKeyword_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule BooleanLiteralValue ****************/


/************ begin Rule NullLiteralValue ****************
 *
 * NullLiteralValue:
 * 	{NullLiteralValue} "null";
 *
 **/

// {NullLiteralValue} "null"
protected class NullLiteralValue_Group extends GroupToken {
	
	public NullLiteralValue_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getNullLiteralValueAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new NullLiteralValue_NullKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {NullLiteralValue}
protected class NullLiteralValue_NullLiteralValueAction_0 extends ActionToken  {

	public NullLiteralValue_NullLiteralValueAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getNullLiteralValueAccess().getNullLiteralValueAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// "null"
protected class NullLiteralValue_NullKeyword_1 extends KeywordToken  {
	
	public NullLiteralValue_NullKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getNullLiteralValueAccess().getNullKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new NullLiteralValue_NullLiteralValueAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule NullLiteralValue ****************/


/************ begin Rule EmptyLiteralValue ****************
 *
 * EmptyLiteralValue:
 * 	{EmptyLiteralValue} "empty";
 *
 **/

// {EmptyLiteralValue} "empty"
protected class EmptyLiteralValue_Group extends GroupToken {
	
	public EmptyLiteralValue_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEmptyLiteralValueAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EmptyLiteralValue_EmptyKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {EmptyLiteralValue}
protected class EmptyLiteralValue_EmptyLiteralValueAction_0 extends ActionToken  {

	public EmptyLiteralValue_EmptyLiteralValueAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getEmptyLiteralValueAccess().getEmptyLiteralValueAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// "empty"
protected class EmptyLiteralValue_EmptyKeyword_1 extends KeywordToken  {
	
	public EmptyLiteralValue_EmptyKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEmptyLiteralValueAccess().getEmptyKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EmptyLiteralValue_EmptyLiteralValueAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule EmptyLiteralValue ****************/









/************ begin Rule IElementWithNoName ****************
 *
 * // Dummy to avoid name be pulled up
 * IElementWithNoName:
 * 	noName=ID;
 *
 **/

// noName=ID
protected class IElementWithNoName_NoNameAssignment extends AssignmentToken  {
	
	public IElementWithNoName_NoNameAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getIElementWithNoNameAccess().getNoNameAssignment();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getIElementWithNoNameRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("noName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("noName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getIElementWithNoNameAccess().getNoNameIDTerminalRuleCall_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getIElementWithNoNameAccess().getNoNameIDTerminalRuleCall_0();
			return obj;
		}
		return null;
	}

}

/************ end Rule IElementWithNoName ****************/


/************ begin Rule PresentableFeature ****************
 *
 * PresentableFeature:
 * 	(FeatureReference | Attribute) name=ID?;
 *
 **/

// (FeatureReference | Attribute) name=ID?
protected class PresentableFeature_Group extends GroupToken {
	
	public PresentableFeature_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPresentableFeatureAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PresentableFeature_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PresentableFeature_Alternatives_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeAccess().getAttributeAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFeatureReferenceRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// FeatureReference | Attribute
protected class PresentableFeature_Alternatives_0 extends AlternativesToken {

	public PresentableFeature_Alternatives_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getPresentableFeatureAccess().getAlternatives_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PresentableFeature_FeatureReferenceParserRuleCall_0_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PresentableFeature_AttributeParserRuleCall_0_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// FeatureReference
protected class PresentableFeature_FeatureReferenceParserRuleCall_0_0 extends RuleCallToken {
	
	public PresentableFeature_FeatureReferenceParserRuleCall_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPresentableFeatureAccess().getFeatureReferenceParserRuleCall_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FeatureReference_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFeatureReferenceRule().getType().getClassifier())
			return null;
		if(checkForRecursion(FeatureReference_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Attribute
protected class PresentableFeature_AttributeParserRuleCall_0_1 extends RuleCallToken {
	
	public PresentableFeature_AttributeParserRuleCall_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getPresentableFeatureAccess().getAttributeParserRuleCall_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Attribute_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeAccess().getAttributeAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(Attribute_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


// name=ID?
protected class PresentableFeature_NameAssignment_1 extends AssignmentToken  {
	
	public PresentableFeature_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPresentableFeatureAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PresentableFeature_Alternatives_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPresentableFeatureAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getPresentableFeatureAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule PresentableFeature ****************/


/************ begin Rule Import ****************
 *
 * Import:
 * 	"import" importURI=STRING | "import" importedNamespace=QualifiedNameWithWildCard;
 *
 **/

// "import" importURI=STRING | "import" importedNamespace=QualifiedNameWithWildCard
protected class Import_Alternatives extends AlternativesToken {

	public Import_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getImportAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Import_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Import_Group_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getImportRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "import" importURI=STRING
protected class Import_Group_0 extends GroupToken {
	
	public Import_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getImportAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Import_ImportURIAssignment_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "import"
protected class Import_ImportKeyword_0_0 extends KeywordToken  {
	
	public Import_ImportKeyword_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getImportAccess().getImportKeyword_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// importURI=STRING
protected class Import_ImportURIAssignment_0_1 extends AssignmentToken  {
	
	public Import_ImportURIAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getImportAccess().getImportURIAssignment_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Import_ImportKeyword_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("importURI",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("importURI");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_0_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_0_1_0();
			return obj;
		}
		return null;
	}

}


// "import" importedNamespace=QualifiedNameWithWildCard
protected class Import_Group_1 extends GroupToken {
	
	public Import_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getImportAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Import_ImportedNamespaceAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "import"
protected class Import_ImportKeyword_1_0 extends KeywordToken  {
	
	public Import_ImportKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getImportAccess().getImportKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// importedNamespace=QualifiedNameWithWildCard
protected class Import_ImportedNamespaceAssignment_1_1 extends AssignmentToken  {
	
	public Import_ImportedNamespaceAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getImportAccess().getImportedNamespaceAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Import_ImportKeyword_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("importedNamespace",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("importedNamespace");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getImportAccess().getImportedNamespaceQualifiedNameWithWildCardParserRuleCall_1_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getImportAccess().getImportedNamespaceQualifiedNameWithWildCardParserRuleCall_1_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule Import ****************/


/************ begin Rule SimpleType ****************
 *
 * SimpleType:
 * 	custom?="domain"? "type" name=ID ("(" typeParameter+=ParameterDefinition ("," typeParameter+=ParameterDefinition)*
 * 	")")? ("validation" validatorReference=ValidatorReference)? ("editor" editor=[Editor|QualifiedName])?
 * 	typeDefinition=TypeDefinition | EnumType;
 *
 **/

// custom?="domain"? "type" name=ID ("(" typeParameter+=ParameterDefinition ("," typeParameter+=ParameterDefinition)* ")")?
// ("validation" validatorReference=ValidatorReference)? ("editor" editor=[Editor|QualifiedName])?
// typeDefinition=TypeDefinition | EnumType
protected class SimpleType_Alternatives extends AlternativesToken {

	public SimpleType_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SimpleType_EnumTypeParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEnumTypeRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSimpleTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// custom?="domain"? "type" name=ID ("(" typeParameter+=ParameterDefinition ("," typeParameter+=ParameterDefinition)* ")")?
// ("validation" validatorReference=ValidatorReference)? ("editor" editor=[Editor|QualifiedName])?
// typeDefinition=TypeDefinition
protected class SimpleType_Group_0 extends GroupToken {
	
	public SimpleType_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_TypeDefinitionAssignment_0_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSimpleTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// custom?="domain"?
protected class SimpleType_CustomAssignment_0_0 extends AssignmentToken  {
	
	public SimpleType_CustomAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getCustomAssignment_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("custom",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("custom");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSimpleTypeAccess().getCustomDomainKeyword_0_0_0();
			return obj;
		}
		return null;
	}

}

// "type"
protected class SimpleType_TypeKeyword_0_1 extends KeywordToken  {
	
	public SimpleType_TypeKeyword_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getTypeKeyword_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_CustomAssignment_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

}

// name=ID
protected class SimpleType_NameAssignment_0_2 extends AssignmentToken  {
	
	public SimpleType_NameAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getNameAssignment_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_TypeKeyword_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSimpleTypeAccess().getNameIDTerminalRuleCall_0_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSimpleTypeAccess().getNameIDTerminalRuleCall_0_2_0();
			return obj;
		}
		return null;
	}

}

// ("(" typeParameter+=ParameterDefinition ("," typeParameter+=ParameterDefinition)* ")")?
protected class SimpleType_Group_0_3 extends GroupToken {
	
	public SimpleType_Group_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getGroup_0_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_RightParenthesisKeyword_0_3_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class SimpleType_LeftParenthesisKeyword_0_3_0 extends KeywordToken  {
	
	public SimpleType_LeftParenthesisKeyword_0_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getLeftParenthesisKeyword_0_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_NameAssignment_0_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// typeParameter+=ParameterDefinition
protected class SimpleType_TypeParameterAssignment_0_3_1 extends AssignmentToken  {
	
	public SimpleType_TypeParameterAssignment_0_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getTypeParameterAssignment_0_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("typeParameter",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("typeParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSimpleTypeAccess().getTypeParameterParameterDefinitionParserRuleCall_0_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SimpleType_LeftParenthesisKeyword_0_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," typeParameter+=ParameterDefinition)*
protected class SimpleType_Group_0_3_2 extends GroupToken {
	
	public SimpleType_Group_0_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getGroup_0_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_TypeParameterAssignment_0_3_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class SimpleType_CommaKeyword_0_3_2_0 extends KeywordToken  {
	
	public SimpleType_CommaKeyword_0_3_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getCommaKeyword_0_3_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_Group_0_3_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SimpleType_TypeParameterAssignment_0_3_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// typeParameter+=ParameterDefinition
protected class SimpleType_TypeParameterAssignment_0_3_2_1 extends AssignmentToken  {
	
	public SimpleType_TypeParameterAssignment_0_3_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getTypeParameterAssignment_0_3_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("typeParameter",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("typeParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSimpleTypeAccess().getTypeParameterParameterDefinitionParserRuleCall_0_3_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SimpleType_CommaKeyword_0_3_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ")"
protected class SimpleType_RightParenthesisKeyword_0_3_3 extends KeywordToken  {
	
	public SimpleType_RightParenthesisKeyword_0_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getRightParenthesisKeyword_0_3_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_Group_0_3_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SimpleType_TypeParameterAssignment_0_3_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


// ("validation" validatorReference=ValidatorReference)?
protected class SimpleType_Group_0_4 extends GroupToken {
	
	public SimpleType_Group_0_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getGroup_0_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_ValidatorReferenceAssignment_0_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "validation"
protected class SimpleType_ValidationKeyword_0_4_0 extends KeywordToken  {
	
	public SimpleType_ValidationKeyword_0_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getValidationKeyword_0_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_Group_0_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SimpleType_NameAssignment_0_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// validatorReference=ValidatorReference
protected class SimpleType_ValidatorReferenceAssignment_0_4_1 extends AssignmentToken  {
	
	public SimpleType_ValidatorReferenceAssignment_0_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getValidatorReferenceAssignment_0_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("validatorReference",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("validatorReference");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getValidatorReferenceRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSimpleTypeAccess().getValidatorReferenceValidatorReferenceParserRuleCall_0_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SimpleType_ValidationKeyword_0_4_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ("editor" editor=[Editor|QualifiedName])?
protected class SimpleType_Group_0_5 extends GroupToken {
	
	public SimpleType_Group_0_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getGroup_0_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_EditorAssignment_0_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "editor"
protected class SimpleType_EditorKeyword_0_5_0 extends KeywordToken  {
	
	public SimpleType_EditorKeyword_0_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getEditorKeyword_0_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_Group_0_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SimpleType_Group_0_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new SimpleType_NameAssignment_0_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// editor=[Editor|QualifiedName]
protected class SimpleType_EditorAssignment_0_5_1 extends AssignmentToken  {
	
	public SimpleType_EditorAssignment_0_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getEditorAssignment_0_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SimpleType_EditorKeyword_0_5_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("editor",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("editor");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSimpleTypeAccess().getEditorEditorCrossReference_0_5_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getSimpleTypeAccess().getEditorEditorCrossReference_0_5_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


// typeDefinition=TypeDefinition
protected class SimpleType_TypeDefinitionAssignment_0_6 extends AssignmentToken  {
	
	public SimpleType_TypeDefinitionAssignment_0_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getTypeDefinitionAssignment_0_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TypeDefinition_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("typeDefinition",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("typeDefinition");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getTypeDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSimpleTypeAccess().getTypeDefinitionTypeDefinitionParserRuleCall_0_6_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SimpleType_Group_0_5(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new SimpleType_Group_0_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new SimpleType_Group_0_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new SimpleType_NameAssignment_0_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// EnumType
protected class SimpleType_EnumTypeParserRuleCall_1 extends RuleCallToken {
	
	public SimpleType_EnumTypeParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getEnumTypeParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumType_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEnumTypeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(EnumType_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule SimpleType ****************/


/************ begin Rule SqlType ****************
 *
 * SqlType:
 * 	"sqltype" name=ID ("ddl" "=" ddl=STRING)?;
 *
 **/

// "sqltype" name=ID ("ddl" "=" ddl=STRING)?
protected class SqlType_Group extends GroupToken {
	
	public SqlType_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlTypeAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlType_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlType_NameAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "sqltype"
protected class SqlType_SqltypeKeyword_0 extends KeywordToken  {
	
	public SqlType_SqltypeKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlTypeAccess().getSqltypeKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class SqlType_NameAssignment_1 extends AssignmentToken  {
	
	public SqlType_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlTypeAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlType_SqltypeKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSqlTypeAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSqlTypeAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("ddl" "=" ddl=STRING)?
protected class SqlType_Group_2 extends GroupToken {
	
	public SqlType_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlTypeAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlType_DdlAssignment_2_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "ddl"
protected class SqlType_DdlKeyword_2_0 extends KeywordToken  {
	
	public SqlType_DdlKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlTypeAccess().getDdlKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlType_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "="
protected class SqlType_EqualsSignKeyword_2_1 extends KeywordToken  {
	
	public SqlType_EqualsSignKeyword_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlTypeAccess().getEqualsSignKeyword_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlType_DdlKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ddl=STRING
protected class SqlType_DdlAssignment_2_2 extends AssignmentToken  {
	
	public SqlType_DdlAssignment_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlTypeAccess().getDdlAssignment_2_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlType_EqualsSignKeyword_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("ddl",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("ddl");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSqlTypeAccess().getDdlSTRINGTerminalRuleCall_2_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSqlTypeAccess().getDdlSTRINGTerminalRuleCall_2_2_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule SqlType ****************/


/************ begin Rule EnumType ****************
 *
 * EnumType:
 * 	"enum" name=ID ("validation" validatorReference=ValidatorReference)? ("{" literals+=EnumLiteral* "}" |
 * 	typeDefinition=TypeDefinition);
 *
 **/

// "enum" name=ID ("validation" validatorReference=ValidatorReference)? ("{" literals+=EnumLiteral* "}" |
// typeDefinition=TypeDefinition)
protected class EnumType_Group extends GroupToken {
	
	public EnumType_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumType_Alternatives_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEnumTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "enum"
protected class EnumType_EnumKeyword_0 extends KeywordToken  {
	
	public EnumType_EnumKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getEnumKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class EnumType_NameAssignment_1 extends AssignmentToken  {
	
	public EnumType_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumType_EnumKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumTypeAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getEnumTypeAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("validation" validatorReference=ValidatorReference)?
protected class EnumType_Group_2 extends GroupToken {
	
	public EnumType_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumType_ValidatorReferenceAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "validation"
protected class EnumType_ValidationKeyword_2_0 extends KeywordToken  {
	
	public EnumType_ValidationKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getValidationKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumType_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// validatorReference=ValidatorReference
protected class EnumType_ValidatorReferenceAssignment_2_1 extends AssignmentToken  {
	
	public EnumType_ValidatorReferenceAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getValidatorReferenceAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("validatorReference",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("validatorReference");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getValidatorReferenceRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEnumTypeAccess().getValidatorReferenceValidatorReferenceParserRuleCall_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new EnumType_ValidationKeyword_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "{" literals+=EnumLiteral* "}" | typeDefinition=TypeDefinition
protected class EnumType_Alternatives_3 extends AlternativesToken {

	public EnumType_Alternatives_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getAlternatives_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumType_Group_3_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumType_TypeDefinitionAssignment_3_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "{" literals+=EnumLiteral* "}"
protected class EnumType_Group_3_0 extends GroupToken {
	
	public EnumType_Group_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getGroup_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumType_RightCurlyBracketKeyword_3_0_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "{"
protected class EnumType_LeftCurlyBracketKeyword_3_0_0 extends KeywordToken  {
	
	public EnumType_LeftCurlyBracketKeyword_3_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getLeftCurlyBracketKeyword_3_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumType_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumType_NameAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// literals+=EnumLiteral*
protected class EnumType_LiteralsAssignment_3_0_1 extends AssignmentToken  {
	
	public EnumType_LiteralsAssignment_3_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getLiteralsAssignment_3_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("literals",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("literals");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEnumLiteralRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEnumTypeAccess().getLiteralsEnumLiteralParserRuleCall_3_0_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new EnumType_LiteralsAssignment_3_0_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new EnumType_LeftCurlyBracketKeyword_3_0_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class EnumType_RightCurlyBracketKeyword_3_0_2 extends KeywordToken  {
	
	public EnumType_RightCurlyBracketKeyword_3_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getRightCurlyBracketKeyword_3_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumType_LiteralsAssignment_3_0_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumType_LeftCurlyBracketKeyword_3_0_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


// typeDefinition=TypeDefinition
protected class EnumType_TypeDefinitionAssignment_3_1 extends AssignmentToken  {
	
	public EnumType_TypeDefinitionAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumTypeAccess().getTypeDefinitionAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TypeDefinition_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("typeDefinition",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("typeDefinition");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getTypeDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEnumTypeAccess().getTypeDefinitionTypeDefinitionParserRuleCall_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new EnumType_Group_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new EnumType_NameAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule EnumType ****************/


/************ begin Rule EnumLiteral ****************
 *
 * EnumLiteral:
 * 	name=ID ("(" key=STRING ("," shortValue=STRING ("," longValue=STRING)?)? ")")?;
 *
 **/

// name=ID ("(" key=STRING ("," shortValue=STRING ("," longValue=STRING)?)? ")")?
protected class EnumLiteral_Group extends GroupToken {
	
	public EnumLiteral_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumLiteral_NameAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEnumLiteralRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name=ID
protected class EnumLiteral_NameAssignment_0 extends AssignmentToken  {
	
	public EnumLiteral_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumLiteralAccess().getNameIDTerminalRuleCall_0_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getEnumLiteralAccess().getNameIDTerminalRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// ("(" key=STRING ("," shortValue=STRING ("," longValue=STRING)?)? ")")?
protected class EnumLiteral_Group_1 extends GroupToken {
	
	public EnumLiteral_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_RightParenthesisKeyword_1_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class EnumLiteral_LeftParenthesisKeyword_1_0 extends KeywordToken  {
	
	public EnumLiteral_LeftParenthesisKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getLeftParenthesisKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_NameAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// key=STRING
protected class EnumLiteral_KeyAssignment_1_1 extends AssignmentToken  {
	
	public EnumLiteral_KeyAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getKeyAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_LeftParenthesisKeyword_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("key",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("key");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumLiteralAccess().getKeySTRINGTerminalRuleCall_1_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getEnumLiteralAccess().getKeySTRINGTerminalRuleCall_1_1_0();
			return obj;
		}
		return null;
	}

}

// ("," shortValue=STRING ("," longValue=STRING)?)?
protected class EnumLiteral_Group_1_2 extends GroupToken {
	
	public EnumLiteral_Group_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getGroup_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_Group_1_2_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumLiteral_ShortValueAssignment_1_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// ","
protected class EnumLiteral_CommaKeyword_1_2_0 extends KeywordToken  {
	
	public EnumLiteral_CommaKeyword_1_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getCommaKeyword_1_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_KeyAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// shortValue=STRING
protected class EnumLiteral_ShortValueAssignment_1_2_1 extends AssignmentToken  {
	
	public EnumLiteral_ShortValueAssignment_1_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getShortValueAssignment_1_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_CommaKeyword_1_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("shortValue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("shortValue");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumLiteralAccess().getShortValueSTRINGTerminalRuleCall_1_2_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getEnumLiteralAccess().getShortValueSTRINGTerminalRuleCall_1_2_1_0();
			return obj;
		}
		return null;
	}

}

// ("," longValue=STRING)?
protected class EnumLiteral_Group_1_2_2 extends GroupToken {
	
	public EnumLiteral_Group_1_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getGroup_1_2_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_LongValueAssignment_1_2_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class EnumLiteral_CommaKeyword_1_2_2_0 extends KeywordToken  {
	
	public EnumLiteral_CommaKeyword_1_2_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getCommaKeyword_1_2_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_ShortValueAssignment_1_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// longValue=STRING
protected class EnumLiteral_LongValueAssignment_1_2_2_1 extends AssignmentToken  {
	
	public EnumLiteral_LongValueAssignment_1_2_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getLongValueAssignment_1_2_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_CommaKeyword_1_2_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("longValue",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("longValue");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumLiteralAccess().getLongValueSTRINGTerminalRuleCall_1_2_2_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getEnumLiteralAccess().getLongValueSTRINGTerminalRuleCall_1_2_2_1_0();
			return obj;
		}
		return null;
	}

}



// ")"
protected class EnumLiteral_RightParenthesisKeyword_1_3 extends KeywordToken  {
	
	public EnumLiteral_RightParenthesisKeyword_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralAccess().getRightParenthesisKeyword_1_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteral_Group_1_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumLiteral_KeyAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule EnumLiteral ****************/


/************ begin Rule ParameterDefinition ****************
 *
 * ParameterDefinition:
 * 	type=ParameterDefinitionType name=ID ("=" (defaultInteger=INT | defaultString=STRING | defaultBoolean=BooleanValue))?;
 *
 **/

// type=ParameterDefinitionType name=ID ("=" (defaultInteger=INT | defaultString=STRING | defaultBoolean=BooleanValue))?
protected class ParameterDefinition_Group extends GroupToken {
	
	public ParameterDefinition_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getParameterDefinitionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ParameterDefinition_NameAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParameterDefinitionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// type=ParameterDefinitionType
protected class ParameterDefinition_TypeAssignment_0 extends AssignmentToken  {
	
	public ParameterDefinition_TypeAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParameterDefinitionAccess().getTypeAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getParameterDefinitionAccess().getTypeParameterDefinitionTypeEnumRuleCall_0_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getParameterDefinitionAccess().getTypeParameterDefinitionTypeEnumRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// name=ID
protected class ParameterDefinition_NameAssignment_1 extends AssignmentToken  {
	
	public ParameterDefinition_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParameterDefinitionAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_TypeAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getParameterDefinitionAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getParameterDefinitionAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("=" (defaultInteger=INT | defaultString=STRING | defaultBoolean=BooleanValue))?
protected class ParameterDefinition_Group_2 extends GroupToken {
	
	public ParameterDefinition_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getParameterDefinitionAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_Alternatives_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "="
protected class ParameterDefinition_EqualsSignKeyword_2_0 extends KeywordToken  {
	
	public ParameterDefinition_EqualsSignKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getParameterDefinitionAccess().getEqualsSignKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// defaultInteger=INT | defaultString=STRING | defaultBoolean=BooleanValue
protected class ParameterDefinition_Alternatives_2_1 extends AlternativesToken {

	public ParameterDefinition_Alternatives_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getParameterDefinitionAccess().getAlternatives_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_DefaultIntegerAssignment_2_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ParameterDefinition_DefaultStringAssignment_2_1_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ParameterDefinition_DefaultBooleanAssignment_2_1_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// defaultInteger=INT
protected class ParameterDefinition_DefaultIntegerAssignment_2_1_0 extends AssignmentToken  {
	
	public ParameterDefinition_DefaultIntegerAssignment_2_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParameterDefinitionAccess().getDefaultIntegerAssignment_2_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_EqualsSignKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("defaultInteger",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("defaultInteger");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getParameterDefinitionAccess().getDefaultIntegerINTTerminalRuleCall_2_1_0_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getParameterDefinitionAccess().getDefaultIntegerINTTerminalRuleCall_2_1_0_0();
			return obj;
		}
		return null;
	}

}

// defaultString=STRING
protected class ParameterDefinition_DefaultStringAssignment_2_1_1 extends AssignmentToken  {
	
	public ParameterDefinition_DefaultStringAssignment_2_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParameterDefinitionAccess().getDefaultStringAssignment_2_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_EqualsSignKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("defaultString",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("defaultString");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getParameterDefinitionAccess().getDefaultStringSTRINGTerminalRuleCall_2_1_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getParameterDefinitionAccess().getDefaultStringSTRINGTerminalRuleCall_2_1_1_0();
			return obj;
		}
		return null;
	}

}

// defaultBoolean=BooleanValue
protected class ParameterDefinition_DefaultBooleanAssignment_2_1_2 extends AssignmentToken  {
	
	public ParameterDefinition_DefaultBooleanAssignment_2_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParameterDefinitionAccess().getDefaultBooleanAssignment_2_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_EqualsSignKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("defaultBoolean",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("defaultBoolean");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getParameterDefinitionAccess().getDefaultBooleanBooleanValueEnumRuleCall_2_1_2_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getParameterDefinitionAccess().getDefaultBooleanBooleanValueEnumRuleCall_2_1_2_0();
			return obj;
		}
		return null;
	}

}




/************ end Rule ParameterDefinition ****************/


/************ begin Rule ReferenceWithParameter ****************
 *
 * ReferenceWithParameter:
 * 	parameterValues+=ParameterValue* | DataTypeAndTypeParameter | ValidatorReference;
 *
 **/

// parameterValues+=ParameterValue* | DataTypeAndTypeParameter | ValidatorReference
protected class ReferenceWithParameter_Alternatives extends AlternativesToken {

	public ReferenceWithParameter_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getReferenceWithParameterAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceWithParameter_ParameterValuesAssignment_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceWithParameter_DataTypeAndTypeParameterParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ReferenceWithParameter_ValidatorReferenceParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 3, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDataTypeAndTypeParameterRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getReferenceWithParameterRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getValidatorReferenceRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// parameterValues+=ParameterValue*
protected class ReferenceWithParameter_ParameterValuesAssignment_0 extends AssignmentToken  {
	
	public ReferenceWithParameter_ParameterValuesAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceWithParameterAccess().getParameterValuesAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterValue_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getReferenceWithParameterRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("parameterValues",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameterValues");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterValueRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getReferenceWithParameterAccess().getParameterValuesParameterValueParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ReferenceWithParameter_ParameterValuesAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index - 1, consumed);
		}	
	}	
}

// DataTypeAndTypeParameter
protected class ReferenceWithParameter_DataTypeAndTypeParameterParserRuleCall_1 extends RuleCallToken {
	
	public ReferenceWithParameter_DataTypeAndTypeParameterParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getReferenceWithParameterAccess().getDataTypeAndTypeParameterParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDataTypeAndTypeParameterRule().getType().getClassifier())
			return null;
		if(checkForRecursion(DataTypeAndTypeParameter_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ValidatorReference
protected class ReferenceWithParameter_ValidatorReferenceParserRuleCall_2 extends RuleCallToken {
	
	public ReferenceWithParameter_ValidatorReferenceParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getReferenceWithParameterAccess().getValidatorReferenceParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getValidatorReferenceRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ValidatorReference_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule ReferenceWithParameter ****************/


/************ begin Rule ValidatorReference ****************
 *
 * ValidatorReference:
 * 	validator=[Validator|QualifiedName] ("(" (parameterValues+=ParameterValue ("," parameterValues+=ParameterValue)*)?
 * 	")")?;
 *
 **/

// validator=[Validator|QualifiedName] ("(" (parameterValues+=ParameterValue ("," parameterValues+=ParameterValue)*)? ")")?
protected class ValidatorReference_Group extends GroupToken {
	
	public ValidatorReference_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getValidatorReferenceAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ValidatorReference_ValidatorAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getValidatorReferenceRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// validator=[Validator|QualifiedName]
protected class ValidatorReference_ValidatorAssignment_0 extends AssignmentToken  {
	
	public ValidatorReference_ValidatorAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getValidatorReferenceAccess().getValidatorAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("validator",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("validator");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getValidatorReferenceAccess().getValidatorValidatorCrossReference_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getValidatorReferenceAccess().getValidatorValidatorCrossReference_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("(" (parameterValues+=ParameterValue ("," parameterValues+=ParameterValue)*)? ")")?
protected class ValidatorReference_Group_1 extends GroupToken {
	
	public ValidatorReference_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getValidatorReferenceAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_RightParenthesisKeyword_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class ValidatorReference_LeftParenthesisKeyword_1_0 extends KeywordToken  {
	
	public ValidatorReference_LeftParenthesisKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValidatorReferenceAccess().getLeftParenthesisKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_ValidatorAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// (parameterValues+=ParameterValue ("," parameterValues+=ParameterValue)*)?
protected class ValidatorReference_Group_1_1 extends GroupToken {
	
	public ValidatorReference_Group_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getValidatorReferenceAccess().getGroup_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_Group_1_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ValidatorReference_ParameterValuesAssignment_1_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// parameterValues+=ParameterValue
protected class ValidatorReference_ParameterValuesAssignment_1_1_0 extends AssignmentToken  {
	
	public ValidatorReference_ParameterValuesAssignment_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getValidatorReferenceAccess().getParameterValuesAssignment_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterValue_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameterValues",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameterValues");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterValueRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getValidatorReferenceAccess().getParameterValuesParameterValueParserRuleCall_1_1_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ValidatorReference_LeftParenthesisKeyword_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," parameterValues+=ParameterValue)*
protected class ValidatorReference_Group_1_1_1 extends GroupToken {
	
	public ValidatorReference_Group_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getValidatorReferenceAccess().getGroup_1_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_ParameterValuesAssignment_1_1_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class ValidatorReference_CommaKeyword_1_1_1_0 extends KeywordToken  {
	
	public ValidatorReference_CommaKeyword_1_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValidatorReferenceAccess().getCommaKeyword_1_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_Group_1_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ValidatorReference_ParameterValuesAssignment_1_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// parameterValues+=ParameterValue
protected class ValidatorReference_ParameterValuesAssignment_1_1_1_1 extends AssignmentToken  {
	
	public ValidatorReference_ParameterValuesAssignment_1_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getValidatorReferenceAccess().getParameterValuesAssignment_1_1_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterValue_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameterValues",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameterValues");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterValueRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getValidatorReferenceAccess().getParameterValuesParameterValueParserRuleCall_1_1_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ValidatorReference_CommaKeyword_1_1_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



// ")"
protected class ValidatorReference_RightParenthesisKeyword_1_2 extends KeywordToken  {
	
	public ValidatorReference_RightParenthesisKeyword_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValidatorReferenceAccess().getRightParenthesisKeyword_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_Group_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule ValidatorReference ****************/


/************ begin Rule Validator ****************
 *
 * Validator:
 * 	"validator" ("<" valueModelType=ValueModelType ">")? name=ID ("(" validatorParameter+=ParameterDefinition (","
 * 	validatorParameter+=ParameterDefinition)* ")")? ("redefines" superValidator=ValidatorReference)? ("instanceclass"
 * 	instanceClass=QualifiedName)?;
 *
 **/

// "validator" ("<" valueModelType=ValueModelType ">")? name=ID ("(" validatorParameter+=ParameterDefinition (","
// validatorParameter+=ParameterDefinition)* ")")? ("redefines" superValidator=ValidatorReference)? ("instanceclass"
// instanceClass=QualifiedName)?
protected class Validator_Group extends GroupToken {
	
	public Validator_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getValidatorAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Validator_Group_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Validator_Group_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Validator_NameAssignment_2(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getValidatorRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "validator"
protected class Validator_ValidatorKeyword_0 extends KeywordToken  {
	
	public Validator_ValidatorKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValidatorAccess().getValidatorKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// ("<" valueModelType=ValueModelType ">")?
protected class Validator_Group_1 extends GroupToken {
	
	public Validator_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getValidatorAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_GreaterThanSignKeyword_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "<"
protected class Validator_LessThanSignKeyword_1_0 extends KeywordToken  {
	
	public Validator_LessThanSignKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValidatorAccess().getLessThanSignKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_ValidatorKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// valueModelType=ValueModelType
protected class Validator_ValueModelTypeAssignment_1_1 extends AssignmentToken  {
	
	public Validator_ValueModelTypeAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getValidatorAccess().getValueModelTypeAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_LessThanSignKeyword_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("valueModelType",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("valueModelType");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getValidatorAccess().getValueModelTypeValueModelTypeEnumRuleCall_1_1_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getValidatorAccess().getValueModelTypeValueModelTypeEnumRuleCall_1_1_0();
			return obj;
		}
		return null;
	}

}

// ">"
protected class Validator_GreaterThanSignKeyword_1_2 extends KeywordToken  {
	
	public Validator_GreaterThanSignKeyword_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValidatorAccess().getGreaterThanSignKeyword_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_ValueModelTypeAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


// name=ID
protected class Validator_NameAssignment_2 extends AssignmentToken  {
	
	public Validator_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getValidatorAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Validator_ValidatorKeyword_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getValidatorAccess().getNameIDTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getValidatorAccess().getNameIDTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ("(" validatorParameter+=ParameterDefinition ("," validatorParameter+=ParameterDefinition)* ")")?
protected class Validator_Group_3 extends GroupToken {
	
	public Validator_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getValidatorAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_RightParenthesisKeyword_3_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class Validator_LeftParenthesisKeyword_3_0 extends KeywordToken  {
	
	public Validator_LeftParenthesisKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValidatorAccess().getLeftParenthesisKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// validatorParameter+=ParameterDefinition
protected class Validator_ValidatorParameterAssignment_3_1 extends AssignmentToken  {
	
	public Validator_ValidatorParameterAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getValidatorAccess().getValidatorParameterAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("validatorParameter",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("validatorParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getValidatorAccess().getValidatorParameterParameterDefinitionParserRuleCall_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Validator_LeftParenthesisKeyword_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," validatorParameter+=ParameterDefinition)*
protected class Validator_Group_3_2 extends GroupToken {
	
	public Validator_Group_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getValidatorAccess().getGroup_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_ValidatorParameterAssignment_3_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class Validator_CommaKeyword_3_2_0 extends KeywordToken  {
	
	public Validator_CommaKeyword_3_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValidatorAccess().getCommaKeyword_3_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_Group_3_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Validator_ValidatorParameterAssignment_3_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// validatorParameter+=ParameterDefinition
protected class Validator_ValidatorParameterAssignment_3_2_1 extends AssignmentToken  {
	
	public Validator_ValidatorParameterAssignment_3_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getValidatorAccess().getValidatorParameterAssignment_3_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("validatorParameter",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("validatorParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getValidatorAccess().getValidatorParameterParameterDefinitionParserRuleCall_3_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Validator_CommaKeyword_3_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ")"
protected class Validator_RightParenthesisKeyword_3_3 extends KeywordToken  {
	
	public Validator_RightParenthesisKeyword_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValidatorAccess().getRightParenthesisKeyword_3_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_Group_3_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Validator_ValidatorParameterAssignment_3_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


// ("redefines" superValidator=ValidatorReference)?
protected class Validator_Group_4 extends GroupToken {
	
	public Validator_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getValidatorAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_SuperValidatorAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "redefines"
protected class Validator_RedefinesKeyword_4_0 extends KeywordToken  {
	
	public Validator_RedefinesKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValidatorAccess().getRedefinesKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Validator_NameAssignment_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// superValidator=ValidatorReference
protected class Validator_SuperValidatorAssignment_4_1 extends AssignmentToken  {
	
	public Validator_SuperValidatorAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getValidatorAccess().getSuperValidatorAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("superValidator",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("superValidator");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getValidatorReferenceRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getValidatorAccess().getSuperValidatorValidatorReferenceParserRuleCall_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Validator_RedefinesKeyword_4_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ("instanceclass" instanceClass=QualifiedName)?
protected class Validator_Group_5 extends GroupToken {
	
	public Validator_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getValidatorAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_InstanceClassAssignment_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "instanceclass"
protected class Validator_InstanceclassKeyword_5_0 extends KeywordToken  {
	
	public Validator_InstanceclassKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getValidatorAccess().getInstanceclassKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Validator_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Validator_NameAssignment_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// instanceClass=QualifiedName
protected class Validator_InstanceClassAssignment_5_1 extends AssignmentToken  {
	
	public Validator_InstanceClassAssignment_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getValidatorAccess().getInstanceClassAssignment_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Validator_InstanceclassKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("instanceClass",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("instanceClass");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getValidatorAccess().getInstanceClassQualifiedNameParserRuleCall_5_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getValidatorAccess().getInstanceClassQualifiedNameParserRuleCall_5_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule Validator ****************/


/************ begin Rule Incrementer ****************
 *
 * Incrementer:
 * 	"incrementer" name=ID ("(" incrementerParameter+=ParameterDefinition ("," incrementerParameter+=ParameterDefinition)*
 * 	")")? ("instanceclass" instanceClass=QualifiedName)?;
 *
 **/

// "incrementer" name=ID ("(" incrementerParameter+=ParameterDefinition ("," incrementerParameter+=ParameterDefinition)*
// ")")? ("instanceclass" instanceClass=QualifiedName)?
protected class Incrementer_Group extends GroupToken {
	
	public Incrementer_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Incrementer_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Incrementer_Group_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Incrementer_NameAssignment_1(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getIncrementerRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "incrementer"
protected class Incrementer_IncrementerKeyword_0 extends KeywordToken  {
	
	public Incrementer_IncrementerKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getIncrementerKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class Incrementer_NameAssignment_1 extends AssignmentToken  {
	
	public Incrementer_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Incrementer_IncrementerKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getIncrementerAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getIncrementerAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("(" incrementerParameter+=ParameterDefinition ("," incrementerParameter+=ParameterDefinition)* ")")?
protected class Incrementer_Group_2 extends GroupToken {
	
	public Incrementer_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Incrementer_RightParenthesisKeyword_2_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class Incrementer_LeftParenthesisKeyword_2_0 extends KeywordToken  {
	
	public Incrementer_LeftParenthesisKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getLeftParenthesisKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Incrementer_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// incrementerParameter+=ParameterDefinition
protected class Incrementer_IncrementerParameterAssignment_2_1 extends AssignmentToken  {
	
	public Incrementer_IncrementerParameterAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getIncrementerParameterAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("incrementerParameter",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("incrementerParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getIncrementerAccess().getIncrementerParameterParameterDefinitionParserRuleCall_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Incrementer_LeftParenthesisKeyword_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," incrementerParameter+=ParameterDefinition)*
protected class Incrementer_Group_2_2 extends GroupToken {
	
	public Incrementer_Group_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getGroup_2_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Incrementer_IncrementerParameterAssignment_2_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class Incrementer_CommaKeyword_2_2_0 extends KeywordToken  {
	
	public Incrementer_CommaKeyword_2_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getCommaKeyword_2_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Incrementer_Group_2_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Incrementer_IncrementerParameterAssignment_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// incrementerParameter+=ParameterDefinition
protected class Incrementer_IncrementerParameterAssignment_2_2_1 extends AssignmentToken  {
	
	public Incrementer_IncrementerParameterAssignment_2_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getIncrementerParameterAssignment_2_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("incrementerParameter",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("incrementerParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getIncrementerAccess().getIncrementerParameterParameterDefinitionParserRuleCall_2_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Incrementer_CommaKeyword_2_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ")"
protected class Incrementer_RightParenthesisKeyword_2_3 extends KeywordToken  {
	
	public Incrementer_RightParenthesisKeyword_2_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getRightParenthesisKeyword_2_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Incrementer_Group_2_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Incrementer_IncrementerParameterAssignment_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


// ("instanceclass" instanceClass=QualifiedName)?
protected class Incrementer_Group_3 extends GroupToken {
	
	public Incrementer_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Incrementer_InstanceClassAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "instanceclass"
protected class Incrementer_InstanceclassKeyword_3_0 extends KeywordToken  {
	
	public Incrementer_InstanceclassKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getInstanceclassKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Incrementer_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Incrementer_NameAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// instanceClass=QualifiedName
protected class Incrementer_InstanceClassAssignment_3_1 extends AssignmentToken  {
	
	public Incrementer_InstanceClassAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getIncrementerAccess().getInstanceClassAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Incrementer_InstanceclassKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("instanceClass",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("instanceClass");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getIncrementerAccess().getInstanceClassQualifiedNameParserRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getIncrementerAccess().getInstanceClassQualifiedNameParserRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule Incrementer ****************/


/************ begin Rule IncrementerReference ****************
 *
 * IncrementerReference:
 * 	incrementer=[Incrementer|QualifiedName] ("(" incrementerParameter+=ParameterValue? (","
 * 	incrementerParameter+=ParameterValue)* ")")?;
 *
 **/

// incrementer=[Incrementer|QualifiedName] ("(" incrementerParameter+=ParameterValue? (","
// incrementerParameter+=ParameterValue)* ")")?
protected class IncrementerReference_Group extends GroupToken {
	
	public IncrementerReference_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getIncrementerReferenceAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IncrementerReference_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new IncrementerReference_IncrementerAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getIncrementerReferenceRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// incrementer=[Incrementer|QualifiedName]
protected class IncrementerReference_IncrementerAssignment_0 extends AssignmentToken  {
	
	public IncrementerReference_IncrementerAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getIncrementerReferenceAccess().getIncrementerAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("incrementer",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("incrementer");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getIncrementerReferenceAccess().getIncrementerIncrementerCrossReference_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getIncrementerReferenceAccess().getIncrementerIncrementerCrossReference_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("(" incrementerParameter+=ParameterValue? ("," incrementerParameter+=ParameterValue)* ")")?
protected class IncrementerReference_Group_1 extends GroupToken {
	
	public IncrementerReference_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getIncrementerReferenceAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IncrementerReference_RightParenthesisKeyword_1_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class IncrementerReference_LeftParenthesisKeyword_1_0 extends KeywordToken  {
	
	public IncrementerReference_LeftParenthesisKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getIncrementerReferenceAccess().getLeftParenthesisKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IncrementerReference_IncrementerAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// incrementerParameter+=ParameterValue?
protected class IncrementerReference_IncrementerParameterAssignment_1_1 extends AssignmentToken  {
	
	public IncrementerReference_IncrementerParameterAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getIncrementerReferenceAccess().getIncrementerParameterAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterValue_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("incrementerParameter",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("incrementerParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterValueRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getIncrementerReferenceAccess().getIncrementerParameterParameterValueParserRuleCall_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new IncrementerReference_LeftParenthesisKeyword_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," incrementerParameter+=ParameterValue)*
protected class IncrementerReference_Group_1_2 extends GroupToken {
	
	public IncrementerReference_Group_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getIncrementerReferenceAccess().getGroup_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IncrementerReference_IncrementerParameterAssignment_1_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class IncrementerReference_CommaKeyword_1_2_0 extends KeywordToken  {
	
	public IncrementerReference_CommaKeyword_1_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getIncrementerReferenceAccess().getCommaKeyword_1_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IncrementerReference_Group_1_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new IncrementerReference_IncrementerParameterAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new IncrementerReference_LeftParenthesisKeyword_1_0(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// incrementerParameter+=ParameterValue
protected class IncrementerReference_IncrementerParameterAssignment_1_2_1 extends AssignmentToken  {
	
	public IncrementerReference_IncrementerParameterAssignment_1_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getIncrementerReferenceAccess().getIncrementerParameterAssignment_1_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterValue_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("incrementerParameter",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("incrementerParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterValueRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getIncrementerReferenceAccess().getIncrementerParameterParameterValueParserRuleCall_1_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new IncrementerReference_CommaKeyword_1_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ")"
protected class IncrementerReference_RightParenthesisKeyword_1_3 extends KeywordToken  {
	
	public IncrementerReference_RightParenthesisKeyword_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getIncrementerReferenceAccess().getRightParenthesisKeyword_1_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IncrementerReference_Group_1_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new IncrementerReference_IncrementerParameterAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule IncrementerReference ****************/


/************ begin Rule Editor ****************
 *
 * Editor:
 * 	"editor" name=ID label=STRING;
 *
 **/

// "editor" name=ID label=STRING
protected class Editor_Group extends GroupToken {
	
	public Editor_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEditorAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Editor_LabelAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEditorRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "editor"
protected class Editor_EditorKeyword_0 extends KeywordToken  {
	
	public Editor_EditorKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEditorAccess().getEditorKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class Editor_NameAssignment_1 extends AssignmentToken  {
	
	public Editor_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEditorAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Editor_EditorKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEditorAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getEditorAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// label=STRING
protected class Editor_LabelAssignment_2 extends AssignmentToken  {
	
	public Editor_LabelAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEditorAccess().getLabelAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Editor_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("label",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("label");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEditorAccess().getLabelSTRINGTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getEditorAccess().getLabelSTRINGTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule Editor ****************/


/************ begin Rule Style ****************
 *
 * Style:
 * 	"style" name=ID;
 *
 **/

// "style" name=ID
protected class Style_Group extends GroupToken {
	
	public Style_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getStyleAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Style_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getStyleRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "style"
protected class Style_StyleKeyword_0 extends KeywordToken  {
	
	public Style_StyleKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getStyleAccess().getStyleKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class Style_NameAssignment_1 extends AssignmentToken  {
	
	public Style_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getStyleAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Style_StyleKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getStyleAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getStyleAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule Style ****************/


/************ begin Rule TypeDefinition ****************
 *
 * TypeDefinition:
 * 	"instancetype" instanceType=QualifiedName | "redefines" definition=DataTypeAndTypeParameter;
 *
 **/

// "instancetype" instanceType=QualifiedName | "redefines" definition=DataTypeAndTypeParameter
protected class TypeDefinition_Alternatives extends AlternativesToken {

	public TypeDefinition_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getTypeDefinitionAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TypeDefinition_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new TypeDefinition_Group_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getTypeDefinitionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "instancetype" instanceType=QualifiedName
protected class TypeDefinition_Group_0 extends GroupToken {
	
	public TypeDefinition_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getTypeDefinitionAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TypeDefinition_InstanceTypeAssignment_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "instancetype"
protected class TypeDefinition_InstancetypeKeyword_0_0 extends KeywordToken  {
	
	public TypeDefinition_InstancetypeKeyword_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTypeDefinitionAccess().getInstancetypeKeyword_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// instanceType=QualifiedName
protected class TypeDefinition_InstanceTypeAssignment_0_1 extends AssignmentToken  {
	
	public TypeDefinition_InstanceTypeAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getTypeDefinitionAccess().getInstanceTypeAssignment_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TypeDefinition_InstancetypeKeyword_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("instanceType",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("instanceType");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getTypeDefinitionAccess().getInstanceTypeQualifiedNameParserRuleCall_0_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getTypeDefinitionAccess().getInstanceTypeQualifiedNameParserRuleCall_0_1_0();
			return obj;
		}
		return null;
	}

}


// "redefines" definition=DataTypeAndTypeParameter
protected class TypeDefinition_Group_1 extends GroupToken {
	
	public TypeDefinition_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getTypeDefinitionAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TypeDefinition_DefinitionAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "redefines"
protected class TypeDefinition_RedefinesKeyword_1_0 extends KeywordToken  {
	
	public TypeDefinition_RedefinesKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTypeDefinitionAccess().getRedefinesKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// definition=DataTypeAndTypeParameter
protected class TypeDefinition_DefinitionAssignment_1_1 extends AssignmentToken  {
	
	public TypeDefinition_DefinitionAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getTypeDefinitionAccess().getDefinitionAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("definition",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("definition");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDataTypeAndTypeParameterRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getTypeDefinitionAccess().getDefinitionDataTypeAndTypeParameterParserRuleCall_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new TypeDefinition_RedefinesKeyword_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule TypeDefinition ****************/


/************ begin Rule DataTypeAndTypeParameter ****************
 *
 * DataTypeAndTypeParameter:
 * 	dataType=[Type|QualifiedName] ("(" (parameterValues+=ParameterValue ("," parameterValues+=ParameterValue)*)? ")")?;
 *
 **/

// dataType=[Type|QualifiedName] ("(" (parameterValues+=ParameterValue ("," parameterValues+=ParameterValue)*)? ")")?
protected class DataTypeAndTypeParameter_Group extends GroupToken {
	
	public DataTypeAndTypeParameter_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataTypeAndTypeParameterAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataTypeAndTypeParameter_DataTypeAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDataTypeAndTypeParameterRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// dataType=[Type|QualifiedName]
protected class DataTypeAndTypeParameter_DataTypeAssignment_0 extends AssignmentToken  {
	
	public DataTypeAndTypeParameter_DataTypeAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataTypeAndTypeParameterAccess().getDataTypeAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("dataType",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dataType");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDataTypeAndTypeParameterAccess().getDataTypeTypeCrossReference_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getDataTypeAndTypeParameterAccess().getDataTypeTypeCrossReference_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("(" (parameterValues+=ParameterValue ("," parameterValues+=ParameterValue)*)? ")")?
protected class DataTypeAndTypeParameter_Group_1 extends GroupToken {
	
	public DataTypeAndTypeParameter_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataTypeAndTypeParameterAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_RightParenthesisKeyword_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class DataTypeAndTypeParameter_LeftParenthesisKeyword_1_0 extends KeywordToken  {
	
	public DataTypeAndTypeParameter_LeftParenthesisKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataTypeAndTypeParameterAccess().getLeftParenthesisKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_DataTypeAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// (parameterValues+=ParameterValue ("," parameterValues+=ParameterValue)*)?
protected class DataTypeAndTypeParameter_Group_1_1 extends GroupToken {
	
	public DataTypeAndTypeParameter_Group_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataTypeAndTypeParameterAccess().getGroup_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_Group_1_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataTypeAndTypeParameter_ParameterValuesAssignment_1_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// parameterValues+=ParameterValue
protected class DataTypeAndTypeParameter_ParameterValuesAssignment_1_1_0 extends AssignmentToken  {
	
	public DataTypeAndTypeParameter_ParameterValuesAssignment_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataTypeAndTypeParameterAccess().getParameterValuesAssignment_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterValue_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameterValues",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameterValues");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterValueRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDataTypeAndTypeParameterAccess().getParameterValuesParameterValueParserRuleCall_1_1_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_LeftParenthesisKeyword_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," parameterValues+=ParameterValue)*
protected class DataTypeAndTypeParameter_Group_1_1_1 extends GroupToken {
	
	public DataTypeAndTypeParameter_Group_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataTypeAndTypeParameterAccess().getGroup_1_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_ParameterValuesAssignment_1_1_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class DataTypeAndTypeParameter_CommaKeyword_1_1_1_0 extends KeywordToken  {
	
	public DataTypeAndTypeParameter_CommaKeyword_1_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataTypeAndTypeParameterAccess().getCommaKeyword_1_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_Group_1_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataTypeAndTypeParameter_ParameterValuesAssignment_1_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// parameterValues+=ParameterValue
protected class DataTypeAndTypeParameter_ParameterValuesAssignment_1_1_1_1 extends AssignmentToken  {
	
	public DataTypeAndTypeParameter_ParameterValuesAssignment_1_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataTypeAndTypeParameterAccess().getParameterValuesAssignment_1_1_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterValue_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameterValues",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameterValues");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterValueRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDataTypeAndTypeParameterAccess().getParameterValuesParameterValueParserRuleCall_1_1_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_CommaKeyword_1_1_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



// ")"
protected class DataTypeAndTypeParameter_RightParenthesisKeyword_1_2 extends KeywordToken  {
	
	public DataTypeAndTypeParameter_RightParenthesisKeyword_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataTypeAndTypeParameterAccess().getRightParenthesisKeyword_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeAndTypeParameter_Group_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule DataTypeAndTypeParameter ****************/


/************ begin Rule ParameterValue ****************
 *
 * ParameterValue:
 * 	isNull?="null" | keepParentValue?="..." | IntegerParameterValue | StringParameterValue | BooleanParameterValue |
 * 	referencedParameter=[ParameterDefinition];
 *
 **/

// isNull?="null" | keepParentValue?="..." | IntegerParameterValue | StringParameterValue | BooleanParameterValue |
// referencedParameter=[ParameterDefinition]
protected class ParameterValue_Alternatives extends AlternativesToken {

	public ParameterValue_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getParameterValueAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParameterValue_IsNullAssignment_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ParameterValue_KeepParentValueAssignment_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ParameterValue_IntegerParameterValueParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ParameterValue_StringParameterValueParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new ParameterValue_BooleanParameterValueParserRuleCall_4(lastRuleCallOrigin, this, 4, inst);
			case 5: return new ParameterValue_ReferencedParameterAssignment_5(lastRuleCallOrigin, this, 5, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getBooleanParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntegerParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParameterValueRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringParameterValueRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// isNull?="null"
protected class ParameterValue_IsNullAssignment_0 extends AssignmentToken  {
	
	public ParameterValue_IsNullAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParameterValueAccess().getIsNullAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParameterValueRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("isNull",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("isNull");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getParameterValueAccess().getIsNullNullKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// keepParentValue?="..."
protected class ParameterValue_KeepParentValueAssignment_1 extends AssignmentToken  {
	
	public ParameterValue_KeepParentValueAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParameterValueAccess().getKeepParentValueAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParameterValueRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("keepParentValue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("keepParentValue");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getParameterValueAccess().getKeepParentValueFullStopFullStopFullStopKeyword_1_0();
			return obj;
		}
		return null;
	}

}

// IntegerParameterValue
protected class ParameterValue_IntegerParameterValueParserRuleCall_2 extends RuleCallToken {
	
	public ParameterValue_IntegerParameterValueParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getParameterValueAccess().getIntegerParameterValueParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IntegerParameterValue_IntValueAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getIntegerParameterValueRule().getType().getClassifier())
			return null;
		if(checkForRecursion(IntegerParameterValue_IntValueAssignment.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// StringParameterValue
protected class ParameterValue_StringParameterValueParserRuleCall_3 extends RuleCallToken {
	
	public ParameterValue_StringParameterValueParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getParameterValueAccess().getStringParameterValueParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StringParameterValue_StringValueAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getStringParameterValueRule().getType().getClassifier())
			return null;
		if(checkForRecursion(StringParameterValue_StringValueAssignment.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// BooleanParameterValue
protected class ParameterValue_BooleanParameterValueParserRuleCall_4 extends RuleCallToken {
	
	public ParameterValue_BooleanParameterValueParserRuleCall_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getParameterValueAccess().getBooleanParameterValueParserRuleCall_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new BooleanParameterValue_BooleanValueAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getBooleanParameterValueRule().getType().getClassifier())
			return null;
		if(checkForRecursion(BooleanParameterValue_BooleanValueAssignment.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// referencedParameter=[ParameterDefinition]
protected class ParameterValue_ReferencedParameterAssignment_5 extends AssignmentToken  {
	
	public ParameterValue_ReferencedParameterAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParameterValueAccess().getReferencedParameterAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParameterValueRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("referencedParameter",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("referencedParameter");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getParameterValueAccess().getReferencedParameterParameterDefinitionCrossReference_5_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getParameterValueAccess().getReferencedParameterParameterDefinitionCrossReference_5_0(); 
				return obj;
			}
		}
		return null;
	}

}


/************ end Rule ParameterValue ****************/


/************ begin Rule IntegerParameterValue ****************
 *
 * IntegerParameterValue:
 * 	intValue=SINT;
 *
 **/

// intValue=SINT
protected class IntegerParameterValue_IntValueAssignment extends AssignmentToken  {
	
	public IntegerParameterValue_IntValueAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getIntegerParameterValueAccess().getIntValueAssignment();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getIntegerParameterValueRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("intValue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("intValue");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getIntegerParameterValueAccess().getIntValueSINTParserRuleCall_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getIntegerParameterValueAccess().getIntValueSINTParserRuleCall_0();
			return obj;
		}
		return null;
	}

}

/************ end Rule IntegerParameterValue ****************/


/************ begin Rule StringParameterValue ****************
 *
 * StringParameterValue:
 * 	stringValue=STRING;
 *
 **/

// stringValue=STRING
protected class StringParameterValue_StringValueAssignment extends AssignmentToken  {
	
	public StringParameterValue_StringValueAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getStringParameterValueAccess().getStringValueAssignment();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getStringParameterValueRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("stringValue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("stringValue");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getStringParameterValueAccess().getStringValueSTRINGTerminalRuleCall_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getStringParameterValueAccess().getStringValueSTRINGTerminalRuleCall_0();
			return obj;
		}
		return null;
	}

}

/************ end Rule StringParameterValue ****************/


/************ begin Rule BooleanParameterValue ****************
 *
 * BooleanParameterValue:
 * 	booleanValue=BooleanValue;
 *
 **/

// booleanValue=BooleanValue
protected class BooleanParameterValue_BooleanValueAssignment extends AssignmentToken  {
	
	public BooleanParameterValue_BooleanValueAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getBooleanParameterValueAccess().getBooleanValueAssignment();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getBooleanParameterValueRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("booleanValue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("booleanValue");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getBooleanParameterValueAccess().getBooleanValueBooleanValueEnumRuleCall_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getBooleanParameterValueAccess().getBooleanValueBooleanValueEnumRuleCall_0();
			return obj;
		}
		return null;
	}

}

/************ end Rule BooleanParameterValue ****************/


/************ begin Rule ConditionsBlock ****************
 *
 * ConditionsBlock:
 * 	{ConditionsBlock} "conditions" "{" statusFlags+=StatusFlag* "}";
 *
 **/

// {ConditionsBlock} "conditions" "{" statusFlags+=StatusFlag* "}"
protected class ConditionsBlock_Group extends GroupToken {
	
	public ConditionsBlock_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getConditionsBlockAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConditionsBlock_RightCurlyBracketKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getConditionsBlockAccess().getConditionsBlockAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {ConditionsBlock}
protected class ConditionsBlock_ConditionsBlockAction_0 extends ActionToken  {

	public ConditionsBlock_ConditionsBlockAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getConditionsBlockAccess().getConditionsBlockAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// "conditions"
protected class ConditionsBlock_ConditionsKeyword_1 extends KeywordToken  {
	
	public ConditionsBlock_ConditionsKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getConditionsBlockAccess().getConditionsKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConditionsBlock_ConditionsBlockAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "{"
protected class ConditionsBlock_LeftCurlyBracketKeyword_2 extends KeywordToken  {
	
	public ConditionsBlock_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getConditionsBlockAccess().getLeftCurlyBracketKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConditionsBlock_ConditionsKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// statusFlags+=StatusFlag*
protected class ConditionsBlock_StatusFlagsAssignment_3 extends AssignmentToken  {
	
	public ConditionsBlock_StatusFlagsAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getConditionsBlockAccess().getStatusFlagsAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StatusFlag_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("statusFlags",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("statusFlags");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getStatusFlagRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getConditionsBlockAccess().getStatusFlagsStatusFlagParserRuleCall_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ConditionsBlock_StatusFlagsAssignment_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ConditionsBlock_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class ConditionsBlock_RightCurlyBracketKeyword_4 extends KeywordToken  {
	
	public ConditionsBlock_RightCurlyBracketKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getConditionsBlockAccess().getRightCurlyBracketKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ConditionsBlock_StatusFlagsAssignment_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ConditionsBlock_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule ConditionsBlock ****************/


/************ begin Rule Constraint ****************
 *
 * Constraint:
 * 	validatorReference=ValidatorReference ("[" condition=EqualityExpr "]")?;
 *
 **/

// validatorReference=ValidatorReference ("[" condition=EqualityExpr "]")?
protected class Constraint_Group extends GroupToken {
	
	public Constraint_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getConstraintAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Constraint_ValidatorReferenceAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// validatorReference=ValidatorReference
protected class Constraint_ValidatorReferenceAssignment_0 extends AssignmentToken  {
	
	public Constraint_ValidatorReferenceAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getConstraintAccess().getValidatorReferenceAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ValidatorReference_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("validatorReference",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("validatorReference");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getValidatorReferenceRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getConstraintAccess().getValidatorReferenceValidatorReferenceParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}

// ("[" condition=EqualityExpr "]")?
protected class Constraint_Group_1 extends GroupToken {
	
	public Constraint_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getConstraintAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_RightSquareBracketKeyword_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "["
protected class Constraint_LeftSquareBracketKeyword_1_0 extends KeywordToken  {
	
	public Constraint_LeftSquareBracketKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getConstraintAccess().getLeftSquareBracketKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_ValidatorReferenceAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// condition=EqualityExpr
protected class Constraint_ConditionAssignment_1_1 extends AssignmentToken  {
	
	public Constraint_ConditionAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getConstraintAccess().getConditionAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("condition",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("condition");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEqualityExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getConstraintAccess().getConditionEqualityExprParserRuleCall_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Constraint_LeftSquareBracketKeyword_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "]"
protected class Constraint_RightSquareBracketKeyword_1_2 extends KeywordToken  {
	
	public Constraint_RightSquareBracketKeyword_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getConstraintAccess().getRightSquareBracketKeyword_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_ConditionAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule Constraint ****************/


/************ begin Rule EqualityExpr ****************
 *
 * EqualityExpr:
 * 	left=CondORExpr (op=EqualityOp right=CondORExpr)?;
 *
 **/

// left=CondORExpr (op=EqualityOp right=CondORExpr)?
protected class EqualityExpr_Group extends GroupToken {
	
	public EqualityExpr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEqualityExprAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpr_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EqualityExpr_LeftAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEqualityExprRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// left=CondORExpr
protected class EqualityExpr_LeftAssignment_0 extends AssignmentToken  {
	
	public EqualityExpr_LeftAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEqualityExprAccess().getLeftAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CondORExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("left",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("left");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCondORExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEqualityExprAccess().getLeftCondORExprParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}

// (op=EqualityOp right=CondORExpr)?
protected class EqualityExpr_Group_1 extends GroupToken {
	
	public EqualityExpr_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEqualityExprAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpr_RightAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// op=EqualityOp
protected class EqualityExpr_OpAssignment_1_0 extends AssignmentToken  {
	
	public EqualityExpr_OpAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEqualityExprAccess().getOpAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpr_LeftAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("op",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("op");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getEqualityExprAccess().getOpEqualityOpEnumRuleCall_1_0_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getEqualityExprAccess().getOpEqualityOpEnumRuleCall_1_0_0();
			return obj;
		}
		return null;
	}

}

// right=CondORExpr
protected class EqualityExpr_RightAssignment_1_1 extends AssignmentToken  {
	
	public EqualityExpr_RightAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEqualityExprAccess().getRightAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CondORExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCondORExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEqualityExprAccess().getRightCondORExprParserRuleCall_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new EqualityExpr_OpAssignment_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule EqualityExpr ****************/


/************ begin Rule CondORExpr ****************
 *
 * CondORExpr:
 * 	left=CondANDExpr rights+=CondORRights*;
 *
 **/

// left=CondANDExpr rights+=CondORRights*
protected class CondORExpr_Group extends GroupToken {
	
	public CondORExpr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCondORExprAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CondORExpr_RightsAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CondORExpr_LeftAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCondORExprRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// left=CondANDExpr
protected class CondORExpr_LeftAssignment_0 extends AssignmentToken  {
	
	public CondORExpr_LeftAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCondORExprAccess().getLeftAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CondANDExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("left",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("left");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCondANDExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCondORExprAccess().getLeftCondANDExprParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}

// rights+=CondORRights*
protected class CondORExpr_RightsAssignment_1 extends AssignmentToken  {
	
	public CondORExpr_RightsAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCondORExprAccess().getRightsAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CondORRights_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("rights",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("rights");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCondORRightsRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCondORExprAccess().getRightsCondORRightsParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CondORExpr_RightsAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new CondORExpr_LeftAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule CondORExpr ****************/


/************ begin Rule CondORRights ****************
 *
 * CondORRights:
 * 	op=OrOp right=CondANDExpr;
 *
 **/

// op=OrOp right=CondANDExpr
protected class CondORRights_Group extends GroupToken {
	
	public CondORRights_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCondORRightsAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CondORRights_RightAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCondORRightsRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// op=OrOp
protected class CondORRights_OpAssignment_0 extends AssignmentToken  {
	
	public CondORRights_OpAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCondORRightsAccess().getOpAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("op",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("op");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getCondORRightsAccess().getOpOrOpEnumRuleCall_0_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getCondORRightsAccess().getOpOrOpEnumRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// right=CondANDExpr
protected class CondORRights_RightAssignment_1 extends AssignmentToken  {
	
	public CondORRights_RightAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCondORRightsAccess().getRightAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CondANDExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCondANDExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCondORRightsAccess().getRightCondANDExprParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CondORRights_OpAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule CondORRights ****************/


/************ begin Rule CondANDExpr ****************
 *
 * CondANDExpr:
 * 	left=AtomicBoolExpr rights+=CondANDRights*;
 *
 **/

// left=AtomicBoolExpr rights+=CondANDRights*
protected class CondANDExpr_Group extends GroupToken {
	
	public CondANDExpr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCondANDExprAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CondANDExpr_RightsAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CondANDExpr_LeftAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCondANDExprRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// left=AtomicBoolExpr
protected class CondANDExpr_LeftAssignment_0 extends AssignmentToken  {
	
	public CondANDExpr_LeftAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCondANDExprAccess().getLeftAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AtomicBoolExpr_RelationalExprParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("left",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("left");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAtomicBoolExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCondANDExprAccess().getLeftAtomicBoolExprParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}

// rights+=CondANDRights*
protected class CondANDExpr_RightsAssignment_1 extends AssignmentToken  {
	
	public CondANDExpr_RightsAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCondANDExprAccess().getRightsAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CondANDRights_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("rights",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("rights");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCondANDRightsRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCondANDExprAccess().getRightsCondANDRightsParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CondANDExpr_RightsAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new CondANDExpr_LeftAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule CondANDExpr ****************/


/************ begin Rule CondANDRights ****************
 *
 * CondANDRights:
 * 	op=AndOp right=AtomicBoolExpr;
 *
 **/

// op=AndOp right=AtomicBoolExpr
protected class CondANDRights_Group extends GroupToken {
	
	public CondANDRights_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCondANDRightsAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CondANDRights_RightAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCondANDRightsRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// op=AndOp
protected class CondANDRights_OpAssignment_0 extends AssignmentToken  {
	
	public CondANDRights_OpAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCondANDRightsAccess().getOpAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("op",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("op");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getCondANDRightsAccess().getOpAndOpEnumRuleCall_0_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getCondANDRightsAccess().getOpAndOpEnumRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// right=AtomicBoolExpr
protected class CondANDRights_RightAssignment_1 extends AssignmentToken  {
	
	public CondANDRights_RightAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCondANDRightsAccess().getRightAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AtomicBoolExpr_RelationalExprParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAtomicBoolExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCondANDRightsAccess().getRightAtomicBoolExprParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CondANDRights_OpAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule CondANDRights ****************/


/************ begin Rule AtomicBoolExpr ****************
 *
 * AtomicBoolExpr:
 * 	RelationalExpr;
 *
 **/

// RelationalExpr
protected class AtomicBoolExpr_RelationalExprParserRuleCall extends RuleCallToken {
	
	public AtomicBoolExpr_RelationalExprParserRuleCall(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAtomicBoolExprAccess().getRelationalExprParserRuleCall();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRelationalExprRule().getType().getClassifier())
			return null;
		if(checkForRecursion(RelationalExpr_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

/************ end Rule AtomicBoolExpr ****************/


/************ begin Rule RelationalExpr ****************
 *
 * RelationalExpr:
 * 	left=AdditiveExpr (op=RelationalOp right=AdditiveExpr)?;
 *
 **/

// left=AdditiveExpr (op=RelationalOp right=AdditiveExpr)?
protected class RelationalExpr_Group extends GroupToken {
	
	public RelationalExpr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRelationalExprAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpr_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new RelationalExpr_LeftAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRelationalExprRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// left=AdditiveExpr
protected class RelationalExpr_LeftAssignment_0 extends AssignmentToken  {
	
	public RelationalExpr_LeftAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExprAccess().getLeftAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("left",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("left");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAdditiveExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getRelationalExprAccess().getLeftAdditiveExprParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}

// (op=RelationalOp right=AdditiveExpr)?
protected class RelationalExpr_Group_1 extends GroupToken {
	
	public RelationalExpr_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRelationalExprAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpr_RightAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// op=RelationalOp
protected class RelationalExpr_OpAssignment_1_0 extends AssignmentToken  {
	
	public RelationalExpr_OpAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExprAccess().getOpAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RelationalExpr_LeftAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("op",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("op");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getRelationalExprAccess().getOpRelationalOpEnumRuleCall_1_0_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getRelationalExprAccess().getOpRelationalOpEnumRuleCall_1_0_0();
			return obj;
		}
		return null;
	}

}

// right=AdditiveExpr
protected class RelationalExpr_RightAssignment_1_1 extends AssignmentToken  {
	
	public RelationalExpr_RightAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRelationalExprAccess().getRightAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAdditiveExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getRelationalExprAccess().getRightAdditiveExprParserRuleCall_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new RelationalExpr_OpAssignment_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule RelationalExpr ****************/


/************ begin Rule AdditiveExpr ****************
 *
 * AdditiveExpr:
 * 	left=MultiplicativeExpr rights+=AdditiveRights*;
 *
 **/

// left=MultiplicativeExpr rights+=AdditiveRights*
protected class AdditiveExpr_Group extends GroupToken {
	
	public AdditiveExpr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAdditiveExprAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveExpr_RightsAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AdditiveExpr_LeftAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAdditiveExprRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// left=MultiplicativeExpr
protected class AdditiveExpr_LeftAssignment_0 extends AssignmentToken  {
	
	public AdditiveExpr_LeftAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAdditiveExprAccess().getLeftAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new MultiplicativeExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("left",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("left");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getMultiplicativeExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAdditiveExprAccess().getLeftMultiplicativeExprParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}

// rights+=AdditiveRights*
protected class AdditiveExpr_RightsAssignment_1 extends AssignmentToken  {
	
	public AdditiveExpr_RightsAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAdditiveExprAccess().getRightsAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveRights_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("rights",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("rights");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAdditiveRightsRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAdditiveExprAccess().getRightsAdditiveRightsParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AdditiveExpr_RightsAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new AdditiveExpr_LeftAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule AdditiveExpr ****************/


/************ begin Rule AdditiveRights ****************
 *
 * AdditiveRights:
 * 	op=AdditiveOp right=MultiplicativeExpr;
 *
 **/

// op=AdditiveOp right=MultiplicativeExpr
protected class AdditiveRights_Group extends GroupToken {
	
	public AdditiveRights_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAdditiveRightsAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AdditiveRights_RightAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAdditiveRightsRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// op=AdditiveOp
protected class AdditiveRights_OpAssignment_0 extends AssignmentToken  {
	
	public AdditiveRights_OpAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAdditiveRightsAccess().getOpAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("op",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("op");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getAdditiveRightsAccess().getOpAdditiveOpEnumRuleCall_0_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getAdditiveRightsAccess().getOpAdditiveOpEnumRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// right=MultiplicativeExpr
protected class AdditiveRights_RightAssignment_1 extends AssignmentToken  {
	
	public AdditiveRights_RightAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAdditiveRightsAccess().getRightAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new MultiplicativeExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getMultiplicativeExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAdditiveRightsAccess().getRightMultiplicativeExprParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AdditiveRights_OpAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule AdditiveRights ****************/


/************ begin Rule MultiplicativeExpr ****************
 *
 * MultiplicativeExpr:
 * 	left=AtomicExpr rights+=MultiplicativeRights*;
 *
 **/

// left=AtomicExpr rights+=MultiplicativeRights*
protected class MultiplicativeExpr_Group extends GroupToken {
	
	public MultiplicativeExpr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getMultiplicativeExprAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new MultiplicativeExpr_RightsAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new MultiplicativeExpr_LeftAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getMultiplicativeExprRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// left=AtomicExpr
protected class MultiplicativeExpr_LeftAssignment_0 extends AssignmentToken  {
	
	public MultiplicativeExpr_LeftAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMultiplicativeExprAccess().getLeftAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AtomicExpr_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("left",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("left");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAtomicExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getMultiplicativeExprAccess().getLeftAtomicExprParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}

// rights+=MultiplicativeRights*
protected class MultiplicativeExpr_RightsAssignment_1 extends AssignmentToken  {
	
	public MultiplicativeExpr_RightsAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMultiplicativeExprAccess().getRightsAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new MultiplicativeRights_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("rights",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("rights");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getMultiplicativeRightsRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getMultiplicativeExprAccess().getRightsMultiplicativeRightsParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new MultiplicativeExpr_RightsAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new MultiplicativeExpr_LeftAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule MultiplicativeExpr ****************/


/************ begin Rule MultiplicativeRights ****************
 *
 * MultiplicativeRights:
 * 	op=MultiplicativeOp right=AtomicExpr;
 *
 **/

// op=MultiplicativeOp right=AtomicExpr
protected class MultiplicativeRights_Group extends GroupToken {
	
	public MultiplicativeRights_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getMultiplicativeRightsAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new MultiplicativeRights_RightAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getMultiplicativeRightsRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// op=MultiplicativeOp
protected class MultiplicativeRights_OpAssignment_0 extends AssignmentToken  {
	
	public MultiplicativeRights_OpAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMultiplicativeRightsAccess().getOpAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("op",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("op");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getMultiplicativeRightsAccess().getOpMultiplicativeOpEnumRuleCall_0_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getMultiplicativeRightsAccess().getOpMultiplicativeOpEnumRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// right=AtomicExpr
protected class MultiplicativeRights_RightAssignment_1 extends AssignmentToken  {
	
	public MultiplicativeRights_RightAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getMultiplicativeRightsAccess().getRightAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AtomicExpr_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("right",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("right");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAtomicExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getMultiplicativeRightsAccess().getRightAtomicExprParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new MultiplicativeRights_OpAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule MultiplicativeRights ****************/


/************ begin Rule AtomicExpr ****************
 *
 * AtomicExpr:
 * 	Variable | Literal | ParenExpr | Call;
 *
 **/

// Variable | Literal | ParenExpr | Call
protected class AtomicExpr_Alternatives extends AlternativesToken {

	public AtomicExpr_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAtomicExprAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AtomicExpr_VariableParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AtomicExpr_LiteralParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AtomicExpr_ParenExprParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new AtomicExpr_CallParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCallRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getFalseLiteralAccess().getFalseLiteralAction_1().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntLiteralRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getParenExprRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrueLiteralAccess().getTrueLiteralAction_1().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getXmadslVariableRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// Variable
protected class AtomicExpr_VariableParserRuleCall_0 extends RuleCallToken {
	
	public AtomicExpr_VariableParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAtomicExprAccess().getVariableParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Variable_XmadslVariableParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getXmadslVariableRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Variable_XmadslVariableParserRuleCall.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Literal
protected class AtomicExpr_LiteralParserRuleCall_1 extends RuleCallToken {
	
	public AtomicExpr_LiteralParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAtomicExprAccess().getLiteralParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Literal_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFalseLiteralAccess().getFalseLiteralAction_1().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntLiteralRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrueLiteralAccess().getTrueLiteralAction_1().getType().getClassifier())
			return null;
		if(checkForRecursion(Literal_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ParenExpr
protected class AtomicExpr_ParenExprParserRuleCall_2 extends RuleCallToken {
	
	public AtomicExpr_ParenExprParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAtomicExprAccess().getParenExprParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParenExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParenExprRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ParenExpr_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Call
protected class AtomicExpr_CallParserRuleCall_3 extends RuleCallToken {
	
	public AtomicExpr_CallParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAtomicExprAccess().getCallParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Call_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCallRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Call_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule AtomicExpr ****************/


/************ begin Rule Variable ****************
 *
 * Variable:
 * 	XmadslVariable;
 *
 **/

// XmadslVariable
protected class Variable_XmadslVariableParserRuleCall extends RuleCallToken {
	
	public Variable_XmadslVariableParserRuleCall(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getVariableAccess().getXmadslVariableParserRuleCall();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new XmadslVariable_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getXmadslVariableRule().getType().getClassifier())
			return null;
		if(checkForRecursion(XmadslVariable_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

/************ end Rule Variable ****************/


/************ begin Rule XmadslVariable ****************
 *
 * XmadslVariable:
 * 	reference=[ReferenceableByXmadslVariable|QualifiedName] ("." access=VariableAccess)?;
 *
 **/

// reference=[ReferenceableByXmadslVariable|QualifiedName] ("." access=VariableAccess)?
protected class XmadslVariable_Group extends GroupToken {
	
	public XmadslVariable_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getXmadslVariableAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new XmadslVariable_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new XmadslVariable_ReferenceAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getXmadslVariableRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// reference=[ReferenceableByXmadslVariable|QualifiedName]
protected class XmadslVariable_ReferenceAssignment_0 extends AssignmentToken  {
	
	public XmadslVariable_ReferenceAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getXmadslVariableAccess().getReferenceAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("reference",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("reference");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getXmadslVariableAccess().getReferenceReferenceableByXmadslVariableCrossReference_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getXmadslVariableAccess().getReferenceReferenceableByXmadslVariableCrossReference_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("." access=VariableAccess)?
protected class XmadslVariable_Group_1 extends GroupToken {
	
	public XmadslVariable_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getXmadslVariableAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new XmadslVariable_AccessAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "."
protected class XmadslVariable_FullStopKeyword_1_0 extends KeywordToken  {
	
	public XmadslVariable_FullStopKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getXmadslVariableAccess().getFullStopKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new XmadslVariable_ReferenceAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// access=VariableAccess
protected class XmadslVariable_AccessAssignment_1_1 extends AssignmentToken  {
	
	public XmadslVariable_AccessAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getXmadslVariableAccess().getAccessAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new XmadslVariable_FullStopKeyword_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("access",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("access");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getXmadslVariableAccess().getAccessVariableAccessEnumRuleCall_1_1_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getXmadslVariableAccess().getAccessVariableAccessEnumRuleCall_1_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule XmadslVariable ****************/


/************ begin Rule StatusFlag ****************
 *
 * StatusFlag:
 * 	name=ID "=" expression=EqualityExpr? ("," "doc:" doc=STRING?)?;
 *
 **/

// name=ID "=" expression=EqualityExpr? ("," "doc:" doc=STRING?)?
protected class StatusFlag_Group extends GroupToken {
	
	public StatusFlag_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getStatusFlagAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StatusFlag_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new StatusFlag_ExpressionAssignment_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new StatusFlag_EqualsSignKeyword_1(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getStatusFlagRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name=ID
protected class StatusFlag_NameAssignment_0 extends AssignmentToken  {
	
	public StatusFlag_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getStatusFlagAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getStatusFlagAccess().getNameIDTerminalRuleCall_0_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getStatusFlagAccess().getNameIDTerminalRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// "="
protected class StatusFlag_EqualsSignKeyword_1 extends KeywordToken  {
	
	public StatusFlag_EqualsSignKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getStatusFlagAccess().getEqualsSignKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StatusFlag_NameAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// expression=EqualityExpr?
protected class StatusFlag_ExpressionAssignment_2 extends AssignmentToken  {
	
	public StatusFlag_ExpressionAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getStatusFlagAccess().getExpressionAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expression",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expression");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEqualityExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getStatusFlagAccess().getExpressionEqualityExprParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new StatusFlag_EqualsSignKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," "doc:" doc=STRING?)?
protected class StatusFlag_Group_3 extends GroupToken {
	
	public StatusFlag_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getStatusFlagAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StatusFlag_DocAssignment_3_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class StatusFlag_CommaKeyword_3_0 extends KeywordToken  {
	
	public StatusFlag_CommaKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getStatusFlagAccess().getCommaKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StatusFlag_ExpressionAssignment_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new StatusFlag_EqualsSignKeyword_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "doc:"
protected class StatusFlag_DocKeyword_3_1 extends KeywordToken  {
	
	public StatusFlag_DocKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getStatusFlagAccess().getDocKeyword_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StatusFlag_CommaKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// doc=STRING?
protected class StatusFlag_DocAssignment_3_2 extends AssignmentToken  {
	
	public StatusFlag_DocAssignment_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getStatusFlagAccess().getDocAssignment_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StatusFlag_DocKeyword_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doc",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doc");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getStatusFlagAccess().getDocSTRINGTerminalRuleCall_3_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getStatusFlagAccess().getDocSTRINGTerminalRuleCall_3_2_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule StatusFlag ****************/


/************ begin Rule Call ****************
 *
 * Call:
 * 	function=[Function|QualifiedName] "(" expr=Literal ")";
 *
 **/

// function=[Function|QualifiedName] "(" expr=Literal ")"
protected class Call_Group extends GroupToken {
	
	public Call_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCallAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Call_RightParenthesisKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCallRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// function=[Function|QualifiedName]
protected class Call_FunctionAssignment_0 extends AssignmentToken  {
	
	public Call_FunctionAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallAccess().getFunctionAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("function",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("function");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCallAccess().getFunctionFunctionCrossReference_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getCallAccess().getFunctionFunctionCrossReference_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// "("
protected class Call_LeftParenthesisKeyword_1 extends KeywordToken  {
	
	public Call_LeftParenthesisKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCallAccess().getLeftParenthesisKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Call_FunctionAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// expr=Literal
protected class Call_ExprAssignment_2 extends AssignmentToken  {
	
	public Call_ExprAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCallAccess().getExprAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Literal_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expr",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expr");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getLiteralRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCallAccess().getExprLiteralParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Call_LeftParenthesisKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ")"
protected class Call_RightParenthesisKeyword_3 extends KeywordToken  {
	
	public Call_RightParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCallAccess().getRightParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Call_ExprAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule Call ****************/


/************ begin Rule Function ****************
 *
 * Function:
 * 	resultType=[SimpleType|QualifiedName] name=ID "(" parameterType=[SimpleType|QualifiedName] parameterName=ID ")";
 *
 **/

// resultType=[SimpleType|QualifiedName] name=ID "(" parameterType=[SimpleType|QualifiedName] parameterName=ID ")"
protected class Function_Group extends GroupToken {
	
	public Function_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getFunctionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Function_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFunctionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// resultType=[SimpleType|QualifiedName]
protected class Function_ResultTypeAssignment_0 extends AssignmentToken  {
	
	public Function_ResultTypeAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFunctionAccess().getResultTypeAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("resultType",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("resultType");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getFunctionAccess().getResultTypeSimpleTypeCrossReference_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getFunctionAccess().getResultTypeSimpleTypeCrossReference_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// name=ID
protected class Function_NameAssignment_1 extends AssignmentToken  {
	
	public Function_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFunctionAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Function_ResultTypeAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getFunctionAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getFunctionAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class Function_LeftParenthesisKeyword_2 extends KeywordToken  {
	
	public Function_LeftParenthesisKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getFunctionAccess().getLeftParenthesisKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Function_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// parameterType=[SimpleType|QualifiedName]
protected class Function_ParameterTypeAssignment_3 extends AssignmentToken  {
	
	public Function_ParameterTypeAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFunctionAccess().getParameterTypeAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Function_LeftParenthesisKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameterType",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameterType");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getFunctionAccess().getParameterTypeSimpleTypeCrossReference_3_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getFunctionAccess().getParameterTypeSimpleTypeCrossReference_3_0(); 
				return obj;
			}
		}
		return null;
	}

}

// parameterName=ID
protected class Function_ParameterNameAssignment_4 extends AssignmentToken  {
	
	public Function_ParameterNameAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getFunctionAccess().getParameterNameAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Function_ParameterTypeAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("parameterName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameterName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getFunctionAccess().getParameterNameIDTerminalRuleCall_4_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getFunctionAccess().getParameterNameIDTerminalRuleCall_4_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class Function_RightParenthesisKeyword_5 extends KeywordToken  {
	
	public Function_RightParenthesisKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getFunctionAccess().getRightParenthesisKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Function_ParameterNameAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule Function ****************/


/************ begin Rule ParenExpr ****************
 *
 * ParenExpr:
 * 	"(" expr=EqualityExpr ")";
 *
 **/

// "(" expr=EqualityExpr ")"
protected class ParenExpr_Group extends GroupToken {
	
	public ParenExpr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getParenExprAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParenExpr_RightParenthesisKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getParenExprRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "("
protected class ParenExpr_LeftParenthesisKeyword_0 extends KeywordToken  {
	
	public ParenExpr_LeftParenthesisKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getParenExprAccess().getLeftParenthesisKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// expr=EqualityExpr
protected class ParenExpr_ExprAssignment_1 extends AssignmentToken  {
	
	public ParenExpr_ExprAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getParenExprAccess().getExprAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EqualityExpr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("expr",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("expr");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEqualityExprRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getParenExprAccess().getExprEqualityExprParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ParenExpr_LeftParenthesisKeyword_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ")"
protected class ParenExpr_RightParenthesisKeyword_2 extends KeywordToken  {
	
	public ParenExpr_RightParenthesisKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getParenExprAccess().getRightParenthesisKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ParenExpr_ExprAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule ParenExpr ****************/


/************ begin Rule Literal ****************
 *
 * Literal:
 * 	IntLiteral | BoolLiteral | StringLiteral;
 *
 **/

// IntLiteral | BoolLiteral | StringLiteral
protected class Literal_Alternatives extends AlternativesToken {

	public Literal_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getLiteralAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Literal_IntLiteralParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Literal_BoolLiteralParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Literal_StringLiteralParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFalseLiteralAccess().getFalseLiteralAction_1().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getIntLiteralRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getStringLiteralRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrueLiteralAccess().getTrueLiteralAction_1().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// IntLiteral
protected class Literal_IntLiteralParserRuleCall_0 extends RuleCallToken {
	
	public Literal_IntLiteralParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLiteralAccess().getIntLiteralParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new IntLiteral_NumberAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getIntLiteralRule().getType().getClassifier())
			return null;
		if(checkForRecursion(IntLiteral_NumberAssignment.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// BoolLiteral
protected class Literal_BoolLiteralParserRuleCall_1 extends RuleCallToken {
	
	public Literal_BoolLiteralParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLiteralAccess().getBoolLiteralParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new BoolLiteral_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFalseLiteralAccess().getFalseLiteralAction_1().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrueLiteralAccess().getTrueLiteralAction_1().getType().getClassifier())
			return null;
		if(checkForRecursion(BoolLiteral_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// StringLiteral
protected class Literal_StringLiteralParserRuleCall_2 extends RuleCallToken {
	
	public Literal_StringLiteralParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLiteralAccess().getStringLiteralParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StringLiteral_StringAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getStringLiteralRule().getType().getClassifier())
			return null;
		if(checkForRecursion(StringLiteral_StringAssignment.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule Literal ****************/


/************ begin Rule IntLiteral ****************
 *
 * IntLiteral:
 * 	number=INT;
 *
 **/

// number=INT
protected class IntLiteral_NumberAssignment extends AssignmentToken  {
	
	public IntLiteral_NumberAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getIntLiteralAccess().getNumberAssignment();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getIntLiteralRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("number",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("number");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getIntLiteralAccess().getNumberINTTerminalRuleCall_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getIntLiteralAccess().getNumberINTTerminalRuleCall_0();
			return obj;
		}
		return null;
	}

}

/************ end Rule IntLiteral ****************/


/************ begin Rule StringLiteral ****************
 *
 * StringLiteral:
 * 	string=STRING;
 *
 **/

// string=STRING
protected class StringLiteral_StringAssignment extends AssignmentToken  {
	
	public StringLiteral_StringAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getStringLiteralAccess().getStringAssignment();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getStringLiteralRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("string",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("string");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getStringLiteralAccess().getStringSTRINGTerminalRuleCall_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getStringLiteralAccess().getStringSTRINGTerminalRuleCall_0();
			return obj;
		}
		return null;
	}

}

/************ end Rule StringLiteral ****************/


/************ begin Rule BoolLiteral ****************
 *
 * BoolLiteral:
 * 	TrueLiteral | FalseLiteral;
 *
 **/

// TrueLiteral | FalseLiteral
protected class BoolLiteral_Alternatives extends AlternativesToken {

	public BoolLiteral_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getBoolLiteralAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new BoolLiteral_TrueLiteralParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new BoolLiteral_FalseLiteralParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFalseLiteralAccess().getFalseLiteralAction_1().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTrueLiteralAccess().getTrueLiteralAction_1().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// TrueLiteral
protected class BoolLiteral_TrueLiteralParserRuleCall_0 extends RuleCallToken {
	
	public BoolLiteral_TrueLiteralParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getBoolLiteralAccess().getTrueLiteralParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TrueLiteral_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getTrueLiteralAccess().getTrueLiteralAction_1().getType().getClassifier())
			return null;
		if(checkForRecursion(TrueLiteral_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// FalseLiteral
protected class BoolLiteral_FalseLiteralParserRuleCall_1 extends RuleCallToken {
	
	public BoolLiteral_FalseLiteralParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getBoolLiteralAccess().getFalseLiteralParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FalseLiteral_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFalseLiteralAccess().getFalseLiteralAction_1().getType().getClassifier())
			return null;
		if(checkForRecursion(FalseLiteral_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule BoolLiteral ****************/


/************ begin Rule TrueLiteral ****************
 *
 * TrueLiteral:
 * 	"true" {TrueLiteral};
 *
 **/

// "true" {TrueLiteral}
protected class TrueLiteral_Group extends GroupToken {
	
	public TrueLiteral_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getTrueLiteralAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TrueLiteral_TrueLiteralAction_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getTrueLiteralAccess().getTrueLiteralAction_1().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "true"
protected class TrueLiteral_TrueKeyword_0 extends KeywordToken  {
	
	public TrueLiteral_TrueKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTrueLiteralAccess().getTrueKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// {TrueLiteral}
protected class TrueLiteral_TrueLiteralAction_1 extends ActionToken  {

	public TrueLiteral_TrueLiteralAction_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getTrueLiteralAccess().getTrueLiteralAction_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TrueLiteral_TrueKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}


/************ end Rule TrueLiteral ****************/


/************ begin Rule FalseLiteral ****************
 *
 * FalseLiteral:
 * 	"false" {FalseLiteral};
 *
 **/

// "false" {FalseLiteral}
protected class FalseLiteral_Group extends GroupToken {
	
	public FalseLiteral_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getFalseLiteralAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FalseLiteral_FalseLiteralAction_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getFalseLiteralAccess().getFalseLiteralAction_1().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "false"
protected class FalseLiteral_FalseKeyword_0 extends KeywordToken  {
	
	public FalseLiteral_FalseKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getFalseLiteralAccess().getFalseKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// {FalseLiteral}
protected class FalseLiteral_FalseLiteralAction_1 extends ActionToken  {

	public FalseLiteral_FalseLiteralAction_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getFalseLiteralAccess().getFalseLiteralAction_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new FalseLiteral_FalseKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}


/************ end Rule FalseLiteral ****************/




}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy