Package org.csu.idl.xtext.parseTreeConstruction

Source Code of org.csu.idl.xtext.parseTreeConstruction.IDLParsetreeConstructor$Attr_spec_Alternatives_1_1

/*
* generated by Xtext
*/
package org.csu.idl.xtext.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.csu.idl.xtext.services.IDLGrammarAccess;

import com.google.inject.Inject;

@SuppressWarnings("all")
public class IDLParsetreeConstructor extends AbstractParseTreeConstructor {
   
  @Inject
  private IDLGrammarAccess 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 Specification_Group(this, this, 0, inst);
      case 1: return new Include_decl_Group(this, this, 1, inst);
      case 2: return new Definition_Alternatives(this, this, 2, inst);
      case 3: return new Module_Group(this, this, 3, inst);
      case 4: return new Interface_decl_Group(this, this, 4, inst);
      case 5: return new Interface_fwd_Group(this, this, 5, inst);
      case 6: return new Export_Alternatives(this, this, 6, inst);
      case 7: return new Op_decl_Group(this, this, 7, inst);
      case 8: return new Op_type_spec_Alternatives(this, this, 8, inst);
      case 9: return new Param_decl_Group(this, this, 9, inst);
      case 10: return new Attr_decl_Alternatives(this, this, 10, inst);
      case 11: return new Readonly_attr_spec_Alternatives(this, this, 11, inst);
      case 12: return new Attr_spec_Alternatives(this, this, 12, inst);
      case 13: return new Except_decl_Group(this, this, 13, inst);
      case 14: return new Type_decl_Alternatives(this, this, 14, inst);
      case 15: return new Alias_type_Alternatives(this, this, 15, inst);
      case 16: return new Array_type_spec_Group(this, this, 16, inst);
      case 17: return new Simple_type_spec_Alternatives(this, this, 17, inst);
      case 18: return new Base_type_spec_Alternatives(this, this, 18, inst);
      case 19: return new Template_type_spec_Alternatives(this, this, 19, inst);
      case 20: return new Constr_type_spec_Alternatives(this, this, 20, inst);
      case 21: return new Struct_type_Group(this, this, 21, inst);
      case 22: return new Member_Alternatives(this, this, 22, inst);
      case 23: return new Union_type_Group(this, this, 23, inst);
      case 24: return new Switch_type_spec_cont_Alternatives(this, this, 24, inst);
      case 25: return new Case_stmt_Alternatives(this, this, 25, inst);
      case 26: return new Enum_type_Group(this, this, 26, inst);
      case 27: return new Enum_member_IdentifierAssignment(this, this, 27, inst);
      case 28: return new Const_decl_Group(this, this, 28, inst);
      case 29: return new Const_type_Alternatives(this, this, 29, inst);
      case 30: return new Primitive_def_Alternatives(this, this, 30, inst);
      case 31: return new Sequence_type_Group(this, this, 31, inst);
      case 32: return new Stringdef_type_Group(this, this, 32, inst);
      case 33: return new Wide_stringdef_type_Group(this, this, 33, inst);
      case 34: return new Fixed_pt_type_Group(this, this, 34, inst);
      case 35: return new Floating_pt_type_Alternatives(this, this, 35, inst);
      case 36: return new Integer_type_Alternatives(this, this, 36, inst);
      case 37: return new Charstr_type_Alternatives(this, this, 37, inst);
      case 38: return new Other_type_Alternatives(this, this, 38, inst);
      case 39: return new Fixed_pt_const_type_Group(this, this, 39, inst);
      case 40: return new Const_exp_Or_exprParserRuleCall(this, this, 40, inst);
      case 41: return new Or_expr_Group(this, this, 41, inst);
      case 42: return new Xor_expr_Group(this, this, 42, inst);
      case 43: return new And_expr_Group(this, this, 43, inst);
      case 44: return new Shift_expr_Group(this, this, 44, inst);
      case 45: return new Add_expr_Group(this, this, 45, inst);
      case 46: return new Mult_expr_Group(this, this, 46, inst);
      case 47: return new Unary_expr_Alternatives(this, this, 47, inst);
      case 48: return new Primary_expr_Alternatives(this, this, 48, inst);
      case 49: return new ConstantDefRef_ConstantAssignment(this, this, 49, inst);
      case 50: return new ValueExpression_ValueAssignment(this, this, 50, inst);
      default: return null;
   
  } 
}
 

/************ begin Rule specification ****************
*
* specification returns IDL::TranslationUnit:
*   {IDL::TranslationUnit} includes+=include_decl* contains+=definition*;
*
**/

// {IDL::TranslationUnit} includes+=include_decl* contains+=definition*
protected class Specification_Group extends GroupToken {
 
  public Specification_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getSpecificationAccess().getGroup();
  }

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

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

}

// {IDL::TranslationUnit}
protected class Specification_TranslationUnitAction_0 extends ActionToken  {

  public Specification_TranslationUnitAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getSpecificationAccess().getTranslationUnitAction_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;
  }
}

// includes+=include_decl*
protected class Specification_IncludesAssignment_1 extends AssignmentToken  {
 
  public Specification_IncludesAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getSpecificationAccess().getIncludesAssignment_1();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("includes",false)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("includes");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getInclude_declRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getSpecificationAccess().getIncludesInclude_declParserRuleCall_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 Specification_IncludesAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
      case 1: return new Specification_TranslationUnitAction_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// contains+=definition*
protected class Specification_ContainsAssignment_2 extends AssignmentToken  {
 
  public Specification_ContainsAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getSpecificationAccess().getContainsAssignment_2();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("contains",false)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("contains");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getDefinitionRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getSpecificationAccess().getContainsDefinitionParserRuleCall_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 Specification_ContainsAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
      case 1: return new Specification_IncludesAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
      case 2: return new Specification_TranslationUnitAction_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}


/************ end Rule specification ****************/


/************ begin Rule include_decl ****************
*
* include_decl returns IDL::Include:
*   "#include" importURI=STRING;
*
**/

// "#include" importURI=STRING
protected class Include_decl_Group extends GroupToken {
 
  public Include_decl_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getInclude_declAccess().getGroup();
  }

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

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

}

// "#include"
protected class Include_decl_IncludeKeyword_0 extends KeywordToken  {
 
  public Include_decl_IncludeKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Keyword getGrammarElement() {
    return grammarAccess.getInclude_declAccess().getIncludeKeyword_0();
  }

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

}

// importURI=STRING
protected class Include_decl_ImportURIAssignment_1 extends AssignmentToken  {
 
  public Include_decl_ImportURIAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInclude_declAccess().getImportURIAssignment_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Include_decl_IncludeKeyword_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.getInclude_declAccess().getImportURISTRINGTerminalRuleCall_1_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getInclude_declAccess().getImportURISTRINGTerminalRuleCall_1_0();
      return obj;
    }
    return null;
  }

}


/************ end Rule include_decl ****************/


/************ begin Rule definition ****************
*
* //|  value ';'  //value pertenece a corba 2.3
* //|  type_id_decl ';'
* //|  type_prefix_decl ';'
* //|  event ';'
* //|  component ';'
* //|  home_decl ';'
* definition returns IDL::Contained:
*   type_decl ";" | const_decl ";" | except_decl ";" | interface_decl ";" | interface_fwd ";" | module ";";
*
**/

// type_decl ";" | const_decl ";" | except_decl ";" | interface_decl ";" | interface_fwd ";" | module ";"
protected class Definition_Alternatives extends AlternativesToken {

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Definition_Group_0(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Definition_Group_1(lastRuleCallOrigin, this, 1, inst);
      case 2: return new Definition_Group_2(lastRuleCallOrigin, this, 2, inst);
      case 3: return new Definition_Group_3(lastRuleCallOrigin, this, 3, inst);
      case 4: return new Definition_Group_4(lastRuleCallOrigin, this, 4, inst);
      case 5: return new Definition_Group_5(lastRuleCallOrigin, this, 5, inst);
      default: return null;
   
  }

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getAlias_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getConst_declRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getEnum_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getExcept_declRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getInterface_fwdRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getInterface_declRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getModuleRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getStruct_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnion_typeRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// type_decl ";"
protected class Definition_Group_0 extends GroupToken {
 
  public Definition_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getGroup_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getAlias_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getEnum_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getStruct_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnion_typeRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// type_decl
protected class Definition_Type_declParserRuleCall_0_0 extends RuleCallToken {
 
  public Definition_Type_declParserRuleCall_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getType_declParserRuleCall_0_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Type_decl_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);
   
  } 
}

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

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

}


// const_decl ";"
protected class Definition_Group_1 extends GroupToken {
 
  public Definition_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getGroup_1();
  }

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

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

}

// const_decl
protected class Definition_Const_declParserRuleCall_1_0 extends RuleCallToken {
 
  public Definition_Const_declParserRuleCall_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getConst_declParserRuleCall_1_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Const_decl_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);
   
  } 
}

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

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

}


// except_decl ";"
protected class Definition_Group_2 extends GroupToken {
 
  public Definition_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getGroup_2();
  }

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

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

}

// except_decl
protected class Definition_Except_declParserRuleCall_2_0 extends RuleCallToken {
 
  public Definition_Except_declParserRuleCall_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getExcept_declParserRuleCall_2_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Except_decl_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);
   
  } 
}

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

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

}


// interface_decl ";"
protected class Definition_Group_3 extends GroupToken {
 
  public Definition_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getGroup_3();
  }

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

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

}

// interface_decl
protected class Definition_Interface_declParserRuleCall_3_0 extends RuleCallToken {
 
  public Definition_Interface_declParserRuleCall_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getInterface_declParserRuleCall_3_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Interface_decl_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);
   
  } 
}

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

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

}


// interface_fwd ";"
protected class Definition_Group_4 extends GroupToken {
 
  public Definition_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getGroup_4();
  }

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

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

}

// interface_fwd
protected class Definition_Interface_fwdParserRuleCall_4_0 extends RuleCallToken {
 
  public Definition_Interface_fwdParserRuleCall_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getInterface_fwdParserRuleCall_4_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Interface_fwd_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);
   
  } 
}

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

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

}


// module ";"
protected class Definition_Group_5 extends GroupToken {
 
  public Definition_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getGroup_5();
  }

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

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

}

// module
protected class Definition_ModuleParserRuleCall_5_0 extends RuleCallToken {
 
  public Definition_ModuleParserRuleCall_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getDefinitionAccess().getModuleParserRuleCall_5_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Module_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);
   
  } 
}

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

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

}



/************ end Rule definition ****************/


/************ begin Rule module ****************
*
* module returns IDL::ModuleDef:
*   "module" identifier=ID "{" (contains+=definition | ";")* "}";
*
**/

// "module" identifier=ID "{" (contains+=definition | ";")* "}"
protected class Module_Group extends GroupToken {
 
  public Module_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getModuleAccess().getGroup();
  }

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

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

}

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

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

}

// identifier=ID
protected class Module_IdentifierAssignment_1 extends AssignmentToken  {
 
  public Module_IdentifierAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getModuleAccess().getIdentifierAssignment_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Module_ModuleKeyword_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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getModuleAccess().getIdentifierIDTerminalRuleCall_1_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getModuleAccess().getIdentifierIDTerminalRuleCall_1_0();
      return obj;
    }
    return null;
  }

}

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

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

}

// (contains+=definition | ";")*
protected class Module_Alternatives_3 extends AlternativesToken {

  public Module_Alternatives_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getModuleAccess().getAlternatives_3();
  }

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

}

// contains+=definition
protected class Module_ContainsAssignment_3_0 extends AssignmentToken  {
 
  public Module_ContainsAssignment_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getModuleAccess().getContainsAssignment_3_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("contains",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("contains");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getDefinitionRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getModuleAccess().getContainsDefinitionParserRuleCall_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 Module_Alternatives_3(lastRuleCallOrigin, next, actIndex, consumed);
      case 1: return new Module_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}


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

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

}


/************ end Rule module ****************/


/************ begin Rule interface_decl ****************
*
* interface_decl returns IDL::InterfaceDef:
*   (isAbstract?="abstract" | isCustom?="local")? "interface" identifier=ID (":" derivesFrom+=[IDL::InterfaceDef] (","
*   derivesFrom+=[IDL::InterfaceDef])*)? "{" (contains+=export | ";")* "}";
*
**/

// (isAbstract?="abstract" | isCustom?="local")? "interface" identifier=ID (":" derivesFrom+=[IDL::InterfaceDef] (","
// derivesFrom+=[IDL::InterfaceDef])*)? "{" (contains+=export | ";")* "}"
protected class Interface_decl_Group extends GroupToken {
 
  public Interface_decl_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getInterface_declAccess().getGroup();
  }

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

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

}

// (isAbstract?="abstract" | isCustom?="local")?
protected class Interface_decl_Alternatives_0 extends AlternativesToken {

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

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

}

// isAbstract?="abstract"
protected class Interface_decl_IsAbstractAssignment_0_0 extends AssignmentToken  {
 
  public Interface_decl_IsAbstractAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInterface_declAccess().getIsAbstractAssignment_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("isAbstract",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("isAbstract");
    if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getInterface_declAccess().getIsAbstractAbstractKeyword_0_0_0();
      return obj;
    }
    return null;
  }

}

// isCustom?="local"
protected class Interface_decl_IsCustomAssignment_0_1 extends AssignmentToken  {
 
  public Interface_decl_IsCustomAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInterface_declAccess().getIsCustomAssignment_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("isCustom",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("isCustom");
    if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getInterface_declAccess().getIsCustomLocalKeyword_0_1_0();
      return obj;
    }
    return null;
  }

}


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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Interface_decl_Alternatives_0(lastRuleCallOrigin, this, 0, inst);
      default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
   
  }

}

// identifier=ID
protected class Interface_decl_IdentifierAssignment_2 extends AssignmentToken  {
 
  public Interface_decl_IdentifierAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInterface_declAccess().getIdentifierAssignment_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Interface_decl_InterfaceKeyword_1(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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInterface_declAccess().getIdentifierIDTerminalRuleCall_2_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getInterface_declAccess().getIdentifierIDTerminalRuleCall_2_0();
      return obj;
    }
    return null;
  }

}

// (":" derivesFrom+=[IDL::InterfaceDef] ("," derivesFrom+=[IDL::InterfaceDef])*)?
protected class Interface_decl_Group_3 extends GroupToken {
 
  public Interface_decl_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getInterface_declAccess().getGroup_3();
  }

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

}

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

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

}

// derivesFrom+=[IDL::InterfaceDef]
protected class Interface_decl_DerivesFromAssignment_3_1 extends AssignmentToken  {
 
  public Interface_decl_DerivesFromAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInterface_declAccess().getDerivesFromAssignment_3_1();
  }

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

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

}

// ("," derivesFrom+=[IDL::InterfaceDef])*
protected class Interface_decl_Group_3_2 extends GroupToken {
 
  public Interface_decl_Group_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getInterface_declAccess().getGroup_3_2();
  }

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

}

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

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

}

// derivesFrom+=[IDL::InterfaceDef]
protected class Interface_decl_DerivesFromAssignment_3_2_1 extends AssignmentToken  {
 
  public Interface_decl_DerivesFromAssignment_3_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInterface_declAccess().getDerivesFromAssignment_3_2_1();
  }

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

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

}



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

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

}

// (contains+=export | ";")*
protected class Interface_decl_Alternatives_5 extends AlternativesToken {

