private Result pDirectAbstractDeclarator$$Tail1(final int yyStart) 
    throws IOException {

    Result       yyResult;
    int          yyBase;
    int          yyOption1;
    Node         yyOpValue1;
    Action<Node> yyValue;
    ParseError   yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSymbol(yyStart);
    if (yyResult.hasValue("[")) {
      final String v$g$2 = "[";

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyOption1  = yyChoice1;
      yyOpValue1 = null;

      yyResult = pAssignmentExpression(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        final Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$3.
        final Node v$g$3 = yyOpValue1;

        yyBase   = yyOption1;
        yyResult = pSymbol(yyBase);
        if (yyResult.hasValue("]")) {

          yyValue = new Action<Node>() {
            public Node run(Node v$1) {
              return GNode.create("DirectAbstractDeclarator", v$1, v$g$2, v$g$3);
            }};

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("']' expected", yyBase);
        }
      } // End scope for v$g$3.

      // Nested alternative 2.

      yyResult = pVariableLength(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        final Node v$g$4 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = pSymbol(yyBase);
        if (yyResult.hasValue("]")) {

          yyValue = new Action<Node>() {
            public Node run(Node v$1) {
              return GNode.create("DirectAbstractDeclarator", v$1, v$g$2, v$g$4);
            }};

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("']' expected", yyBase);
        }
      }
    }

    // Alternative 2.

    yyResult = pSymbol(yyStart);
    if (yyResult.hasValue("(")) {
      final String v$g$5 = "(";

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pParameterTypeList(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        final Node v$el$2 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$2;
      }
      { // Start scope for v$g$6.
        final Node v$g$6 = yyOpValue1;

        yyBase   = yyOption1;
        yyResult = pSymbol(yyBase);
        if (yyResult.hasValue(")")) {

          yyValue = new Action<Node>() {
            public Node run(Node v$1) {
              return GNode.create("DirectAbstractDeclarator", v$1, v$g$5, v$g$6);
            }};

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("')' expected", yyBase);
        }
      } // End scope for v$g$6.
    }

    // Done.
    yyError = yyError.select("direct abstract declarator expected", yyStart);
    return yyError;
  }