/** {@inheritDoc} */
  public Object createModelObject(ParserContext context) {
    java.util.List<Parameter> ret = new java.util.ArrayList<Parameter>();
    boolean f_iterate = false;

    do {
      f_iterate = false;

      Parameter p = new Parameter();

      setEndProperties(p, context.pop());

      p.setName(((CommonToken) context.pop()).getText());

      setStartProperties(p, context.pop()); // sig

      ret.add(0, p);

      if (context.peek() instanceof CommonToken
          && ((CommonToken) context.peek()).getText().equals(",")) {
        context.pop(); // ,
        f_iterate = true;
      }
    } while (f_iterate);

    context.push(ret);

    return ret;
  }
  /** {@inheritDoc} */
  public Object createModelObject(ParserContext context) {
    java.util.List<RoleDecl> ret = new java.util.ArrayList<RoleDecl>();
    boolean f_iterate = false;

    // consume ')'
    context.pop();

    do {
      f_iterate = false;

      RoleDecl rd = new RoleDecl();

      setEndProperties(rd, context.peek());

      rd.setName(((CommonToken) context.pop()).getText());

      if (context.peek() instanceof CommonToken
          && ((CommonToken) context.peek()).getText().equals("as")) {
        context.pop(); // 'as'

        rd.setAlias(rd.getName());

        rd.setName(((CommonToken) context.pop()).getText());
      }

      setStartProperties(rd, context.pop()); // role

      ret.add(0, rd);

      if (context.peek() instanceof CommonToken
          && ((CommonToken) context.peek()).getText().equals(",")) {
        context.pop(); // ,
        f_iterate = true;
      }
    } while (f_iterate);

    // consume '('
    context.pop();

    context.push(ret);

    return ret;
  }