  public Interface_decl_Alternatives_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getInterface_declAccess().getAlternatives_5();
  }

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

}

// contains+=export
protected class Interface_decl_ContainsAssignment_5_0 extends AssignmentToken  {
 
  public Interface_decl_ContainsAssignment_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInterface_declAccess().getContainsAssignment_5_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("contains",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("contains");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getExportRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getInterface_declAccess().getContainsExportParserRuleCall_5_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 Interface_decl_Alternatives_5(lastRuleCallOrigin, next, actIndex, consumed);
      case 1: return new Interface_decl_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}


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

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

}


/************ end Rule interface_decl ****************/


/************ begin Rule interface_fwd ****************
*
* interface_fwd returns IDL::ForwardDef:
*   ("abstract" | "local")? "interface" identifier=ID;
*
**/

// ("abstract" | "local")? "interface" identifier=ID
protected class Interface_fwd_Group extends GroupToken {
 
  public Interface_fwd_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getInterface_fwdAccess().getGroup();
  }

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

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

}

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

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

}

// identifier=ID
protected class Interface_fwd_IdentifierAssignment_2 extends AssignmentToken  {
 
  public Interface_fwd_IdentifierAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInterface_fwdAccess().getIdentifierAssignment_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Interface_fwd_InterfaceKeyword_1(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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInterface_fwdAccess().getIdentifierIDTerminalRuleCall_2_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getInterface_fwdAccess().getIdentifierIDTerminalRuleCall_2_0();
      return obj;
    }
    return null;
  }

}


/************ end Rule interface_fwd ****************/


/************ begin Rule export ****************
*
* //  |  type_id_decl ';'
* //  |  type_prefix_decl ';'
* export returns IDL::Contained:
*   type_decl ";" | const_decl ";" | except_decl ";" | attr_decl ";" | op_decl ";";
*
**/

// type_decl ";" | const_decl ";" | except_decl ";" | attr_decl ";" | op_decl ";"
protected class Export_Alternatives extends AlternativesToken {

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Export_Group_0(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Export_Group_1(lastRuleCallOrigin, this, 1, inst);
      case 2: return new Export_Group_2(lastRuleCallOrigin, this, 2, inst);
      case 3: return new Export_Group_3(lastRuleCallOrigin, this, 3, inst);
      case 4: return new Export_Group_4(lastRuleCallOrigin, this, 4, inst);
      default: return null;
   
  }

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getAlias_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getAttr_specRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getConst_declRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getEnum_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getExcept_declRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getOp_declRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getStruct_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnion_typeRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// type_decl ";"
protected class Export_Group_0 extends GroupToken {
 
  public Export_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getExportAccess().getGroup_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getAlias_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getEnum_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getStruct_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnion_typeRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// type_decl
protected class Export_Type_declParserRuleCall_0_0 extends RuleCallToken {
 
  public Export_Type_declParserRuleCall_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getExportAccess().getType_declParserRuleCall_0_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Type_decl_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);
   
  } 
}

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

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

}


// const_decl ";"
protected class Export_Group_1 extends GroupToken {
 
  public Export_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getExportAccess().getGroup_1();
  }

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

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

}

// const_decl
protected class Export_Const_declParserRuleCall_1_0 extends RuleCallToken {
 
  public Export_Const_declParserRuleCall_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getExportAccess().getConst_declParserRuleCall_1_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Const_decl_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);
   
  } 
}

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

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

}


// except_decl ";"
protected class Export_Group_2 extends GroupToken {
 
  public Export_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getExportAccess().getGroup_2();
  }

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

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

}

// except_decl
protected class Export_Except_declParserRuleCall_2_0 extends RuleCallToken {
 
  public Export_Except_declParserRuleCall_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getExportAccess().getExcept_declParserRuleCall_2_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Except_decl_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);
   
  } 
}

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

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

}


// attr_decl ";"
protected class Export_Group_3 extends GroupToken {
 
  public Export_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getExportAccess().getGroup_3();
  }

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

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

}

// attr_decl
protected class Export_Attr_declParserRuleCall_3_0 extends RuleCallToken {
 
  public Export_Attr_declParserRuleCall_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getExportAccess().getAttr_declParserRuleCall_3_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Attr_decl_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);
   
  } 
}

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

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

}


// op_decl ";"
protected class Export_Group_4 extends GroupToken {
 
  public Export_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getExportAccess().getGroup_4();
  }

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

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

}

// op_decl
protected class Export_Op_declParserRuleCall_4_0 extends RuleCallToken {
 
  public Export_Op_declParserRuleCall_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getExportAccess().getOp_declParserRuleCall_4_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Op_decl_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);
   
  } 
}

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

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

}



/************ end Rule export ****************/


/************ begin Rule op_decl ****************
*
* op_decl returns IDL::OperationDef:
*   isOneway?="oneway"? (containedType=op_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID "("
*   (parameters+=param_decl ("," parameters+=param_decl)*)? ")" ("raises" "(" canRaise+=[IDL::ExceptionDef] (","
*   canRaise+=[IDL::ExceptionDef])* ")")? ("context" "(" contexts+=STRING ("," contexts+=STRING)* ")")?;
*
**/

// isOneway?="oneway"? (containedType=op_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID "("
// (parameters+=param_decl ("," parameters+=param_decl)*)? ")" ("raises" "(" canRaise+=[IDL::ExceptionDef] (","
// canRaise+=[IDL::ExceptionDef])* ")")? ("context" "(" contexts+=STRING ("," contexts+=STRING)* ")")?
protected class Op_decl_Group extends GroupToken {
 
  public Op_decl_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getOp_declAccess().getGroup();
  }

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

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

}

// isOneway?="oneway"?
protected class Op_decl_IsOnewayAssignment_0 extends AssignmentToken  {
 
  public Op_decl_IsOnewayAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOp_declAccess().getIsOnewayAssignment_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("isOneway",false)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("isOneway");
    if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getOp_declAccess().getIsOnewayOnewayKeyword_0_0();
      return obj;
    }
    return null;
  }

}

// containedType=op_type_spec | sharedType=[IDL::TypedefDef]
protected class Op_decl_Alternatives_1 extends AlternativesToken {

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

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

}

// containedType=op_type_spec
protected class Op_decl_ContainedTypeAssignment_1_0 extends AssignmentToken  {
 
  public Op_decl_ContainedTypeAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOp_declAccess().getContainedTypeAssignment_1_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getOp_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getOp_declAccess().getContainedTypeOp_type_specParserRuleCall_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 Op_decl_IsOnewayAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index - 1, consumed);
   
  } 
}

// sharedType=[IDL::TypedefDef]
protected class Op_decl_SharedTypeAssignment_1_1 extends AssignmentToken  {
 
  public Op_decl_SharedTypeAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOp_declAccess().getSharedTypeAssignment_1_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Op_decl_IsOnewayAssignment_0(lastRuleCallOrigin, this, 0, inst);
      default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
   
  }

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

}


// identifier=ID
protected class Op_decl_IdentifierAssignment_2 extends AssignmentToken  {
 
  public Op_decl_IdentifierAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOp_declAccess().getIdentifierAssignment_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Op_decl_Alternatives_1(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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getOp_declAccess().getIdentifierIDTerminalRuleCall_2_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getOp_declAccess().getIdentifierIDTerminalRuleCall_2_0();
      return obj;
    }
    return null;
  }

}

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

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

}

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

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

}

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Param_decl_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.getParam_declRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getOp_declAccess().getParametersParam_declParserRuleCall_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 Op_decl_LeftParenthesisKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}

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

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

}

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Param_decl_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.getParam_declRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getOp_declAccess().getParametersParam_declParserRuleCall_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 Op_decl_CommaKeyword_4_1_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}



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

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

}

// ("raises" "(" canRaise+=[IDL::ExceptionDef] ("," canRaise+=[IDL::ExceptionDef])* ")")?
protected class Op_decl_Group_6 extends GroupToken {
 
  public Op_decl_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getOp_declAccess().getGroup_6();
  }

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

}

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

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

}

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

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

}

// canRaise+=[IDL::ExceptionDef]
protected class Op_decl_CanRaiseAssignment_6_2 extends AssignmentToken  {
 
  public Op_decl_CanRaiseAssignment_6_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOp_declAccess().getCanRaiseAssignment_6_2();
  }

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

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

}

// ("," canRaise+=[IDL::ExceptionDef])*
protected class Op_decl_Group_6_3 extends GroupToken {
 
  public Op_decl_Group_6_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getOp_declAccess().getGroup_6_3();
  }

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

}

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

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

}

// canRaise+=[IDL::ExceptionDef]
protected class Op_decl_CanRaiseAssignment_6_3_1 extends AssignmentToken  {
 
  public Op_decl_CanRaiseAssignment_6_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOp_declAccess().getCanRaiseAssignment_6_3_1();
  }

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

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

}


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

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

}


// ("context" "(" contexts+=STRING ("," contexts+=STRING)* ")")?
protected class Op_decl_Group_7 extends GroupToken {
 
  public Op_decl_Group_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getOp_declAccess().getGroup_7();
  }

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

}

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

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

}

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

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

}

// contexts+=STRING
protected class Op_decl_ContextsAssignment_7_2 extends AssignmentToken  {
 
  public Op_decl_ContextsAssignment_7_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOp_declAccess().getContextsAssignment_7_2();
  }

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

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

}

// ("," contexts+=STRING)*
protected class Op_decl_Group_7_3 extends GroupToken {
 
  public Op_decl_Group_7_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getOp_declAccess().getGroup_7_3();
  }

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

}

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

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

}

// contexts+=STRING
protected class Op_decl_ContextsAssignment_7_3_1 extends AssignmentToken  {
 
  public Op_decl_ContextsAssignment_7_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOp_declAccess().getContextsAssignment_7_3_1();
  }

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

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

}


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

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

}



/************ end Rule op_decl ****************/


/************ begin Rule op_type_spec ****************
*
* op_type_spec returns IDL::IDLType:
*   base_type_spec | {IDL::PrimitiveDef} kind=void_type;
*
**/

// base_type_spec | {IDL::PrimitiveDef} kind=void_type
protected class Op_type_spec_Alternatives extends AlternativesToken {

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

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

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

}

// base_type_spec
protected class Op_type_spec_Base_type_specParserRuleCall_0 extends RuleCallToken {
 
  public Op_type_spec_Base_type_specParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getOp_type_specAccess().getBase_type_specParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Base_type_spec_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);
   
  } 
}

// {IDL::PrimitiveDef} kind=void_type
protected class Op_type_spec_Group_1 extends GroupToken {
 
  public Op_type_spec_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getOp_type_specAccess().getGroup_1();
  }

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

}

// {IDL::PrimitiveDef}
protected class Op_type_spec_PrimitiveDefAction_1_0 extends ActionToken  {

  public Op_type_spec_PrimitiveDefAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getOp_type_specAccess().getPrimitiveDefAction_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(!eObjectConsumer.isConsumed()) return null;
    return eObjectConsumer;
  }
}

// kind=void_type
protected class Op_type_spec_KindAssignment_1_1 extends AssignmentToken  {
 
  public Op_type_spec_KindAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOp_type_specAccess().getKindAssignment_1_1();
  }

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

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

}



/************ end Rule op_type_spec ****************/


/************ begin Rule param_decl ****************
*
* param_decl returns IDL::ParameterDef:
*   direction=param_attribute (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID;
*
**/

// direction=param_attribute (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID
protected class Param_decl_Group extends GroupToken {
 
  public Param_decl_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getParam_declAccess().getGroup();
  }

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

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

}

// direction=param_attribute
protected class Param_decl_DirectionAssignment_0 extends AssignmentToken  {
 
  public Param_decl_DirectionAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getParam_declAccess().getDirectionAssignment_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("direction",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("direction");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getParam_declAccess().getDirectionParam_attributeEnumRuleCall_0_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getParam_declAccess().getDirectionParam_attributeEnumRuleCall_0_0();
      return obj;
    }
    return null;
  }

}

// containedType=base_type_spec | sharedType=[IDL::TypedefDef]
protected class Param_decl_Alternatives_1 extends AlternativesToken {

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

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

}

// containedType=base_type_spec
protected class Param_decl_ContainedTypeAssignment_1_0 extends AssignmentToken  {
 
  public Param_decl_ContainedTypeAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getParam_declAccess().getContainedTypeAssignment_1_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getBase_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getParam_declAccess().getContainedTypeBase_type_specParserRuleCall_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 Param_decl_DirectionAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// sharedType=[IDL::TypedefDef]
protected class Param_decl_SharedTypeAssignment_1_1 extends AssignmentToken  {
 
  public Param_decl_SharedTypeAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getParam_declAccess().getSharedTypeAssignment_1_1();
  }

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

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

}


// identifier=ID
protected class Param_decl_IdentifierAssignment_2 extends AssignmentToken  {
 
  public Param_decl_IdentifierAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getParam_declAccess().getIdentifierAssignment_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Param_decl_Alternatives_1(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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getParam_declAccess().getIdentifierIDTerminalRuleCall_2_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getParam_declAccess().getIdentifierIDTerminalRuleCall_2_0();
      return obj;
    }
    return null;
  }

}


/************ end Rule param_decl ****************/


/************ begin Rule attr_decl ****************
*
* attr_decl returns IDL::AttributeDef:
*   readonly_attr_spec | attr_spec;
*
**/

// readonly_attr_spec | attr_spec
protected class Attr_decl_Alternatives extends AlternativesToken {

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

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

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

}

// readonly_attr_spec
protected class Attr_decl_Readonly_attr_specParserRuleCall_0 extends RuleCallToken {
 
  public Attr_decl_Readonly_attr_specParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getAttr_declAccess().getReadonly_attr_specParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Readonly_attr_spec_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);
   
  } 
}

// attr_spec
protected class Attr_decl_Attr_specParserRuleCall_1 extends RuleCallToken {
 
  public Attr_decl_Attr_specParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getAttr_declAccess().getAttr_specParserRuleCall_1();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Attr_spec_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 attr_decl ****************/


/************ begin Rule readonly_attr_spec ****************
*
* readonly_attr_spec returns IDL::AttributeDef:
*   isReadonly?="readonly" "attribute" (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID
*   "raises" "(" getRaises+=[IDL::ExceptionDef] ("," getRaises+=[IDL::ExceptionDef])* ")" | isReadonly?="readonly"
*   "attribute" (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID;
*
**/

// isReadonly?="readonly" "attribute" (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID "raises"
// "(" getRaises+=[IDL::ExceptionDef] ("," getRaises+=[IDL::ExceptionDef])* ")" | isReadonly?="readonly" "attribute"
// (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID
protected class Readonly_attr_spec_Alternatives extends AlternativesToken {

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

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

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

}

// isReadonly?="readonly" "attribute" (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID "raises"
// "(" getRaises+=[IDL::ExceptionDef] ("," getRaises+=[IDL::ExceptionDef])* ")"
protected class Readonly_attr_spec_Group_0 extends GroupToken {
 
  public Readonly_attr_spec_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getGroup_0();
  }

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

}

// isReadonly?="readonly"
protected class Readonly_attr_spec_IsReadonlyAssignment_0_0 extends AssignmentToken  {
 
  public Readonly_attr_spec_IsReadonlyAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getIsReadonlyAssignment_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("isReadonly",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("isReadonly");
    if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getReadonly_attr_specAccess().getIsReadonlyReadonlyKeyword_0_0_0();
      return obj;
    }
    return null;
  }

}

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

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

}

