private Result pStructureDeclaration(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    boolean    yyRepeated1;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative <Declaration>.

    yyOption1  = yyStart;
    yyOpValue1 = null;

    yyBase   = yyOption1;
    yyResult = pKeyword(yyBase);
    if (yyResult.hasValue("__extension__")) {
      final String v$el$1 = "__extension__";

      yyOption1  = yyResult.index;
      yyOpValue1 = v$el$1;
    } else {
      yyError = yyError.select("'__extension__' expected", yyBase);
    }
    { // Start scope for v$g$1.
      final String v$g$1 = yyOpValue1;

      yyResult = pSpecifierQualifierList(yyOption1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        final Node v$g$2 = yyResult.semanticValue();

        yyResult = pOptionalStructureDeclaratorList(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          final Node v$g$3 = yyResult.semanticValue();

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

            yyOption1  = yyResult.index;

            if (GCC) {

              yyRepetition1 = yyOption1;
              yyRepeated1   = false;
              while (true) {

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

                  yyRepetition1 = yyResult.index;
                  yyRepeated1   = true;
                  continue;
                } else {
                  yyError = yyError.select("';' expected", yyBase);
                }
                break;
              }

              if (yyRepeated1) {

                yyOption1  = yyRepetition1;
              }
            }

            yyValue = GNode.create("StructureDeclaration", v$g$1, v$g$2, v$g$3);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyOption1, yyError);
          } else {
            yyError = yyError.select("';' expected", yyBase);
          }
        }
      }
    } // End scope for v$g$1.

    // Done.
    yyError = yyError.select("structure declaration expected", yyStart);
    return yyError;
  }