// containedType=base_type_spec | sharedType=[IDL::TypedefDef]
protected class Readonly_attr_spec_Alternatives_0_2 extends AlternativesToken {

  public Readonly_attr_spec_Alternatives_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getAlternatives_0_2();
  }

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

}

// containedType=base_type_spec
protected class Readonly_attr_spec_ContainedTypeAssignment_0_2_0 extends AssignmentToken  {
 
  public Readonly_attr_spec_ContainedTypeAssignment_0_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getContainedTypeAssignment_0_2_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getBase_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getReadonly_attr_specAccess().getContainedTypeBase_type_specParserRuleCall_0_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 Readonly_attr_spec_AttributeKeyword_0_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// sharedType=[IDL::TypedefDef]
protected class Readonly_attr_spec_SharedTypeAssignment_0_2_1 extends AssignmentToken  {
 
  public Readonly_attr_spec_SharedTypeAssignment_0_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getSharedTypeAssignment_0_2_1();
  }

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

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

}


// identifier=ID
protected class Readonly_attr_spec_IdentifierAssignment_0_3 extends AssignmentToken  {
 
  public Readonly_attr_spec_IdentifierAssignment_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getIdentifierAssignment_0_3();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Readonly_attr_spec_Alternatives_0_2(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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getReadonly_attr_specAccess().getIdentifierIDTerminalRuleCall_0_3_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getReadonly_attr_specAccess().getIdentifierIDTerminalRuleCall_0_3_0();
      return obj;
    }
    return null;
  }

}

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

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

}

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

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

}

// getRaises+=[IDL::ExceptionDef]
protected class Readonly_attr_spec_GetRaisesAssignment_0_6 extends AssignmentToken  {
 
  public Readonly_attr_spec_GetRaisesAssignment_0_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getGetRaisesAssignment_0_6();
  }

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

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

}

// ("," getRaises+=[IDL::ExceptionDef])*
protected class Readonly_attr_spec_Group_0_7 extends GroupToken {
 
  public Readonly_attr_spec_Group_0_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getGroup_0_7();
  }

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

}

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

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

}

// getRaises+=[IDL::ExceptionDef]
protected class Readonly_attr_spec_GetRaisesAssignment_0_7_1 extends AssignmentToken  {
 
  public Readonly_attr_spec_GetRaisesAssignment_0_7_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getGetRaisesAssignment_0_7_1();
  }

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

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

}


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

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

}


// isReadonly?="readonly" "attribute" (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID
protected class Readonly_attr_spec_Group_1 extends GroupToken {
 
  public Readonly_attr_spec_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getGroup_1();
  }

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

}

// isReadonly?="readonly"
protected class Readonly_attr_spec_IsReadonlyAssignment_1_0 extends AssignmentToken  {
 
  public Readonly_attr_spec_IsReadonlyAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getIsReadonlyAssignment_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("isReadonly",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("isReadonly");
    if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getReadonly_attr_specAccess().getIsReadonlyReadonlyKeyword_1_0_0();
      return obj;
    }
    return null;
  }

}

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

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

}

// containedType=base_type_spec | sharedType=[IDL::TypedefDef]
protected class Readonly_attr_spec_Alternatives_1_2 extends AlternativesToken {

  public Readonly_attr_spec_Alternatives_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getAlternatives_1_2();
  }

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

}

// containedType=base_type_spec
protected class Readonly_attr_spec_ContainedTypeAssignment_1_2_0 extends AssignmentToken  {
 
  public Readonly_attr_spec_ContainedTypeAssignment_1_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getContainedTypeAssignment_1_2_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getBase_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getReadonly_attr_specAccess().getContainedTypeBase_type_specParserRuleCall_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 Readonly_attr_spec_AttributeKeyword_1_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// sharedType=[IDL::TypedefDef]
protected class Readonly_attr_spec_SharedTypeAssignment_1_2_1 extends AssignmentToken  {
 
  public Readonly_attr_spec_SharedTypeAssignment_1_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getSharedTypeAssignment_1_2_1();
  }

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

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

}


// identifier=ID
protected class Readonly_attr_spec_IdentifierAssignment_1_3 extends AssignmentToken  {
 
  public Readonly_attr_spec_IdentifierAssignment_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getReadonly_attr_specAccess().getIdentifierAssignment_1_3();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Readonly_attr_spec_Alternatives_1_2(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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getReadonly_attr_specAccess().getIdentifierIDTerminalRuleCall_1_3_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getReadonly_attr_specAccess().getIdentifierIDTerminalRuleCall_1_3_0();
      return obj;
    }
    return null;
  }

}



/************ end Rule readonly_attr_spec ****************/


/************ begin Rule attr_spec ****************
*
* attr_spec returns IDL::AttributeDef:
*   "attribute" (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID ("getraises" "("
*   getRaises+=[IDL::ExceptionDef] ("," getRaises+=[IDL::ExceptionDef])* ")" ("setraises" "("
*   setRaises+=[IDL::ExceptionDef] ("," setRaises+=[IDL::ExceptionDef])* ")")? | "setraises" "("
*   setRaises+=[IDL::ExceptionDef] ("," setRaises+=[IDL::ExceptionDef])* ")") | "attribute" (containedType=base_type_spec
*   | sharedType=[IDL::TypedefDef]) identifier=ID;
*
**/

// "attribute" (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID ("getraises" "("
// getRaises+=[IDL::ExceptionDef] ("," getRaises+=[IDL::ExceptionDef])* ")" ("setraises" "("
// setRaises+=[IDL::ExceptionDef] ("," setRaises+=[IDL::ExceptionDef])* ")")? | "setraises" "("
// setRaises+=[IDL::ExceptionDef] ("," setRaises+=[IDL::ExceptionDef])* ")") | "attribute" (containedType=base_type_spec |
// sharedType=[IDL::TypedefDef]) identifier=ID
protected class Attr_spec_Alternatives extends AlternativesToken {

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

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

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

}

// "attribute" (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID ("getraises" "("
// getRaises+=[IDL::ExceptionDef] ("," getRaises+=[IDL::ExceptionDef])* ")" ("setraises" "("
// setRaises+=[IDL::ExceptionDef] ("," setRaises+=[IDL::ExceptionDef])* ")")? | "setraises" "("
// setRaises+=[IDL::ExceptionDef] ("," setRaises+=[IDL::ExceptionDef])* ")")
protected class Attr_spec_Group_0 extends GroupToken {
 
  public Attr_spec_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getGroup_0();
  }

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

}

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

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

}

// containedType=base_type_spec | sharedType=[IDL::TypedefDef]
protected class Attr_spec_Alternatives_0_1 extends AlternativesToken {

  public Attr_spec_Alternatives_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getAlternatives_0_1();
  }

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

}

// containedType=base_type_spec
protected class Attr_spec_ContainedTypeAssignment_0_1_0 extends AssignmentToken  {
 
  public Attr_spec_ContainedTypeAssignment_0_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getContainedTypeAssignment_0_1_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getBase_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getAttr_specAccess().getContainedTypeBase_type_specParserRuleCall_0_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 Attr_spec_AttributeKeyword_0_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// sharedType=[IDL::TypedefDef]
protected class Attr_spec_SharedTypeAssignment_0_1_1 extends AssignmentToken  {
 
  public Attr_spec_SharedTypeAssignment_0_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getSharedTypeAssignment_0_1_1();
  }

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

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

}


// identifier=ID
protected class Attr_spec_IdentifierAssignment_0_2 extends AssignmentToken  {
 
  public Attr_spec_IdentifierAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getIdentifierAssignment_0_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Attr_spec_Alternatives_0_1(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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttr_specAccess().getIdentifierIDTerminalRuleCall_0_2_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getAttr_specAccess().getIdentifierIDTerminalRuleCall_0_2_0();
      return obj;
    }
    return null;
  }

}

// "getraises" "(" getRaises+=[IDL::ExceptionDef] ("," getRaises+=[IDL::ExceptionDef])* ")" ("setraises" "("
// setRaises+=[IDL::ExceptionDef] ("," setRaises+=[IDL::ExceptionDef])* ")")? | "setraises" "("
// setRaises+=[IDL::ExceptionDef] ("," setRaises+=[IDL::ExceptionDef])* ")"
protected class Attr_spec_Alternatives_0_3 extends AlternativesToken {

  public Attr_spec_Alternatives_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getAlternatives_0_3();
  }

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

}

// "getraises" "(" getRaises+=[IDL::ExceptionDef] ("," getRaises+=[IDL::ExceptionDef])* ")" ("setraises" "("
// setRaises+=[IDL::ExceptionDef] ("," setRaises+=[IDL::ExceptionDef])* ")")?
protected class Attr_spec_Group_0_3_0 extends GroupToken {
 
  public Attr_spec_Group_0_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getGroup_0_3_0();
  }

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

}

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

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

}

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

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

}

// getRaises+=[IDL::ExceptionDef]
protected class Attr_spec_GetRaisesAssignment_0_3_0_2 extends AssignmentToken  {
 
  public Attr_spec_GetRaisesAssignment_0_3_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getGetRaisesAssignment_0_3_0_2();
  }

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

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

}

// ("," getRaises+=[IDL::ExceptionDef])*
protected class Attr_spec_Group_0_3_0_3 extends GroupToken {
 
  public Attr_spec_Group_0_3_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getGroup_0_3_0_3();
  }

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

}

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

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

}

// getRaises+=[IDL::ExceptionDef]
protected class Attr_spec_GetRaisesAssignment_0_3_0_3_1 extends AssignmentToken  {
 
  public Attr_spec_GetRaisesAssignment_0_3_0_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getGetRaisesAssignment_0_3_0_3_1();
  }

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

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

}


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

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

}

// ("setraises" "(" setRaises+=[IDL::ExceptionDef] ("," setRaises+=[IDL::ExceptionDef])* ")")?
protected class Attr_spec_Group_0_3_0_5 extends GroupToken {
 
  public Attr_spec_Group_0_3_0_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getGroup_0_3_0_5();
  }

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

}

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

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

}

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

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

}

// setRaises+=[IDL::ExceptionDef]
protected class Attr_spec_SetRaisesAssignment_0_3_0_5_2 extends AssignmentToken  {
 
  public Attr_spec_SetRaisesAssignment_0_3_0_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getSetRaisesAssignment_0_3_0_5_2();
  }

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

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

}

// ("," setRaises+=[IDL::ExceptionDef])*
protected class Attr_spec_Group_0_3_0_5_3 extends GroupToken {
 
  public Attr_spec_Group_0_3_0_5_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getGroup_0_3_0_5_3();
  }

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

}

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

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

}

// setRaises+=[IDL::ExceptionDef]
protected class Attr_spec_SetRaisesAssignment_0_3_0_5_3_1 extends AssignmentToken  {
 
  public Attr_spec_SetRaisesAssignment_0_3_0_5_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getSetRaisesAssignment_0_3_0_5_3_1();
  }

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

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

}


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

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

}



// "setraises" "(" setRaises+=[IDL::ExceptionDef] ("," setRaises+=[IDL::ExceptionDef])* ")"
protected class Attr_spec_Group_0_3_1 extends GroupToken {
 
  public Attr_spec_Group_0_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getGroup_0_3_1();
  }

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

}

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

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

}

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

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

}

// setRaises+=[IDL::ExceptionDef]
protected class Attr_spec_SetRaisesAssignment_0_3_1_2 extends AssignmentToken  {
 
  public Attr_spec_SetRaisesAssignment_0_3_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getSetRaisesAssignment_0_3_1_2();
  }

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

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

}

// ("," setRaises+=[IDL::ExceptionDef])*
protected class Attr_spec_Group_0_3_1_3 extends GroupToken {
 
  public Attr_spec_Group_0_3_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getGroup_0_3_1_3();
  }

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

}

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

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

}

// setRaises+=[IDL::ExceptionDef]
protected class Attr_spec_SetRaisesAssignment_0_3_1_3_1 extends AssignmentToken  {
 
  public Attr_spec_SetRaisesAssignment_0_3_1_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getSetRaisesAssignment_0_3_1_3_1();
  }

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

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

}


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

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

}




// "attribute" (containedType=base_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID
protected class Attr_spec_Group_1 extends GroupToken {
 
  public Attr_spec_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getGroup_1();
  }

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

}

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

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

}

// containedType=base_type_spec | sharedType=[IDL::TypedefDef]
protected class Attr_spec_Alternatives_1_1 extends AlternativesToken {

  public Attr_spec_Alternatives_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getAlternatives_1_1();
  }

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

}

// containedType=base_type_spec
protected class Attr_spec_ContainedTypeAssignment_1_1_0 extends AssignmentToken  {
 
  public Attr_spec_ContainedTypeAssignment_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getContainedTypeAssignment_1_1_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getBase_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getAttr_specAccess().getContainedTypeBase_type_specParserRuleCall_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 Attr_spec_AttributeKeyword_1_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// sharedType=[IDL::TypedefDef]
protected class Attr_spec_SharedTypeAssignment_1_1_1 extends AssignmentToken  {
 
  public Attr_spec_SharedTypeAssignment_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getSharedTypeAssignment_1_1_1();
  }

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

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

}


// identifier=ID
protected class Attr_spec_IdentifierAssignment_1_2 extends AssignmentToken  {
 
  public Attr_spec_IdentifierAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAttr_specAccess().getIdentifierAssignment_1_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Attr_spec_Alternatives_1_1(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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttr_specAccess().getIdentifierIDTerminalRuleCall_1_2_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getAttr_specAccess().getIdentifierIDTerminalRuleCall_1_2_0();
      return obj;
    }
    return null;
  }

}



/************ end Rule attr_spec ****************/


/************ begin Rule except_decl ****************
*
* except_decl returns IDL::ExceptionDef:
*   "exception" identifier=ID "{" members+=member* "}";
*
**/

// "exception" identifier=ID "{" members+=member* "}"
protected class Except_decl_Group extends GroupToken {
 
  public Except_decl_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getExcept_declAccess().getGroup();
  }

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

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

}

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

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

}

// identifier=ID
protected class Except_decl_IdentifierAssignment_1 extends AssignmentToken  {
 
  public Except_decl_IdentifierAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getExcept_declAccess().getIdentifierAssignment_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Except_decl_ExceptionKeyword_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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getExcept_declAccess().getIdentifierIDTerminalRuleCall_1_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getExcept_declAccess().getIdentifierIDTerminalRuleCall_1_0();
      return obj;
    }
    return null;
  }

}

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

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

}

// members+=member*
protected class Except_decl_MembersAssignment_3 extends AssignmentToken  {
 
  public Except_decl_MembersAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getExcept_declAccess().getMembersAssignment_3();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("members",false)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("members");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getMemberRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getExcept_declAccess().getMembersMemberParserRuleCall_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 Except_decl_MembersAssignment_3(lastRuleCallOrigin, next, actIndex, consumed);
      case 1: return new Except_decl_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}


/************ end Rule except_decl ****************/


/************ begin Rule type_decl ****************
*
* type_decl returns IDL::TypedefDef:
*   alias_type | struct_type | union_type | enum_type | "native" ID | constr_forward_decl;
*
**/

// alias_type | struct_type | union_type | enum_type | "native" ID | constr_forward_decl
protected class Type_decl_Alternatives extends AlternativesToken {

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Type_decl_Alias_typeParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Type_decl_Struct_typeParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
      case 2: return new Type_decl_Union_typeParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
      case 3: return new Type_decl_Enum_typeParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
      case 4: return new Type_decl_Constr_forward_declParserRuleCall_5(lastRuleCallOrigin, this, 4, inst);
      default: return null;
   
  }

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getAlias_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getEnum_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getStruct_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnion_typeRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// alias_type
protected class Type_decl_Alias_typeParserRuleCall_0 extends RuleCallToken {
 
  public Type_decl_Alias_typeParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getType_declAccess().getAlias_typeParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getAlias_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Alias_type_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);
   
  } 
}

// struct_type
protected class Type_decl_Struct_typeParserRuleCall_1 extends RuleCallToken {
 
  public Type_decl_Struct_typeParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getType_declAccess().getStruct_typeParserRuleCall_1();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getStruct_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Struct_type_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);
   
  } 
}

// union_type
protected class Type_decl_Union_typeParserRuleCall_2 extends RuleCallToken {
 
  public Type_decl_Union_typeParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getType_declAccess().getUnion_typeParserRuleCall_2();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getUnion_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Union_type_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);
   
  } 
}

// enum_type
protected class Type_decl_Enum_typeParserRuleCall_3 extends RuleCallToken {
 
  public Type_decl_Enum_typeParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getType_declAccess().getEnum_typeParserRuleCall_3();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getEnum_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Enum_type_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);
   
  } 
}

// constr_forward_decl
protected class Type_decl_Constr_forward_declParserRuleCall_5 extends UnassignedTextToken {

  public Type_decl_Constr_forward_declParserRuleCall_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getType_declAccess().getConstr_forward_declParserRuleCall_5();
  }

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

}


/************ end Rule type_decl ****************/


/************ begin Rule alias_type ****************
*
* alias_type returns IDL::AliasDef:
*   "typedef" containedType=array_type_spec | "typedef" (containedType=simple_type_spec | sharedType=[IDL::TypedefDef])
*   identifier=ID;
*
**/

// "typedef" containedType=array_type_spec | "typedef" (containedType=simple_type_spec | sharedType=[IDL::TypedefDef])
// identifier=ID
protected class Alias_type_Alternatives extends AlternativesToken {

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

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

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

}

// "typedef" containedType=array_type_spec
protected class Alias_type_Group_0 extends GroupToken {
 
  public Alias_type_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAlias_typeAccess().getGroup_0();
  }

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

}

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

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

}

// containedType=array_type_spec
protected class Alias_type_ContainedTypeAssignment_0_1 extends AssignmentToken  {
 
  public Alias_type_ContainedTypeAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAlias_typeAccess().getContainedTypeAssignment_0_1();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getArray_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getAlias_typeAccess().getContainedTypeArray_type_specParserRuleCall_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 Alias_type_TypedefKeyword_0_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}


// "typedef" (containedType=simple_type_spec | sharedType=[IDL::TypedefDef]) identifier=ID
protected class Alias_type_Group_1 extends GroupToken {
 
  public Alias_type_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAlias_typeAccess().getGroup_1();
  }

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

}

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

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

}

// containedType=simple_type_spec | sharedType=[IDL::TypedefDef]
protected class Alias_type_Alternatives_1_1 extends AlternativesToken {

  public Alias_type_Alternatives_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getAlias_typeAccess().getAlternatives_1_1();
  }

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

}

// containedType=simple_type_spec
protected class Alias_type_ContainedTypeAssignment_1_1_0 extends AssignmentToken  {
 
  public Alias_type_ContainedTypeAssignment_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAlias_typeAccess().getContainedTypeAssignment_1_1_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getSimple_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getAlias_typeAccess().getContainedTypeSimple_type_specParserRuleCall_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 Alias_type_TypedefKeyword_1_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// sharedType=[IDL::TypedefDef]
protected class Alias_type_SharedTypeAssignment_1_1_1 extends AssignmentToken  {
 
  public Alias_type_SharedTypeAssignment_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAlias_typeAccess().getSharedTypeAssignment_1_1_1();
  }

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

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

}


// identifier=ID
protected class Alias_type_IdentifierAssignment_1_2 extends AssignmentToken  {
 
  public Alias_type_IdentifierAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAlias_typeAccess().getIdentifierAssignment_1_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Alias_type_Alternatives_1_1(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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAlias_typeAccess().getIdentifierIDTerminalRuleCall_1_2_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getAlias_typeAccess().getIdentifierIDTerminalRuleCall_1_2_0();
      return obj;
    }
    return null;
  }

}



/************ end Rule alias_type ****************/


/************ begin Rule array_type_spec ****************
*
* / *id_array
*   :  ID ('['const_exp']')+
*   ;* /array_type_spec returns IDL::ArrayDef:
*   (containedType=simple_type_spec | sharedType=[IDL::TypedefDef]) name=ID ("[" bounds+=const_exp "]")+;
*
**/

// (containedType=simple_type_spec | sharedType=[IDL::TypedefDef]) name=ID ("[" bounds+=const_exp "]")+
protected class Array_type_spec_Group extends GroupToken {
 
  public Array_type_spec_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getArray_type_specAccess().getGroup();
  }

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

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

}

// containedType=simple_type_spec | sharedType=[IDL::TypedefDef]
protected class Array_type_spec_Alternatives_0 extends AlternativesToken {

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

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

}

// containedType=simple_type_spec
protected class Array_type_spec_ContainedTypeAssignment_0_0 extends AssignmentToken  {
 
  public Array_type_spec_ContainedTypeAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getArray_type_specAccess().getContainedTypeAssignment_0_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getSimple_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getArray_type_specAccess().getContainedTypeSimple_type_specParserRuleCall_0_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);
   
  } 
}

// sharedType=[IDL::TypedefDef]
protected class Array_type_spec_SharedTypeAssignment_0_1 extends AssignmentToken  {
 
  public Array_type_spec_SharedTypeAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getArray_type_specAccess().getSharedTypeAssignment_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("sharedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("sharedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getArray_type_specAccess().getSharedTypeTypedefDefCrossReference_0_1_0().getType().getClassifier())) {
        type = AssignmentType.CROSS_REFERENCE;
        element = grammarAccess.getArray_type_specAccess().getSharedTypeTypedefDefCrossReference_0_1_0();
        return obj;
      }
    }
    return null;
  }

}


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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Array_type_spec_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.getArray_type_specAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getArray_type_specAccess().getNameIDTerminalRuleCall_1_0();
      return obj;
    }
    return null;
  }

}

// ("[" bounds+=const_exp "]")+
protected class Array_type_spec_Group_2 extends GroupToken {
 
  public Array_type_spec_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getArray_type_specAccess().getGroup_2();
  }

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

}

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

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

}

// bounds+=const_exp
protected class Array_type_spec_BoundsAssignment_2_1 extends AssignmentToken  {
 
  public Array_type_spec_BoundsAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getArray_type_specAccess().getBoundsAssignment_2_1();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("bounds",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("bounds");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getConst_expRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getArray_type_specAccess().getBoundsConst_expParserRuleCall_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 Array_type_spec_LeftSquareBracketKeyword_2_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}



/************ end Rule array_type_spec ****************/


/************ begin Rule simple_type_spec ****************
*
* simple_type_spec returns IDL::IDLType:
*   base_type_spec | template_type_spec;
*
**/

// base_type_spec | template_type_spec
protected class Simple_type_spec_Alternatives extends AlternativesToken {

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

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getFixed_pt_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getBase_type_specRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getSequence_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getStringdef_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getWide_stringdef_typeRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// base_type_spec
protected class Simple_type_spec_Base_type_specParserRuleCall_0 extends RuleCallToken {
 
  public Simple_type_spec_Base_type_specParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getSimple_type_specAccess().getBase_type_specParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getBase_type_specRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Base_type_spec_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);
   
  } 
}

// template_type_spec
protected class Simple_type_spec_Template_type_specParserRuleCall_1 extends RuleCallToken {
 
  public Simple_type_spec_Template_type_specParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getSimple_type_specAccess().getTemplate_type_specParserRuleCall_1();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getFixed_pt_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getSequence_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getStringdef_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getWide_stringdef_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Template_type_spec_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 simple_type_spec ****************/


/************ begin Rule base_type_spec ****************
*
* base_type_spec returns IDL::PrimitiveDef:
*   primitive_def | kind=object_type;
*
**/

// primitive_def | kind=object_type
protected class Base_type_spec_Alternatives extends AlternativesToken {

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

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

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

}

// primitive_def
protected class Base_type_spec_Primitive_defParserRuleCall_0 extends RuleCallToken {
 
  public Base_type_spec_Primitive_defParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getBase_type_specAccess().getPrimitive_defParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Primitive_def_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);
   
  } 
}

// kind=object_type
protected class Base_type_spec_KindAssignment_1 extends AssignmentToken  {
 
  public Base_type_spec_KindAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getBase_type_specAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getBase_type_specAccess().getKindObject_typeEnumRuleCall_1_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getBase_type_specAccess().getKindObject_typeEnumRuleCall_1_0();
      return obj;
    }
    return null;
  }

}


/************ end Rule base_type_spec ****************/


/************ begin Rule template_type_spec ****************
*
* template_type_spec returns IDL::IDLType:
*   sequence_type | stringdef_type | wide_stringdef_type | fixed_pt_type;
*
**/

// sequence_type | stringdef_type | wide_stringdef_type | fixed_pt_type
protected class Template_type_spec_Alternatives extends AlternativesToken {

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Template_type_spec_Sequence_typeParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Template_type_spec_Stringdef_typeParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
      case 2: return new Template_type_spec_Wide_stringdef_typeParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
      case 3: return new Template_type_spec_Fixed_pt_typeParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
      default: return null;
   
  }

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getFixed_pt_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getSequence_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getStringdef_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getWide_stringdef_typeRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// sequence_type
protected class Template_type_spec_Sequence_typeParserRuleCall_0 extends RuleCallToken {
 
  public Template_type_spec_Sequence_typeParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getTemplate_type_specAccess().getSequence_typeParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getSequence_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Sequence_type_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);
   
  } 
}

// stringdef_type
protected class Template_type_spec_Stringdef_typeParserRuleCall_1 extends RuleCallToken {
 
  public Template_type_spec_Stringdef_typeParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getTemplate_type_specAccess().getStringdef_typeParserRuleCall_1();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getStringdef_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Stringdef_type_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);
   
  } 
}

// wide_stringdef_type
protected class Template_type_spec_Wide_stringdef_typeParserRuleCall_2 extends RuleCallToken {
 
  public Template_type_spec_Wide_stringdef_typeParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getTemplate_type_specAccess().getWide_stringdef_typeParserRuleCall_2();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getWide_stringdef_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Wide_stringdef_type_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);
   
  } 
}

// fixed_pt_type
protected class Template_type_spec_Fixed_pt_typeParserRuleCall_3 extends RuleCallToken {
 
  public Template_type_spec_Fixed_pt_typeParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getTemplate_type_specAccess().getFixed_pt_typeParserRuleCall_3();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getFixed_pt_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Fixed_pt_type_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 template_type_spec ****************/


/************ begin Rule constr_type_spec ****************
*
* constr_type_spec returns IDL::TypedefDef:
*   struct_type | union_type | enum_type;
*
**/

// struct_type | union_type | enum_type
protected class Constr_type_spec_Alternatives extends AlternativesToken {

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

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

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

}

// struct_type
protected class Constr_type_spec_Struct_typeParserRuleCall_0 extends RuleCallToken {
 
  public Constr_type_spec_Struct_typeParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getConstr_type_specAccess().getStruct_typeParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getStruct_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Struct_type_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);
   
  } 
}

// union_type
protected class Constr_type_spec_Union_typeParserRuleCall_1 extends RuleCallToken {
 
  public Constr_type_spec_Union_typeParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getConstr_type_specAccess().getUnion_typeParserRuleCall_1();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getUnion_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Union_type_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);
   
  } 
}

// enum_type
protected class Constr_type_spec_Enum_typeParserRuleCall_2 extends RuleCallToken {
 
  public Constr_type_spec_Enum_typeParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getConstr_type_specAccess().getEnum_typeParserRuleCall_2();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getEnum_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Enum_type_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 constr_type_spec ****************/


/************ begin Rule struct_type ****************
*
* struct_type returns IDL::StructDef:
*   "struct" identifier=ID "{" members+=member+ "}";
*
**/

// "struct" identifier=ID "{" members+=member+ "}"
protected class Struct_type_Group extends GroupToken {
 
  public Struct_type_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getStruct_typeAccess().getGroup();
  }

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

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

}

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

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

}

// identifier=ID
protected class Struct_type_IdentifierAssignment_1 extends AssignmentToken  {
 
  public Struct_type_IdentifierAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getStruct_typeAccess().getIdentifierAssignment_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Struct_type_StructKeyword_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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getStruct_typeAccess().getIdentifierIDTerminalRuleCall_1_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getStruct_typeAccess().getIdentifierIDTerminalRuleCall_1_0();
      return obj;
    }
    return null;
  }

}

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

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

}

// members+=member+
protected class Struct_type_MembersAssignment_3 extends AssignmentToken  {
 
  public Struct_type_MembersAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getStruct_typeAccess().getMembersAssignment_3();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("members",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("members");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getMemberRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getStruct_typeAccess().getMembersMemberParserRuleCall_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 Struct_type_MembersAssignment_3(lastRuleCallOrigin, next, actIndex, consumed);
      case 1: return new Struct_type_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}


/************ end Rule struct_type ****************/


/************ begin Rule member ****************
*
* member returns IDL::Field:
*   containedType=array_type_spec / *identifier= id_array* / ";" | containedType=simple_type_spec identifier=ID ";" |
*   containedType=struct_type identifier=ID ";" | sharedType=[IDL::TypedefDef] identifier=ID ";";
*
**/

// containedType=array_type_spec / *identifier= id_array* / ";" | containedType=simple_type_spec identifier=ID ";" |
// containedType=struct_type identifier=ID ";" | sharedType=[IDL::TypedefDef] identifier=ID ";"
protected class Member_Alternatives extends AlternativesToken {

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Member_Group_0(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Member_Group_1(lastRuleCallOrigin, this, 1, inst);
      case 2: return new Member_Group_2(lastRuleCallOrigin, this, 2, inst);
      case 3: return new Member_Group_3(lastRuleCallOrigin, this, 3, inst);
      default: return null;
   
  }

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

}

// containedType=array_type_spec / *identifier= id_array* / ";"
protected class Member_Group_0 extends GroupToken {
 
  public Member_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getMemberAccess().getGroup_0();
  }

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

}

// containedType=array_type_spec
protected class Member_ContainedTypeAssignment_0_0 extends AssignmentToken  {
 
  public Member_ContainedTypeAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getMemberAccess().getContainedTypeAssignment_0_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getArray_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getMemberAccess().getContainedTypeArray_type_specParserRuleCall_0_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);
   
  } 
}

// / *identifier= id_array* / ";"
protected class Member_SemicolonKeyword_0_1 extends KeywordToken  {
 
  public Member_SemicolonKeyword_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Keyword getGrammarElement() {
    return grammarAccess.getMemberAccess().getSemicolonKeyword_0_1();
  }

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

}


// containedType=simple_type_spec identifier=ID ";"
protected class Member_Group_1 extends GroupToken {
 
  public Member_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getMemberAccess().getGroup_1();
  }

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

}

// containedType=simple_type_spec
protected class Member_ContainedTypeAssignment_1_0 extends AssignmentToken  {
 
  public Member_ContainedTypeAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getMemberAccess().getContainedTypeAssignment_1_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getSimple_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getMemberAccess().getContainedTypeSimple_type_specParserRuleCall_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) {
      default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
   
  } 
}

// identifier=ID
protected class Member_IdentifierAssignment_1_1 extends AssignmentToken  {
 
  public Member_IdentifierAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getMemberAccess().getIdentifierAssignment_1_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Member_ContainedTypeAssignment_1_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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getMemberAccess().getIdentifierIDTerminalRuleCall_1_1_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getMemberAccess().getIdentifierIDTerminalRuleCall_1_1_0();
      return obj;
    }
    return null;
  }

}

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

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

}


// containedType=struct_type identifier=ID ";"
protected class Member_Group_2 extends GroupToken {
 
  public Member_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getMemberAccess().getGroup_2();
  }

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

}

// containedType=struct_type
protected class Member_ContainedTypeAssignment_2_0 extends AssignmentToken  {
 
  public Member_ContainedTypeAssignment_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getMemberAccess().getContainedTypeAssignment_2_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getStruct_typeRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getMemberAccess().getContainedTypeStruct_typeParserRuleCall_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) {
      default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
   
  } 
}

// identifier=ID
protected class Member_IdentifierAssignment_2_1 extends AssignmentToken  {
 
  public Member_IdentifierAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getMemberAccess().getIdentifierAssignment_2_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Member_ContainedTypeAssignment_2_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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getMemberAccess().getIdentifierIDTerminalRuleCall_2_1_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getMemberAccess().getIdentifierIDTerminalRuleCall_2_1_0();
      return obj;
    }
    return null;
  }

}

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

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

}


// sharedType=[IDL::TypedefDef] identifier=ID ";"
protected class Member_Group_3 extends GroupToken {
 
  public Member_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getMemberAccess().getGroup_3();
  }

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

}

// sharedType=[IDL::TypedefDef]
protected class Member_SharedTypeAssignment_3_0 extends AssignmentToken  {
 
  public Member_SharedTypeAssignment_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getMemberAccess().getSharedTypeAssignment_3_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("sharedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("sharedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getMemberAccess().getSharedTypeTypedefDefCrossReference_3_0_0().getType().getClassifier())) {
        type = AssignmentType.CROSS_REFERENCE;
        element = grammarAccess.getMemberAccess().getSharedTypeTypedefDefCrossReference_3_0_0();
        return obj;
      }
    }
    return null;
  }

}

// identifier=ID
protected class Member_IdentifierAssignment_3_1 extends AssignmentToken  {
 
  public Member_IdentifierAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getMemberAccess().getIdentifierAssignment_3_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Member_SharedTypeAssignment_3_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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getMemberAccess().getIdentifierIDTerminalRuleCall_3_1_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getMemberAccess().getIdentifierIDTerminalRuleCall_3_1_0();
      return obj;
    }
    return null;
  }

}

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

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

}



/************ end Rule member ****************/


/************ begin Rule union_type ****************
*
* union_type returns IDL::UnionDef:
*   "union" identifier=ID "switch" "(" (containedDiscrim=switch_type_spec_cont | sharedDiscrim=[IDL::EnumDef]) ")" "{"
*   unionMembers+=case_stmt+ "}";
*
**/

// "union" identifier=ID "switch" "(" (containedDiscrim=switch_type_spec_cont | sharedDiscrim=[IDL::EnumDef]) ")" "{"
// unionMembers+=case_stmt+ "}"
protected class Union_type_Group extends GroupToken {
 
  public Union_type_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getUnion_typeAccess().getGroup();
  }

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

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

}

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

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

}

// identifier=ID
protected class Union_type_IdentifierAssignment_1 extends AssignmentToken  {
 
  public Union_type_IdentifierAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getUnion_typeAccess().getIdentifierAssignment_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Union_type_UnionKeyword_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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getUnion_typeAccess().getIdentifierIDTerminalRuleCall_1_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getUnion_typeAccess().getIdentifierIDTerminalRuleCall_1_0();
      return obj;
    }
    return null;
  }

}

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

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

}

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

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

}

// containedDiscrim=switch_type_spec_cont | sharedDiscrim=[IDL::EnumDef]
protected class Union_type_Alternatives_4 extends AlternativesToken {

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

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

}

// containedDiscrim=switch_type_spec_cont
protected class Union_type_ContainedDiscrimAssignment_4_0 extends AssignmentToken  {
 
  public Union_type_ContainedDiscrimAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getUnion_typeAccess().getContainedDiscrimAssignment_4_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedDiscrim",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedDiscrim");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getSwitch_type_spec_contRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getUnion_typeAccess().getContainedDiscrimSwitch_type_spec_contParserRuleCall_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 Union_type_LeftParenthesisKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// sharedDiscrim=[IDL::EnumDef]
protected class Union_type_SharedDiscrimAssignment_4_1 extends AssignmentToken  {
 
  public Union_type_SharedDiscrimAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getUnion_typeAccess().getSharedDiscrimAssignment_4_1();
  }

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

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

}


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

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

}

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

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

}

// unionMembers+=case_stmt+
protected class Union_type_UnionMembersAssignment_7 extends AssignmentToken  {
 
  public Union_type_UnionMembersAssignment_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getUnion_typeAccess().getUnionMembersAssignment_7();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("unionMembers",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("unionMembers");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getCase_stmtRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getUnion_typeAccess().getUnionMembersCase_stmtParserRuleCall_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 Union_type_UnionMembersAssignment_7(lastRuleCallOrigin, next, actIndex, consumed);
      case 1: return new Union_type_LeftCurlyBracketKeyword_6(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}


/************ end Rule union_type ****************/


/************ begin Rule switch_type_spec_cont ****************
*
* switch_type_spec_cont returns IDL::IDLType:
*   integer_type | {IDL::PrimitiveDef} kind=char_type | {IDL::PrimitiveDef} kind=boolean_type | enum_type;
*
**/

// integer_type | {IDL::PrimitiveDef} kind=char_type | {IDL::PrimitiveDef} kind=boolean_type | enum_type
protected class Switch_type_spec_cont_Alternatives extends AlternativesToken {

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Switch_type_spec_cont_Integer_typeParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Switch_type_spec_cont_Group_1(lastRuleCallOrigin, this, 1, inst);
      case 2: return new Switch_type_spec_cont_Group_2(lastRuleCallOrigin, this, 2, inst);
      case 3: return new Switch_type_spec_cont_Enum_typeParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
      default: return null;
   
  }

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

}

// integer_type
protected class Switch_type_spec_cont_Integer_typeParserRuleCall_0 extends RuleCallToken {
 
  public Switch_type_spec_cont_Integer_typeParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getSwitch_type_spec_contAccess().getInteger_typeParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getInteger_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Integer_type_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);
   
  } 
}

// {IDL::PrimitiveDef} kind=char_type
protected class Switch_type_spec_cont_Group_1 extends GroupToken {
 
  public Switch_type_spec_cont_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getSwitch_type_spec_contAccess().getGroup_1();
  }

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

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

}

// {IDL::PrimitiveDef}
protected class Switch_type_spec_cont_PrimitiveDefAction_1_0 extends ActionToken  {

  public Switch_type_spec_cont_PrimitiveDefAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getSwitch_type_spec_contAccess().getPrimitiveDefAction_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(!eObjectConsumer.isConsumed()) return null;
    return eObjectConsumer;
  }
}

// kind=char_type
protected class Switch_type_spec_cont_KindAssignment_1_1 extends AssignmentToken  {
 
  public Switch_type_spec_cont_KindAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getSwitch_type_spec_contAccess().getKindAssignment_1_1();
  }

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

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

}


// {IDL::PrimitiveDef} kind=boolean_type
protected class Switch_type_spec_cont_Group_2 extends GroupToken {
 
  public Switch_type_spec_cont_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getSwitch_type_spec_contAccess().getGroup_2();
  }

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

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

}

// {IDL::PrimitiveDef}
protected class Switch_type_spec_cont_PrimitiveDefAction_2_0 extends ActionToken  {

  public Switch_type_spec_cont_PrimitiveDefAction_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getSwitch_type_spec_contAccess().getPrimitiveDefAction_2_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;
  }
}

// kind=boolean_type
protected class Switch_type_spec_cont_KindAssignment_2_1 extends AssignmentToken  {
 
  public Switch_type_spec_cont_KindAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getSwitch_type_spec_contAccess().getKindAssignment_2_1();
  }

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

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

}


// enum_type
protected class Switch_type_spec_cont_Enum_typeParserRuleCall_3 extends RuleCallToken {
 
  public Switch_type_spec_cont_Enum_typeParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getSwitch_type_spec_contAccess().getEnum_typeParserRuleCall_3();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getEnum_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Enum_type_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 switch_type_spec_cont ****************/


/************ begin Rule case_stmt ****************
*
* case_stmt returns IDL::UnionField:
*   ("case" label+=const_exp ":" | / *label+=* / "default" ":")+ containedType=array_type_spec / *identifier= id_array* / ";"
*   | ("case" label+=const_exp ":" | / *label+=* / "default" ":")+ (containedType=simple_type_spec |
*   sharedType=[IDL::TypedefDef]) identifier=ID ";";
*
**/

// ("case" label+=const_exp ":" | / *label+=* / "default" ":")+ containedType=array_type_spec / *identifier= id_array* / ";" |
// ("case" label+=const_exp ":" | / *label+=* / "default" ":")+ (containedType=simple_type_spec |
// sharedType=[IDL::TypedefDef]) identifier=ID ";"
protected class Case_stmt_Alternatives extends AlternativesToken {

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

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

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

}

// ("case" label+=const_exp ":" | / *label+=* / "default" ":")+ containedType=array_type_spec / *identifier= id_array* / ";"
protected class Case_stmt_Group_0 extends GroupToken {
 
  public Case_stmt_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getGroup_0();
  }

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

}

// ("case" label+=const_exp ":" | / *label+=* / "default" ":")+
protected class Case_stmt_Alternatives_0_0 extends AlternativesToken {

  public Case_stmt_Alternatives_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getAlternatives_0_0();
  }

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

}

// "case" label+=const_exp ":"
protected class Case_stmt_Group_0_0_0 extends GroupToken {
 
  public Case_stmt_Group_0_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getGroup_0_0_0();
  }

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

}

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Case_stmt_Alternatives_0_0(lastRuleCallOrigin, this, 0, inst);
      default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
   
  }

}

// label+=const_exp
protected class Case_stmt_LabelAssignment_0_0_0_1 extends AssignmentToken  {
 
  public Case_stmt_LabelAssignment_0_0_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getLabelAssignment_0_0_0_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Const_exp_Or_exprParserRuleCall(this, 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(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getConst_expRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getCase_stmtAccess().getLabelConst_expParserRuleCall_0_0_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 Case_stmt_CaseKeyword_0_0_0_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}


// / *label+=* / "default" ":"
protected class Case_stmt_Group_0_0_1 extends GroupToken {
 
  public Case_stmt_Group_0_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getGroup_0_0_1();
  }

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

}

// / *label+=* / "default"
protected class Case_stmt_DefaultKeyword_0_0_1_0 extends KeywordToken  {
 
  public Case_stmt_DefaultKeyword_0_0_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Keyword getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getDefaultKeyword_0_0_1_0();
  }

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

}

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

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

}



// containedType=array_type_spec
protected class Case_stmt_ContainedTypeAssignment_0_1 extends AssignmentToken  {
 
  public Case_stmt_ContainedTypeAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getContainedTypeAssignment_0_1();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getArray_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getCase_stmtAccess().getContainedTypeArray_type_specParserRuleCall_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 Case_stmt_Alternatives_0_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// / *identifier= id_array* / ";"
protected class Case_stmt_SemicolonKeyword_0_2 extends KeywordToken  {
 
  public Case_stmt_SemicolonKeyword_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Keyword getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getSemicolonKeyword_0_2();
  }

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

}


// ("case" label+=const_exp ":" | / *label+=* / "default" ":")+ (containedType=simple_type_spec |
// sharedType=[IDL::TypedefDef]) identifier=ID ";"
protected class Case_stmt_Group_1 extends GroupToken {
 
  public Case_stmt_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getGroup_1();
  }

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

}

// ("case" label+=const_exp ":" | / *label+=* / "default" ":")+
protected class Case_stmt_Alternatives_1_0 extends AlternativesToken {

  public Case_stmt_Alternatives_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getAlternatives_1_0();
  }

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

}

// "case" label+=const_exp ":"
protected class Case_stmt_Group_1_0_0 extends GroupToken {
 
  public Case_stmt_Group_1_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getGroup_1_0_0();
  }

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

}

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Case_stmt_Alternatives_1_0(lastRuleCallOrigin, this, 0, inst);
      default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
   
  }

}

// label+=const_exp
protected class Case_stmt_LabelAssignment_1_0_0_1 extends AssignmentToken  {
 
  public Case_stmt_LabelAssignment_1_0_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getLabelAssignment_1_0_0_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Const_exp_Or_exprParserRuleCall(this, 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(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getConst_expRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getCase_stmtAccess().getLabelConst_expParserRuleCall_1_0_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 Case_stmt_CaseKeyword_1_0_0_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}


// / *label+=* / "default" ":"
protected class Case_stmt_Group_1_0_1 extends GroupToken {
 
  public Case_stmt_Group_1_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getGroup_1_0_1();
  }

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

}

// / *label+=* / "default"
protected class Case_stmt_DefaultKeyword_1_0_1_0 extends KeywordToken  {
 
  public Case_stmt_DefaultKeyword_1_0_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Keyword getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getDefaultKeyword_1_0_1_0();
  }

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

}

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

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

}



// containedType=simple_type_spec | sharedType=[IDL::TypedefDef]
protected class Case_stmt_Alternatives_1_1 extends AlternativesToken {

  public Case_stmt_Alternatives_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getAlternatives_1_1();
  }

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

}

// containedType=simple_type_spec
protected class Case_stmt_ContainedTypeAssignment_1_1_0 extends AssignmentToken  {
 
  public Case_stmt_ContainedTypeAssignment_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getContainedTypeAssignment_1_1_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getSimple_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getCase_stmtAccess().getContainedTypeSimple_type_specParserRuleCall_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 Case_stmt_Alternatives_1_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// sharedType=[IDL::TypedefDef]
protected class Case_stmt_SharedTypeAssignment_1_1_1 extends AssignmentToken  {
 
  public Case_stmt_SharedTypeAssignment_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getSharedTypeAssignment_1_1_1();
  }

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

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

}


// identifier=ID
protected class Case_stmt_IdentifierAssignment_1_2 extends AssignmentToken  {
 
  public Case_stmt_IdentifierAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getCase_stmtAccess().getIdentifierAssignment_1_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Case_stmt_Alternatives_1_1(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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCase_stmtAccess().getIdentifierIDTerminalRuleCall_1_2_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getCase_stmtAccess().getIdentifierIDTerminalRuleCall_1_2_0();
      return obj;
    }
    return null;
  }

}

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

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

}



/************ end Rule case_stmt ****************/


/************ begin Rule enum_type ****************
*
* enum_type returns IDL::EnumDef:
*   "enum" identifier=ID "{" members+=enum_member ("," members+=enum_member)* "}";
*
**/

// "enum" identifier=ID "{" members+=enum_member ("," members+=enum_member)* "}"
protected class Enum_type_Group extends GroupToken {
 
  public Enum_type_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getEnum_typeAccess().getGroup();
  }

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

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

}

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

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

}

// identifier=ID
protected class Enum_type_IdentifierAssignment_1 extends AssignmentToken  {
 
  public Enum_type_IdentifierAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getEnum_typeAccess().getIdentifierAssignment_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Enum_type_EnumKeyword_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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnum_typeAccess().getIdentifierIDTerminalRuleCall_1_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getEnum_typeAccess().getIdentifierIDTerminalRuleCall_1_0();
      return obj;
    }
    return null;
  }

}

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

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

}

// members+=enum_member
protected class Enum_type_MembersAssignment_3 extends AssignmentToken  {
 
  public Enum_type_MembersAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getEnum_typeAccess().getMembersAssignment_3();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("members",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("members");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getEnum_memberRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getEnum_typeAccess().getMembersEnum_memberParserRuleCall_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 Enum_type_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}

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

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

}

// members+=enum_member
protected class Enum_type_MembersAssignment_4_1 extends AssignmentToken  {
 
  public Enum_type_MembersAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getEnum_typeAccess().getMembersAssignment_4_1();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("members",false)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("members");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getEnum_memberRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getEnum_typeAccess().getMembersEnum_memberParserRuleCall_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 Enum_type_CommaKeyword_4_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}


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

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

}


/************ end Rule enum_type ****************/


/************ begin Rule enum_member ****************
*
* enum_member returns IDL::EnumMember:
*   identifier=ID;
*
**/

// identifier=ID
protected class Enum_member_IdentifierAssignment extends AssignmentToken  {
 
  public Enum_member_IdentifierAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getEnum_memberAccess().getIdentifierAssignment();
  }

    @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.getEnum_memberRule().getType().getClassifier())
      return null;
    if((value = eObjectConsumer.getConsumable("identifier",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("identifier");
    if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnum_memberAccess().getIdentifierIDTerminalRuleCall_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getEnum_memberAccess().getIdentifierIDTerminalRuleCall_0();
      return obj;
    }
    return null;
  }

}

/************ end Rule enum_member ****************/



/************ begin Rule const_decl ****************
*
* // FIXME: las constantes de tipo FixedDef tienen un value distinto (no const_exp) 12.34D
* // TODO: implementar plantilla xtend para completar los datos de los elementos containedType
* //       como por ejemplo el fixedDef y sus campos parte real y parte flotante
* // TODO: comprobar con xtend o cheq que el sharedType es un alias de un tipo básico!!
* const_decl returns IDL::ConstantDef:
*   "const" (containedType=const_type | sharedType=[IDL::AliasDef]) identifier=ID "=" constValue=const_exp;
*
**/

// "const" (containedType=const_type | sharedType=[IDL::AliasDef]) identifier=ID "=" constValue=const_exp
protected class Const_decl_Group extends GroupToken {
 
  public Const_decl_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getConst_declAccess().getGroup();
  }

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

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

}

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

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

}

// containedType=const_type | sharedType=[IDL::AliasDef]
protected class Const_decl_Alternatives_1 extends AlternativesToken {

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

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

}

// containedType=const_type
protected class Const_decl_ContainedTypeAssignment_1_0 extends AssignmentToken  {
 
  public Const_decl_ContainedTypeAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getConst_declAccess().getContainedTypeAssignment_1_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getConst_typeRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getConst_declAccess().getContainedTypeConst_typeParserRuleCall_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 Const_decl_ConstKeyword_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// sharedType=[IDL::AliasDef]
protected class Const_decl_SharedTypeAssignment_1_1 extends AssignmentToken  {
 
  public Const_decl_SharedTypeAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getConst_declAccess().getSharedTypeAssignment_1_1();
  }

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

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

}


// identifier=ID
protected class Const_decl_IdentifierAssignment_2 extends AssignmentToken  {
 
  public Const_decl_IdentifierAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getConst_declAccess().getIdentifierAssignment_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Const_decl_Alternatives_1(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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getConst_declAccess().getIdentifierIDTerminalRuleCall_2_0(), value, null)) {
      type = AssignmentType.TERMINAL_RULE_CALL;
      element = grammarAccess.getConst_declAccess().getIdentifierIDTerminalRuleCall_2_0();
      return obj;
    }
    return null;
  }

}

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

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

}

// constValue=const_exp
protected class Const_decl_ConstValueAssignment_4 extends AssignmentToken  {
 
  public Const_decl_ConstValueAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getConst_declAccess().getConstValueAssignment_4();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("constValue",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("constValue");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getConst_expRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getConst_declAccess().getConstValueConst_expParserRuleCall_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 Const_decl_EqualsSignKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}


/************ end Rule const_decl ****************/


/************ begin Rule const_type ****************
*
* const_type returns IDL::IDLType:
*   primitive_def | stringdef_type | wide_stringdef_type | fixed_pt_const_type;
*
**/

// primitive_def | stringdef_type | wide_stringdef_type | fixed_pt_const_type
protected class Const_type_Alternatives extends AlternativesToken {

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Const_type_Primitive_defParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Const_type_Stringdef_typeParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
      case 2: return new Const_type_Wide_stringdef_typeParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
      case 3: return new Const_type_Fixed_pt_const_typeParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
      default: return null;
   
  }

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getFixed_pt_const_typeAccess().getFixedDefAction_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getOther_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getStringdef_typeRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getWide_stringdef_typeRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// primitive_def
protected class Const_type_Primitive_defParserRuleCall_0 extends RuleCallToken {
 
  public Const_type_Primitive_defParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getConst_typeAccess().getPrimitive_defParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getOther_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Primitive_def_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);
   
  } 
}

// stringdef_type
protected class Const_type_Stringdef_typeParserRuleCall_1 extends RuleCallToken {
 
  public Const_type_Stringdef_typeParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getConst_typeAccess().getStringdef_typeParserRuleCall_1();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getStringdef_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Stringdef_type_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);
   
  } 
}

// wide_stringdef_type
protected class Const_type_Wide_stringdef_typeParserRuleCall_2 extends RuleCallToken {
 
  public Const_type_Wide_stringdef_typeParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getConst_typeAccess().getWide_stringdef_typeParserRuleCall_2();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getWide_stringdef_typeRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Wide_stringdef_type_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);
   
  } 
}

// fixed_pt_const_type
protected class Const_type_Fixed_pt_const_typeParserRuleCall_3 extends RuleCallToken {
 
  public Const_type_Fixed_pt_const_typeParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getConst_typeAccess().getFixed_pt_const_typeParserRuleCall_3();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getFixed_pt_const_typeAccess().getFixedDefAction_0().getType().getClassifier())
      return null;
    if(checkForRecursion(Fixed_pt_const_type_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 const_type ****************/


/************ begin Rule primitive_def ****************
*
* primitive_def returns IDL::PrimitiveDef:
*   integer_type | floating_pt_type | charstr_type | other_type;
*
**/

// integer_type | floating_pt_type | charstr_type | other_type
protected class Primitive_def_Alternatives extends AlternativesToken {

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Primitive_def_Integer_typeParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Primitive_def_Floating_pt_typeParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
      case 2: return new Primitive_def_Charstr_typeParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
      case 3: return new Primitive_def_Other_typeParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
      default: return null;
   
  }

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

}

// integer_type
protected class Primitive_def_Integer_typeParserRuleCall_0 extends RuleCallToken {
 
  public Primitive_def_Integer_typeParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getPrimitive_defAccess().getInteger_typeParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Integer_type_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);
   
  } 
}

// floating_pt_type
protected class Primitive_def_Floating_pt_typeParserRuleCall_1 extends RuleCallToken {
 
  public Primitive_def_Floating_pt_typeParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getPrimitive_defAccess().getFloating_pt_typeParserRuleCall_1();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Floating_pt_type_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);
   
  } 
}

// charstr_type
protected class Primitive_def_Charstr_typeParserRuleCall_2 extends RuleCallToken {
 
  public Primitive_def_Charstr_typeParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getPrimitive_defAccess().getCharstr_typeParserRuleCall_2();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Charstr_type_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);
   
  } 
}

// other_type
protected class Primitive_def_Other_typeParserRuleCall_3 extends RuleCallToken {
 
  public Primitive_def_Other_typeParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getPrimitive_defAccess().getOther_typeParserRuleCall_3();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Other_type_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 primitive_def ****************/


/************ begin Rule sequence_type ****************
*
* //----------------------------
* //    DECLARATORS
* //----------------------------
* / *
* declarators
*   :  declarator ( ',' declarator )*
*   ;
*
* simple_declarators
*   :  (simple_declarator (',' simple_declarator)*)
*   ;
*
* declarator
*   :  simple_declarator
*   |  complex_declarator
*   ;
*
* simple_declarator
*   :  ID
*   ;
*
* // TODO: añadir el arraydef!!!
* complex_declarator
*   :  ID ('[' const_exp ']')+
*   ;
* * ///---------------------------
* // TEMPLATE TYPES
* //---------------------------
* sequence_type returns IDL::SequenceDef:
*   "sequence" "<" (containedType=simple_type_spec | sharedType=[IDL::TypedefDef]) ("," bound=const_exp)? ">";
*
**/

// "sequence" "<" (containedType=simple_type_spec | sharedType=[IDL::TypedefDef]) ("," bound=const_exp)? ">"
protected class Sequence_type_Group extends GroupToken {
 
  public Sequence_type_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getSequence_typeAccess().getGroup();
  }

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

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

}

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

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

}

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

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

}

// containedType=simple_type_spec | sharedType=[IDL::TypedefDef]
protected class Sequence_type_Alternatives_2 extends AlternativesToken {

  public Sequence_type_Alternatives_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Alternatives getGrammarElement() {
    return grammarAccess.getSequence_typeAccess().getAlternatives_2();
  }

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

}

// containedType=simple_type_spec
protected class Sequence_type_ContainedTypeAssignment_2_0 extends AssignmentToken  {
 
  public Sequence_type_ContainedTypeAssignment_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getSequence_typeAccess().getContainedTypeAssignment_2_0();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("containedType",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("containedType");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getSimple_type_specRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getSequence_typeAccess().getContainedTypeSimple_type_specParserRuleCall_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 Sequence_type_LessThanSignKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

// sharedType=[IDL::TypedefDef]
protected class Sequence_type_SharedTypeAssignment_2_1 extends AssignmentToken  {
 
  public Sequence_type_SharedTypeAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getSequence_typeAccess().getSharedTypeAssignment_2_1();
  }

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

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

}


// ("," bound=const_exp)?
protected class Sequence_type_Group_3 extends GroupToken {
 
  public Sequence_type_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getSequence_typeAccess().getGroup_3();
  }

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

}

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

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

}

// bound=const_exp
protected class Sequence_type_BoundAssignment_3_1 extends AssignmentToken  {
 
  public Sequence_type_BoundAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getSequence_typeAccess().getBoundAssignment_3_1();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("bound",false)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("bound");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getConst_expRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getSequence_typeAccess().getBoundConst_expParserRuleCall_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 Sequence_type_CommaKeyword_3_0(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}


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

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

}


/************ end Rule sequence_type ****************/


/************ begin Rule stringdef_type ****************
*
* stringdef_type returns IDL::StringDef:
*   "string" "<" bound=const_exp ">";
*
**/

// "string" "<" bound=const_exp ">"
protected class Stringdef_type_Group extends GroupToken {
 
  public Stringdef_type_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getStringdef_typeAccess().getGroup();
  }

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

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

}

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

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

}

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

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

}

// bound=const_exp
protected class Stringdef_type_BoundAssignment_2 extends AssignmentToken  {
 
  public Stringdef_type_BoundAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getStringdef_typeAccess().getBoundAssignment_2();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("bound",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("bound");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getConst_expRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getStringdef_typeAccess().getBoundConst_expParserRuleCall_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 Stringdef_type_LessThanSignKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}


/************ end Rule stringdef_type ****************/


/************ begin Rule wide_stringdef_type ****************
*
* wide_stringdef_type returns IDL::WstringDef:
*   "wstring" "<" bound=const_exp ">";
*
**/

// "wstring" "<" bound=const_exp ">"
protected class Wide_stringdef_type_Group extends GroupToken {
 
  public Wide_stringdef_type_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getWide_stringdef_typeAccess().getGroup();
  }

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

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

}

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

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

}

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

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

}

// bound=const_exp
protected class Wide_stringdef_type_BoundAssignment_2 extends AssignmentToken  {
 
  public Wide_stringdef_type_BoundAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getWide_stringdef_typeAccess().getBoundAssignment_2();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("bound",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("bound");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getConst_expRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getWide_stringdef_typeAccess().getBoundConst_expParserRuleCall_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 Wide_stringdef_type_LessThanSignKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}


/************ end Rule wide_stringdef_type ****************/


/************ begin Rule fixed_pt_type ****************
*
* fixed_pt_type returns IDL::FixedDef:
*   "fixed" "<" digits=const_exp "," scale=const_exp ">";
*
**/

// "fixed" "<" digits=const_exp "," scale=const_exp ">"
protected class Fixed_pt_type_Group extends GroupToken {
 
  public Fixed_pt_type_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getFixed_pt_typeAccess().getGroup();
  }

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

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

}

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

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

}

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

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

}

// digits=const_exp
protected class Fixed_pt_type_DigitsAssignment_2 extends AssignmentToken  {
 
  public Fixed_pt_type_DigitsAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getFixed_pt_typeAccess().getDigitsAssignment_2();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("digits",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("digits");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getConst_expRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getFixed_pt_typeAccess().getDigitsConst_expParserRuleCall_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 Fixed_pt_type_LessThanSignKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}

// scale=const_exp
protected class Fixed_pt_type_ScaleAssignment_4 extends AssignmentToken  {
 
  public Fixed_pt_type_ScaleAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getFixed_pt_typeAccess().getScaleAssignment_4();
  }

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

    @Override 
  public IEObjectConsumer tryConsume() {
    if((value = eObjectConsumer.getConsumable("scale",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("scale");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getConst_expRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getFixed_pt_typeAccess().getScaleConst_expParserRuleCall_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 Fixed_pt_type_CommaKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}

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

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

}


/************ end Rule fixed_pt_type ****************/


/************ begin Rule floating_pt_type ****************
*
* //---------------------------
* // BASE TYPES
* //---------------------------
* floating_pt_type returns IDL::PrimitiveDef:
*   kind=float_type | kind=double_type | kind=longdouble_type;
*
**/

// kind=float_type | kind=double_type | kind=longdouble_type
protected class Floating_pt_type_Alternatives extends AlternativesToken {

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

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

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

}

// kind=float_type
protected class Floating_pt_type_KindAssignment_0 extends AssignmentToken  {
 
  public Floating_pt_type_KindAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getFloating_pt_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getFloating_pt_typeAccess().getKindFloat_typeEnumRuleCall_0_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getFloating_pt_typeAccess().getKindFloat_typeEnumRuleCall_0_0();
      return obj;
    }
    return null;
  }

}

// kind=double_type
protected class Floating_pt_type_KindAssignment_1 extends AssignmentToken  {
 
  public Floating_pt_type_KindAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getFloating_pt_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getFloating_pt_typeAccess().getKindDouble_typeEnumRuleCall_1_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getFloating_pt_typeAccess().getKindDouble_typeEnumRuleCall_1_0();
      return obj;
    }
    return null;
  }

}

// kind=longdouble_type
protected class Floating_pt_type_KindAssignment_2 extends AssignmentToken  {
 
  public Floating_pt_type_KindAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getFloating_pt_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getFloating_pt_typeAccess().getKindLongdouble_typeParserRuleCall_2_0(), value, null)) {
      type = AssignmentType.DATATYPE_RULE_CALL;
      element = grammarAccess.getFloating_pt_typeAccess().getKindLongdouble_typeParserRuleCall_2_0();
      return obj;
    }
    return null;
  }

}


/************ end Rule floating_pt_type ****************/



/************ begin Rule integer_type ****************
*
* integer_type returns IDL::PrimitiveDef:
*   kind=short_type | kind=long_type | kind=longlong_type | kind=ushort_type | kind=ulong_type | kind=ulonglong_type;
*
**/

// kind=short_type | kind=long_type | kind=longlong_type | kind=ushort_type | kind=ulong_type | kind=ulonglong_type
protected class Integer_type_Alternatives extends AlternativesToken {

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Integer_type_KindAssignment_0(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Integer_type_KindAssignment_1(lastRuleCallOrigin, this, 1, inst);
      case 2: return new Integer_type_KindAssignment_2(lastRuleCallOrigin, this, 2, inst);
      case 3: return new Integer_type_KindAssignment_3(lastRuleCallOrigin, this, 3, inst);
      case 4: return new Integer_type_KindAssignment_4(lastRuleCallOrigin, this, 4, inst);
      case 5: return new Integer_type_KindAssignment_5(lastRuleCallOrigin, this, 5, inst);
      default: return null;
   
  }

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

}

// kind=short_type
protected class Integer_type_KindAssignment_0 extends AssignmentToken  {
 
  public Integer_type_KindAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInteger_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getInteger_typeAccess().getKindShort_typeEnumRuleCall_0_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getInteger_typeAccess().getKindShort_typeEnumRuleCall_0_0();
      return obj;
    }
    return null;
  }

}

// kind=long_type
protected class Integer_type_KindAssignment_1 extends AssignmentToken  {
 
  public Integer_type_KindAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInteger_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getInteger_typeAccess().getKindLong_typeEnumRuleCall_1_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getInteger_typeAccess().getKindLong_typeEnumRuleCall_1_0();
      return obj;
    }
    return null;
  }

}

// kind=longlong_type
protected class Integer_type_KindAssignment_2 extends AssignmentToken  {
 
  public Integer_type_KindAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInteger_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInteger_typeAccess().getKindLonglong_typeParserRuleCall_2_0(), value, null)) {
      type = AssignmentType.DATATYPE_RULE_CALL;
      element = grammarAccess.getInteger_typeAccess().getKindLonglong_typeParserRuleCall_2_0();
      return obj;
    }
    return null;
  }

}

// kind=ushort_type
protected class Integer_type_KindAssignment_3 extends AssignmentToken  {
 
  public Integer_type_KindAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInteger_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInteger_typeAccess().getKindUshort_typeParserRuleCall_3_0(), value, null)) {
      type = AssignmentType.DATATYPE_RULE_CALL;
      element = grammarAccess.getInteger_typeAccess().getKindUshort_typeParserRuleCall_3_0();
      return obj;
    }
    return null;
  }

}

// kind=ulong_type
protected class Integer_type_KindAssignment_4 extends AssignmentToken  {
 
  public Integer_type_KindAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInteger_typeAccess().getKindAssignment_4();
  }

    @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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInteger_typeAccess().getKindUlong_typeParserRuleCall_4_0(), value, null)) {
      type = AssignmentType.DATATYPE_RULE_CALL;
      element = grammarAccess.getInteger_typeAccess().getKindUlong_typeParserRuleCall_4_0();
      return obj;
    }
    return null;
  }

}

// kind=ulonglong_type
protected class Integer_type_KindAssignment_5 extends AssignmentToken  {
 
  public Integer_type_KindAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getInteger_typeAccess().getKindAssignment_5();
  }

    @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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInteger_typeAccess().getKindUlonglong_typeParserRuleCall_5_0(), value, null)) {
      type = AssignmentType.DATATYPE_RULE_CALL;
      element = grammarAccess.getInteger_typeAccess().getKindUlonglong_typeParserRuleCall_5_0();
      return obj;
    }
    return null;
  }

}


/************ end Rule integer_type ****************/






/************ begin Rule charstr_type ****************
*
* charstr_type returns IDL::PrimitiveDef:
*   kind=char_type | kind=wide_char_type | kind=string_type | kind=wide_string_type;
*
**/

// kind=char_type | kind=wide_char_type | kind=string_type | kind=wide_string_type
protected class Charstr_type_Alternatives extends AlternativesToken {

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

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Charstr_type_KindAssignment_0(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Charstr_type_KindAssignment_1(lastRuleCallOrigin, this, 1, inst);
      case 2: return new Charstr_type_KindAssignment_2(lastRuleCallOrigin, this, 2, inst);
      case 3: return new Charstr_type_KindAssignment_3(lastRuleCallOrigin, this, 3, inst);
      default: return null;
   
  }

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

}

// kind=char_type
protected class Charstr_type_KindAssignment_0 extends AssignmentToken  {
 
  public Charstr_type_KindAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getCharstr_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getCharstr_typeAccess().getKindChar_typeEnumRuleCall_0_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getCharstr_typeAccess().getKindChar_typeEnumRuleCall_0_0();
      return obj;
    }
    return null;
  }

}

// kind=wide_char_type
protected class Charstr_type_KindAssignment_1 extends AssignmentToken  {
 
  public Charstr_type_KindAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getCharstr_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getCharstr_typeAccess().getKindWide_char_typeEnumRuleCall_1_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getCharstr_typeAccess().getKindWide_char_typeEnumRuleCall_1_0();
      return obj;
    }
    return null;
  }

}

// kind=string_type
protected class Charstr_type_KindAssignment_2 extends AssignmentToken  {
 
  public Charstr_type_KindAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getCharstr_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getCharstr_typeAccess().getKindString_typeEnumRuleCall_2_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getCharstr_typeAccess().getKindString_typeEnumRuleCall_2_0();
      return obj;
    }
    return null;
  }

}

// kind=wide_string_type
protected class Charstr_type_KindAssignment_3 extends AssignmentToken  {
 
  public Charstr_type_KindAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getCharstr_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getCharstr_typeAccess().getKindWide_string_typeEnumRuleCall_3_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getCharstr_typeAccess().getKindWide_string_typeEnumRuleCall_3_0();
      return obj;
    }
    return null;
  }

}


/************ end Rule charstr_type ****************/


/************ begin Rule other_type ****************
*
* other_type returns IDL::PrimitiveDef:
*   kind=boolean_type | kind=octet_type | kind=any_type;
*
**/

// kind=boolean_type | kind=octet_type | kind=any_type
protected class Other_type_Alternatives extends AlternativesToken {

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

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

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

}

// kind=boolean_type
protected class Other_type_KindAssignment_0 extends AssignmentToken  {
 
  public Other_type_KindAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOther_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getOther_typeAccess().getKindBoolean_typeEnumRuleCall_0_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getOther_typeAccess().getKindBoolean_typeEnumRuleCall_0_0();
      return obj;
    }
    return null;
  }

}

// kind=octet_type
protected class Other_type_KindAssignment_1 extends AssignmentToken  {
 
  public Other_type_KindAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOther_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getOther_typeAccess().getKindOctet_typeEnumRuleCall_1_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getOther_typeAccess().getKindOctet_typeEnumRuleCall_1_0();
      return obj;
    }
    return null;
  }

}

// kind=any_type
protected class Other_type_KindAssignment_2 extends AssignmentToken  {
 
  public Other_type_KindAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOther_typeAccess().getKindAssignment_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("kind",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("kind");
    if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getOther_typeAccess().getKindAny_typeEnumRuleCall_2_0(), value, null)) {
      type = AssignmentType.ENUM_RULE_CALL;
      element = grammarAccess.getOther_typeAccess().getKindAny_typeEnumRuleCall_2_0();
      return obj;
    }
    return null;
  }

}


/************ end Rule other_type ****************/


/************ begin Rule fixed_pt_const_type ****************
*
* fixed_pt_const_type returns IDL::FixedDef:
*   {IDL::FixedDef} "fixed";
*
**/

// {IDL::FixedDef} "fixed"
protected class Fixed_pt_const_type_Group extends GroupToken {
 
  public Fixed_pt_const_type_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getFixed_pt_const_typeAccess().getGroup();
  }

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

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

}

// {IDL::FixedDef}
protected class Fixed_pt_const_type_FixedDefAction_0 extends ActionToken  {

  public Fixed_pt_const_type_FixedDefAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getFixed_pt_const_typeAccess().getFixedDefAction_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;
  }
}

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

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

}


/************ end Rule fixed_pt_const_type ****************/


/************ begin Rule const_exp ****************
*
* //---------------------------
* // CONST EXP
* //---------------------------
* const_exp returns IDL::Expression:
*   or_expr;
*
**/

// or_expr
protected class Const_exp_Or_exprParserRuleCall extends RuleCallToken {
 
  public Const_exp_Or_exprParserRuleCall(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getConst_expAccess().getOr_exprParserRuleCall();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getMult_exprAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getConstantDefRefRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnary_exprAccess().getUnaryExpressionAction_0_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getValueExpressionRule().getType().getClassifier())
      return null;
    if(checkForRecursion(Or_expr_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 const_exp ****************/


/************ begin Rule or_expr ****************
*
* or_expr returns IDL::Expression:
*   xor_expr ({IDL::BinaryExpression.left=current} operator="|" right=xor_expr)*;
*
**/

// xor_expr ({IDL::BinaryExpression.left=current} operator="|" right=xor_expr)*
protected class Or_expr_Group extends GroupToken {
 
  public Or_expr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getOr_exprAccess().getGroup();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getMult_exprAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getConstantDefRefRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnary_exprAccess().getUnaryExpressionAction_0_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getValueExpressionRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// xor_expr
protected class Or_expr_Xor_exprParserRuleCall_0 extends RuleCallToken {
 
  public Or_expr_Xor_exprParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getOr_exprAccess().getXor_exprParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Xor_expr_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);
   
  } 
}

// ({IDL::BinaryExpression.left=current} operator="|" right=xor_expr)*
protected class Or_expr_Group_1 extends GroupToken {
 
  public Or_expr_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getOr_exprAccess().getGroup_1();
  }

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

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

}

// {IDL::BinaryExpression.left=current}
protected class Or_expr_BinaryExpressionLeftAction_1_0 extends ActionToken  {

  public Or_expr_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getOr_exprAccess().getBinaryExpressionLeftAction_1_0();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Or_expr_Group_1(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Or_expr_Xor_exprParserRuleCall_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 Or_expr_OperatorAssignment_1_1 extends AssignmentToken  {
 
  public Or_expr_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOr_exprAccess().getOperatorAssignment_1_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Or_expr_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.getOr_exprAccess().getOperatorVerticalLineKeyword_1_1_0(), value, null)) {
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getOr_exprAccess().getOperatorVerticalLineKeyword_1_1_0();
      return obj;
    }
    return null;
  }

}

// right=xor_expr
protected class Or_expr_RightAssignment_1_2 extends AssignmentToken  {
 
  public Or_expr_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getOr_exprAccess().getRightAssignment_1_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Xor_expr_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.getXor_exprRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getOr_exprAccess().getRightXor_exprParserRuleCall_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 Or_expr_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}



/************ end Rule or_expr ****************/


/************ begin Rule xor_expr ****************
*
* xor_expr returns IDL::Expression:
*   and_expr ({IDL::BinaryExpression.left=current} operator="^" right=and_expr)*;
*
**/

// and_expr ({IDL::BinaryExpression.left=current} operator="^" right=and_expr)*
protected class Xor_expr_Group extends GroupToken {
 
  public Xor_expr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getXor_exprAccess().getGroup();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getOr_exprAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getConstantDefRefRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnary_exprAccess().getUnaryExpressionAction_0_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getValueExpressionRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// and_expr
protected class Xor_expr_And_exprParserRuleCall_0 extends RuleCallToken {
 
  public Xor_expr_And_exprParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getXor_exprAccess().getAnd_exprParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(And_expr_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);
   
  } 
}

// ({IDL::BinaryExpression.left=current} operator="^" right=and_expr)*
protected class Xor_expr_Group_1 extends GroupToken {
 
  public Xor_expr_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getXor_exprAccess().getGroup_1();
  }

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

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

}

// {IDL::BinaryExpression.left=current}
protected class Xor_expr_BinaryExpressionLeftAction_1_0 extends ActionToken  {

  public Xor_expr_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getXor_exprAccess().getBinaryExpressionLeftAction_1_0();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Xor_expr_Group_1(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Xor_expr_And_exprParserRuleCall_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 Xor_expr_OperatorAssignment_1_1 extends AssignmentToken  {
 
  public Xor_expr_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getXor_exprAccess().getOperatorAssignment_1_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Xor_expr_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.getXor_exprAccess().getOperatorCircumflexAccentKeyword_1_1_0(), value, null)) {
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getXor_exprAccess().getOperatorCircumflexAccentKeyword_1_1_0();
      return obj;
    }
    return null;
  }

}

// right=and_expr
protected class Xor_expr_RightAssignment_1_2 extends AssignmentToken  {
 
  public Xor_expr_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getXor_exprAccess().getRightAssignment_1_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new And_expr_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.getAnd_exprRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getXor_exprAccess().getRightAnd_exprParserRuleCall_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 Xor_expr_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}



/************ end Rule xor_expr ****************/


/************ begin Rule and_expr ****************
*
* and_expr returns IDL::Expression:
*   shift_expr ({IDL::BinaryExpression.left=current} operator="&" right=shift_expr)*;
*
**/

// shift_expr ({IDL::BinaryExpression.left=current} operator="&" right=shift_expr)*
protected class And_expr_Group extends GroupToken {
 
  public And_expr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAnd_exprAccess().getGroup();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getXor_exprAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getConstantDefRefRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnary_exprAccess().getUnaryExpressionAction_0_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getValueExpressionRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// shift_expr
protected class And_expr_Shift_exprParserRuleCall_0 extends RuleCallToken {
 
  public And_expr_Shift_exprParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getAnd_exprAccess().getShift_exprParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Shift_expr_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);
   
  } 
}

// ({IDL::BinaryExpression.left=current} operator="&" right=shift_expr)*
protected class And_expr_Group_1 extends GroupToken {
 
  public And_expr_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAnd_exprAccess().getGroup_1();
  }

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

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

}

// {IDL::BinaryExpression.left=current}
protected class And_expr_BinaryExpressionLeftAction_1_0 extends ActionToken  {

  public And_expr_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getAnd_exprAccess().getBinaryExpressionLeftAction_1_0();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new And_expr_Group_1(lastRuleCallOrigin, this, 0, inst);
      case 1: return new And_expr_Shift_exprParserRuleCall_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 And_expr_OperatorAssignment_1_1 extends AssignmentToken  {
 
  public And_expr_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAnd_exprAccess().getOperatorAssignment_1_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new And_expr_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.getAnd_exprAccess().getOperatorAmpersandKeyword_1_1_0(), value, null)) {
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getAnd_exprAccess().getOperatorAmpersandKeyword_1_1_0();
      return obj;
    }
    return null;
  }

}

// right=shift_expr
protected class And_expr_RightAssignment_1_2 extends AssignmentToken  {
 
  public And_expr_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAnd_exprAccess().getRightAssignment_1_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Shift_expr_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.getShift_exprRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getAnd_exprAccess().getRightShift_exprParserRuleCall_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 And_expr_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}



/************ end Rule and_expr ****************/


/************ begin Rule shift_expr ****************
*
* shift_expr returns IDL::Expression:
*   add_expr ({IDL::BinaryExpression.left=current} operator=(">>" | "<<") right=add_expr)*;
*
**/

// add_expr ({IDL::BinaryExpression.left=current} operator=(">>" | "<<") right=add_expr)*
protected class Shift_expr_Group extends GroupToken {
 
  public Shift_expr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getShift_exprAccess().getGroup();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getAnd_exprAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getConstantDefRefRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnary_exprAccess().getUnaryExpressionAction_0_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getValueExpressionRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// add_expr
protected class Shift_expr_Add_exprParserRuleCall_0 extends RuleCallToken {
 
  public Shift_expr_Add_exprParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getShift_exprAccess().getAdd_exprParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Add_expr_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);
   
  } 
}

// ({IDL::BinaryExpression.left=current} operator=(">>" | "<<") right=add_expr)*
protected class Shift_expr_Group_1 extends GroupToken {
 
  public Shift_expr_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getShift_exprAccess().getGroup_1();
  }

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

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

}

// {IDL::BinaryExpression.left=current}
protected class Shift_expr_BinaryExpressionLeftAction_1_0 extends ActionToken  {

  public Shift_expr_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getShift_exprAccess().getBinaryExpressionLeftAction_1_0();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Shift_expr_Group_1(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Shift_expr_Add_exprParserRuleCall_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 Shift_expr_OperatorAssignment_1_1 extends AssignmentToken  {
 
  public Shift_expr_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getShift_exprAccess().getOperatorAssignment_1_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Shift_expr_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.getShift_exprAccess().getOperatorGreaterThanSignGreaterThanSignKeyword_1_1_0_0(), value, null)) {
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getShift_exprAccess().getOperatorGreaterThanSignGreaterThanSignKeyword_1_1_0_0();
      return obj;
    }
    if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getShift_exprAccess().getOperatorLessThanSignLessThanSignKeyword_1_1_0_1(), value, null)) {
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getShift_exprAccess().getOperatorLessThanSignLessThanSignKeyword_1_1_0_1();
      return obj;
    }
    return null;
  }

}

// right=add_expr
protected class Shift_expr_RightAssignment_1_2 extends AssignmentToken  {
 
  public Shift_expr_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getShift_exprAccess().getRightAssignment_1_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Add_expr_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.getAdd_exprRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getShift_exprAccess().getRightAdd_exprParserRuleCall_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 Shift_expr_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}



/************ end Rule shift_expr ****************/


/************ begin Rule add_expr ****************
*
* add_expr returns IDL::Expression:
*   mult_expr ({IDL::BinaryExpression.left=current} operator=("+" | "-") right=mult_expr)*;
*
**/

// mult_expr ({IDL::BinaryExpression.left=current} operator=("+" | "-") right=mult_expr)*
protected class Add_expr_Group extends GroupToken {
 
  public Add_expr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAdd_exprAccess().getGroup();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getShift_exprAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getConstantDefRefRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnary_exprAccess().getUnaryExpressionAction_0_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getValueExpressionRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// mult_expr
protected class Add_expr_Mult_exprParserRuleCall_0 extends RuleCallToken {
 
  public Add_expr_Mult_exprParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getAdd_exprAccess().getMult_exprParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Mult_expr_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);
   
  } 
}

// ({IDL::BinaryExpression.left=current} operator=("+" | "-") right=mult_expr)*
protected class Add_expr_Group_1 extends GroupToken {
 
  public Add_expr_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getAdd_exprAccess().getGroup_1();
  }

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

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

}

// {IDL::BinaryExpression.left=current}
protected class Add_expr_BinaryExpressionLeftAction_1_0 extends ActionToken  {

  public Add_expr_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getAdd_exprAccess().getBinaryExpressionLeftAction_1_0();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Add_expr_Group_1(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Add_expr_Mult_exprParserRuleCall_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 Add_expr_OperatorAssignment_1_1 extends AssignmentToken  {
 
  public Add_expr_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAdd_exprAccess().getOperatorAssignment_1_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Add_expr_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.getAdd_exprAccess().getOperatorPlusSignKeyword_1_1_0_0(), value, null)) {
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getAdd_exprAccess().getOperatorPlusSignKeyword_1_1_0_0();
      return obj;
    }
    if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getAdd_exprAccess().getOperatorHyphenMinusKeyword_1_1_0_1(), value, null)) {
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getAdd_exprAccess().getOperatorHyphenMinusKeyword_1_1_0_1();
      return obj;
    }
    return null;
  }

}

// right=mult_expr
protected class Add_expr_RightAssignment_1_2 extends AssignmentToken  {
 
  public Add_expr_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getAdd_exprAccess().getRightAssignment_1_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Mult_expr_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.getMult_exprRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getAdd_exprAccess().getRightMult_exprParserRuleCall_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 Add_expr_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}



/************ end Rule add_expr ****************/


/************ begin Rule mult_expr ****************
*
* mult_expr returns IDL::Expression:
*   unary_expr ({IDL::BinaryExpression.left=current} operator=("*" | "/" | "%") right=unary_expr)*;
*
**/

// unary_expr ({IDL::BinaryExpression.left=current} operator=("*" | "/" | "%") right=unary_expr)*
protected class Mult_expr_Group extends GroupToken {
 
  public Mult_expr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getMult_exprAccess().getGroup();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getAdd_exprAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getConstantDefRefRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnary_exprAccess().getUnaryExpressionAction_0_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getValueExpressionRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// unary_expr
protected class Mult_expr_Unary_exprParserRuleCall_0 extends RuleCallToken {
 
  public Mult_expr_Unary_exprParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getMult_exprAccess().getUnary_exprParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Unary_expr_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);
   
  } 
}

// ({IDL::BinaryExpression.left=current} operator=("*" | "/" | "%") right=unary_expr)*
protected class Mult_expr_Group_1 extends GroupToken {
 
  public Mult_expr_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getMult_exprAccess().getGroup_1();
  }

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

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

}

// {IDL::BinaryExpression.left=current}
protected class Mult_expr_BinaryExpressionLeftAction_1_0 extends ActionToken  {

  public Mult_expr_BinaryExpressionLeftAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getMult_exprAccess().getBinaryExpressionLeftAction_1_0();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Mult_expr_Group_1(lastRuleCallOrigin, this, 0, inst);
      case 1: return new Mult_expr_Unary_exprParserRuleCall_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 Mult_expr_OperatorAssignment_1_1 extends AssignmentToken  {
 
  public Mult_expr_OperatorAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getMult_exprAccess().getOperatorAssignment_1_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Mult_expr_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.getMult_exprAccess().getOperatorAsteriskKeyword_1_1_0_0(), value, null)) {
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getMult_exprAccess().getOperatorAsteriskKeyword_1_1_0_0();
      return obj;
    }
    if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getMult_exprAccess().getOperatorSolidusKeyword_1_1_0_1(), value, null)) {
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getMult_exprAccess().getOperatorSolidusKeyword_1_1_0_1();
      return obj;
    }
    if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getMult_exprAccess().getOperatorPercentSignKeyword_1_1_0_2(), value, null)) {
      type = AssignmentType.KEYWORD;
      element = grammarAccess.getMult_exprAccess().getOperatorPercentSignKeyword_1_1_0_2();
      return obj;
    }
    return null;
  }

}

// right=unary_expr
protected class Mult_expr_RightAssignment_1_2 extends AssignmentToken  {
 
  public Mult_expr_RightAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getMult_exprAccess().getRightAssignment_1_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Unary_expr_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.getUnary_exprRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getMult_exprAccess().getRightUnary_exprParserRuleCall_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 Mult_expr_OperatorAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}



/************ end Rule mult_expr ****************/


/************ begin Rule unary_expr ****************
*
* unary_expr returns IDL::Expression:
*   {IDL::UnaryExpression} operator=unary_operator expression=primary_expr | primary_expr;
*
**/

// {IDL::UnaryExpression} operator=unary_operator expression=primary_expr | primary_expr
protected class Unary_expr_Alternatives extends AlternativesToken {

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

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getMult_exprAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getConstantDefRefRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnary_exprAccess().getUnaryExpressionAction_0_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getValueExpressionRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// {IDL::UnaryExpression} operator=unary_operator expression=primary_expr
protected class Unary_expr_Group_0 extends GroupToken {
 
  public Unary_expr_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getUnary_exprAccess().getGroup_0();
  }

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

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

}

// {IDL::UnaryExpression}
protected class Unary_expr_UnaryExpressionAction_0_0 extends ActionToken  {

  public Unary_expr_UnaryExpressionAction_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Action getGrammarElement() {
    return grammarAccess.getUnary_exprAccess().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=unary_operator
protected class Unary_expr_OperatorAssignment_0_1 extends AssignmentToken  {
 
  public Unary_expr_OperatorAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getUnary_exprAccess().getOperatorAssignment_0_1();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Unary_expr_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(valueSerializer.isValid(obj.getEObject(), grammarAccess.getUnary_exprAccess().getOperatorUnary_operatorParserRuleCall_0_1_0(), value, null)) {
      type = AssignmentType.DATATYPE_RULE_CALL;
      element = grammarAccess.getUnary_exprAccess().getOperatorUnary_operatorParserRuleCall_0_1_0();
      return obj;
    }
    return null;
  }

}

// expression=primary_expr
protected class Unary_expr_ExpressionAssignment_0_2 extends AssignmentToken  {
 
  public Unary_expr_ExpressionAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getUnary_exprAccess().getExpressionAssignment_0_2();
  }

    @Override
  public AbstractToken createFollower(int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Primary_expr_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.getPrimary_exprRule().getType().getClassifier())) {
        type = AssignmentType.PARSER_RULE_CALL;
        element = grammarAccess.getUnary_exprAccess().getExpressionPrimary_exprParserRuleCall_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 Unary_expr_OperatorAssignment_0_1(lastRuleCallOrigin, next, actIndex, consumed);
      default: return null;
   
  } 
}


// primary_expr
protected class Unary_expr_Primary_exprParserRuleCall_1 extends RuleCallToken {
 
  public Unary_expr_Primary_exprParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getUnary_exprAccess().getPrimary_exprParserRuleCall_1();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Primary_expr_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 unary_expr ****************/



/************ begin Rule primary_expr ****************
*
* primary_expr returns IDL::Expression: //ID
*   constantDefRef | //literal
*   valueExpression | "(" const_exp ")";
*
**/

// //ID
// constantDefRef | //literal
// valueExpression | "(" const_exp ")"
protected class Primary_expr_Alternatives extends AlternativesToken {

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

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getMult_exprAccess().getBinaryExpressionLeftAction_1_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getConstantDefRefRule().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getUnary_exprAccess().getUnaryExpressionAction_0_0().getType().getClassifier() &&
       getEObject().eClass() != grammarAccess.getValueExpressionRule().getType().getClassifier())
      return null;
    return eObjectConsumer;
  }

}

// //ID
// constantDefRef
protected class Primary_expr_ConstantDefRefParserRuleCall_0 extends RuleCallToken {
 
  public Primary_expr_ConstantDefRefParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getPrimary_exprAccess().getConstantDefRefParserRuleCall_0();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getConstantDefRefRule().getType().getClassifier())
      return null;
    if(checkForRecursion(ConstantDefRef_ConstantAssignment.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
// valueExpression
protected class Primary_expr_ValueExpressionParserRuleCall_1 extends RuleCallToken {
 
  public Primary_expr_ValueExpressionParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getPrimary_exprAccess().getValueExpressionParserRuleCall_1();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(getEObject().eClass() != grammarAccess.getValueExpressionRule().getType().getClassifier())
      return null;
    if(checkForRecursion(ValueExpression_ValueAssignment.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);
   
  } 
}

// "(" const_exp ")"
protected class Primary_expr_Group_2 extends GroupToken {
 
  public Primary_expr_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Group getGrammarElement() {
    return grammarAccess.getPrimary_exprAccess().getGroup_2();
  }

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

}

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

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

}

// const_exp
protected class Primary_expr_Const_expParserRuleCall_2_1 extends RuleCallToken {
 
  public Primary_expr_Const_expParserRuleCall_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public RuleCall getGrammarElement() {
    return grammarAccess.getPrimary_exprAccess().getConst_expParserRuleCall_2_1();
  }

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

    @Override
  public IEObjectConsumer tryConsume() {
    if(checkForRecursion(Const_exp_Or_exprParserRuleCall.class, eObjectConsumer)) return null;
    return eObjectConsumer;
  }
 
    @Override
  public AbstractToken createFollowerAfterReturn(AbstractToken next,  int actIndex, int index, IEObjectConsumer inst) {
    switch(index) {
      case 0: return new Primary_expr_LeftParenthesisKeyword_2_0(lastRuleCallOrigin, next, actIndex, inst);
      default: return null;
   
  } 
}

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

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

}



/************ end Rule primary_expr ****************/


/************ begin Rule constantDefRef ****************
*
* constantDefRef returns IDL::ConstantDefRef:
*   constant=[IDL::Constant];
*
**/

// constant=[IDL::Constant]
protected class ConstantDefRef_ConstantAssignment extends AssignmentToken  {
 
  public ConstantDefRef_ConstantAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getConstantDefRefAccess().getConstantAssignment();
  }

    @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.getConstantDefRefRule().getType().getClassifier())
      return null;
    if((value = eObjectConsumer.getConsumable("constant",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("constant");
    if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
      IEObjectConsumer param = createEObjectConsumer((EObject)value);
      if(param.isInstanceOf(grammarAccess.getConstantDefRefAccess().getConstantConstantCrossReference_0().getType().getClassifier())) {
        type = AssignmentType.CROSS_REFERENCE;
        element = grammarAccess.getConstantDefRefAccess().getConstantConstantCrossReference_0();
        return obj;
      }
    }
    return null;
  }

}

/************ end Rule constantDefRef ****************/


/************ begin Rule valueExpression ****************
*
* valueExpression returns IDL::ValueExpression:
*   value=literal;
*
**/

// value=literal
protected class ValueExpression_ValueAssignment extends AssignmentToken  {
 
  public ValueExpression_ValueAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
    super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
  }
 
  @Override
  public Assignment getGrammarElement() {
    return grammarAccess.getValueExpressionAccess().getValueAssignment();
  }

    @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.getValueExpressionRule().getType().getClassifier())
      return null;
    if((value = eObjectConsumer.getConsumable("value",true)) == null) return null;
    IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("value");
    if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getValueExpressionAccess().getValueLiteralParserRuleCall_0(), value, null)) {
      type = AssignmentType.DATATYPE_RULE_CALL;
      element = grammarAccess.getValueExpressionAccess().getValueLiteralParserRuleCall_0();
      return obj;
    }
    return null;
  }

}

/************ end Rule valueExpression ****************/


TOP

Related Classes of org.csu.idl.xtext.parseTreeConstruction.IDLParsetreeConstructor$Attr_spec_Alternatives_1_1

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.