docs: public Object yyparse (yyInput yyLex) throws java.io.IOException {
      if (yyMax <= 0) yyMax = 256;			// initial size
      int yyState = 0, yyStates[] = new int[yyMax];	// state stack
      Object yyVal = null, yyVals[] = new Object[yyMax];	// value stack
      int yyToken = -1;					// current input
      int yyErrorFlag = 0;				// #tokens to shift
  
      yyLoop: for (int yyTop = 0;; ++ yyTop) {
        if (yyTop >= yyStates.length) {			// dynamically increase
          int[] i = new int[yyStates.length+yyMax];
          System.arraycopy(yyStates, 0, i, 0, yyStates.length);
          yyStates = i;
          Object[] o = new Object[yyVals.length+yyMax];
          System.arraycopy(yyVals, 0, o, 0, yyVals.length);
          yyVals = o;
        }
        yyStates[yyTop] = yyState;
        yyVals[yyTop] = yyVal;
  
        yyDiscarded: for (;;) {	// discarding a token does not change stack
          int yyN;
          if ((yyN = yyDefRed[yyState]) == 0) {	// else [default] reduce (yyN)
            if (yyToken < 0) {
              yyToken = yyLex.advance() ? yyLex.token() : 0;
            }
            if ((yyN = yySindex[yyState]) != 0 && (yyN += yyToken) >= 0
                && yyN < yyTable.length && yyCheck[yyN] == yyToken) {
              yyState = yyTable[yyN];		// shift to yyN
              yyVal = yyLex.value();
              yyToken = -1;
              if (yyErrorFlag > 0) -- yyErrorFlag;
              continue yyLoop;
            }
            if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0
                && yyN < yyTable.length && yyCheck[yyN] == yyToken)
              yyN = yyTable[yyN];			// reduce (yyN)
            else
              switch (yyErrorFlag) {
    
              case 0:
                yyerror("syntax error");
    
              case 1: case 2:
                yyErrorFlag = 3;
                do {
                  if ((yyN = yySindex[yyStates[yyTop]]) != 0
                      && (yyN += yyErrorCode) >= 0 && yyN < yyTable.length
                      && yyCheck[yyN] == yyErrorCode) {
                    yyState = yyTable[yyN];
                    yyVal = yyLex.value();
                    continue yyLoop;
                  }
                } while (-- yyTop >= 0);
                yyerror("irrecoverable syntax error");
    
              case 3:
                if (yyToken == 0) {
                  yyerror("irrecoverable syntax error at end-of-file");
                }
                yyToken = -1;
                continue yyDiscarded;		// leave stack alone
              }
          }
          int yyV = yyTop + 1-yyLen[yyN];
          yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]);
          switch (yyN) {
  // ACTIONS_BEGIN
  case 1:
  					// line 18 "src/main/org/yecht/DefaultYAMLParser.y"
    {
             parser.root = parser.addNode((Node)yyVals[0+yyTop]);
          }
    break;
  case 2:
  					// line 21 "src/main/org/yecht/DefaultYAMLParser.y"
    {
             parser.root = parser.addNode((Node)yyVals[0+yyTop]);
          }
    break;
  case 3:
  					// line 24 "src/main/org/yecht/DefaultYAMLParser.y"
    {
             parser.eof = true;
          }
    break;
  case 7:
  					// line 34 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
              Parser.addTransfer((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop], parser.taguri_expansion);
              yyVal = yyVals[0+yyTop];
          }
    break;
  case 8:
  					// line 38 "src/main/org/yecht/DefaultYAMLParser.y"
    {
              Parser.addTransfer((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop], false);
              yyVal = yyVals[0+yyTop];
          }
    break;
  case 9:
  					// line 42 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
             /*
              * _Anchors_: The language binding must keep a separate symbol table
              * for anchors.  The actual ID in the symbol table is returned to the
              * higher nodes, though.
              */
             yyVal = parser.addAnchor((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop] );
          }
    break;
  case 10:
  					// line 50 "src/main/org/yecht/DefaultYAMLParser.y"
    {
             yyVal = yyVals[-1+yyTop];
          }
    break;
  case 13:
  					// line 59 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      yyVal = yyVals[-1+yyTop];
                  }
    break;
  case 14:
  					// line 62 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      Node n = NULL_NODE( parser );
                      yyVal = n;
                  }
    break;
  case 15:
  					// line 67 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                     if(parser.implicit_typing)
                     {
                        ImplicitScanner2.tryTagImplicit((Node)yyVals[0+yyTop], parser.taguri_expansion);
                     }
                     yyVal = yyVals[0+yyTop];
                  }
    break;
  case 16:
  					// line 75 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      Parser.addTransfer((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop], parser.taguri_expansion);
                      yyVal = yyVals[0+yyTop];
                  }
    break;
  case 17:
  					// line 80 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      Parser.addTransfer((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop], false);
                      yyVal = yyVals[0+yyTop];
                  }
    break;
  case 18:
  					// line 85 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                     /*
                      * _Anchors_: The language binding must keep a separate symbol table
                      * for anchors.  The actual ID in the symbol table is returned to the
                      * higher nodes, though.
                      */
                     yyVal = parser.addAnchor((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop] );
                  }
    break;
  case 25:
  					// line 118 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                 Parser.addTransfer((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop], parser.taguri_expansion);
                 yyVal = yyVals[0+yyTop];
              }
    break;
  case 26:
  					// line 123 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                 Parser.addTransfer((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop], false);
                 yyVal = yyVals[0+yyTop];
              }
    break;
  case 27:
  					// line 128 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                 if(parser.implicit_typing)
                 {
                    ImplicitScanner2.tryTagImplicit((Node)yyVals[0+yyTop], parser.taguri_expansion);
                 }
                 yyVal = yyVals[0+yyTop];
              }
    break;
  case 28:
  					// line 136 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                 yyVal = parser.addAnchor((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop] );
              }
    break;
  case 29:
  					// line 140 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                 /*
                  * _Aliases_: The anchor symbol table is scanned for the anchor name.
                  * The anchor's ID in the language's symbol table is returned.
                  */
                 yyVal = parser.getAnchor((String)yyVals[0+yyTop]);
              }
    break;
  case 30:
  					// line 148 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                 Node n = (Node)yyVals[0+yyTop];
                 if(parser.taguri_expansion) {
                     n.type_id = Parser.taguri(YAML.DOMAIN, "str");
                 } else {
                     n.type_id = "str";
                 }
                 yyVal = n;
              }
    break;
  case 32:
  					// line 159 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                 yyVal = yyVals[-1+yyTop];
              }
    break;
  case 38:
  					// line 179 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      yyVal = yyVals[-1+yyTop];
                  }
    break;
  case 39:
  					// line 183 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      yyVal = yyVals[-1+yyTop];
                  }
    break;
  case 40:
  					// line 189 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      yyVal = parser.addNode((Node) yyVals[0+yyTop]);
                  }
    break;
  case 41:
  					// line 195 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      Parser.addTransfer((String)yyVals[-2+yyTop], (Node)yyVals[0+yyTop], parser.taguri_expansion);
                      yyVal = yyVals[0+yyTop];
                  }
    break;
  case 42:
  					// line 200 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      Parser.addTransfer((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop], parser.taguri_expansion);
                      yyVal = yyVals[0+yyTop];
                  }
    break;
  case 43:
  					// line 205 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      Parser.addTransfer((String)yyVals[-2+yyTop], (Node)yyVals[0+yyTop], false);
                      yyVal = yyVals[0+yyTop];
                  }
    break;
  case 44:
  					// line 210 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      Parser.addTransfer((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop], false);
                      yyVal = yyVals[0+yyTop];
                  }
    break;
  case 45:
  					// line 215 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      yyVal = parser.addAnchor((String)yyVals[-2+yyTop], (Node)yyVals[0+yyTop] );
                  }
    break;
  case 46:
  					// line 219 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      yyVal = parser.addAnchor((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop] );
                  }
    break;
  case 47:
  					// line 225 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      yyVal = Node.newSeq(yyVals[0+yyTop]);
                  }
    break;
  case 48:
  					// line 229 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      ((Node)yyVals[-2+yyTop]).seqAdd(yyVals[0+yyTop]);
                      yyVal = yyVals[-2+yyTop];
  				}
    break;
  case 49:
  					// line 234 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      yyVal = yyVals[-1+yyTop];
  				}
    break;
  case 50:
  					// line 243 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      yyVal = yyVals[-1+yyTop];
                  }
    break;
  case 51:
  					// line 247 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      yyVal = Node.allocSeq();
                  }
    break;
  case 52:
  					// line 253 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      yyVal = Node.newSeq(parser.addNode((Node)yyVals[0+yyTop]));
                  }
    break;
  case 53:
  					// line 257 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      ((Node)yyVals[-2+yyTop]).seqAdd(parser.addNode((Node)yyVals[0+yyTop]));
                      yyVal = yyVals[-2+yyTop];
  				}
    break;
  case 56:
  					// line 271 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      applySeqInMap(parser, (Node)yyVals[-1+yyTop]);
                      yyVal = yyVals[-1+yyTop];
                  }
    break;
  case 57:
  					// line 276 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      applySeqInMap(parser, (Node)yyVals[-1+yyTop]);
                      yyVal = yyVals[-1+yyTop];
                  }
    break;
  case 58:
  					// line 283 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      Parser.addTransfer((String)yyVals[-2+yyTop], (Node)yyVals[0+yyTop], parser.taguri_expansion);
                      yyVal = yyVals[0+yyTop];
                  }
    break;
  case 59:
  					// line 288 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      Parser.addTransfer((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop], parser.taguri_expansion);
                      yyVal = yyVals[0+yyTop];
                  }
    break;
  case 60:
  					// line 293 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      Parser.addTransfer((String)yyVals[-2+yyTop], (Node)yyVals[0+yyTop], false);
                      yyVal = yyVals[0+yyTop];
                  }
    break;
  case 61:
  					// line 298 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      Parser.addTransfer((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop], false);
                      yyVal = yyVals[0+yyTop];
                  }
    break;
  case 62:
  					// line 303 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      yyVal = parser.addAnchor((String)yyVals[-2+yyTop], (Node)yyVals[0+yyTop]);
                  }
    break;
  case 63:
  					// line 307 "src/main/org/yecht/DefaultYAMLParser.y"
    { 
                      yyVal = parser.addAnchor((String)yyVals[-1+yyTop], (Node)yyVals[0+yyTop]);
                  }
    break;
  case 65:
  					// line 314 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      yyVal = yyVals[-1+yyTop];
                  }
    break;
  case 67:
  					// line 323 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      yyVal = Node.newMap( 
                          parser.addNode( (Node)yyVals[-2+yyTop] ), 
                          parser.addNode( (Node)yyVals[0+yyTop] ) );
                  }
    break;
  case 69:
  					// line 332 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      if ( ((Node)yyVals[-2+yyTop]).shortcut == null )
                      {
                          ((Node)yyVals[-2+yyTop]).shortcut = Node.newSeq(yyVals[0+yyTop]);
                      }
                      else
                      {
                          ((Node)((Node)yyVals[-2+yyTop]).shortcut).seqAdd(yyVals[0+yyTop]);
                      }
                      yyVal = yyVals[-2+yyTop];
                  }
    break;
  case 70:
  					// line 344 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      applySeqInMap( parser, (Node)yyVals[-2+yyTop] );
                      ((Node)yyVals[-2+yyTop]).mapUpdate((Node)yyVals[0+yyTop]);
                      yyVals[0+yyTop] = null;
                      yyVal = yyVals[-2+yyTop];
                  }
    break;
  case 71:
  					// line 351 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      yyVal = yyVals[-1+yyTop];
                  }
    break;
  case 72:
  					// line 360 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      yyVal = Node.newMap( 
                          parser.addNode( (Node)yyVals[-2+yyTop] ), 
                          parser.addNode( (Node)yyVals[0+yyTop] ) );
                  }
    break;
  case 73:
  					// line 368 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      yyVal = yyVals[-1+yyTop];
                  }
    break;
  case 74:
  					// line 372 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      yyVal = Node.allocMap();
                  }
    break;
  case 76:
  					// line 379 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      ((Node)yyVals[-2+yyTop]).mapUpdate((Node)yyVals[0+yyTop]);
                      yyVals[0+yyTop] = null;
                      yyVal = yyVals[-2+yyTop];
  				}
    break;
  case 77:
  					// line 387 "src/main/org/yecht/DefaultYAMLParser.y"
    {
                      Node n = NULL_NODE( parser );
                      yyVal = Node.newMap( 
                          parser.addNode( (Node)yyVals[0+yyTop] ), 
                          parser.addNode( n ));
                  }
    break;
  					// line 749 "-"
  // ACTIONS_END
          }
          yyTop -= yyLen[yyN];
          yyState = yyStates[yyTop];
          int yyM = yyLhs[yyN];
          if (yyState == 0 && yyM == 0) {
            yyState = yyFinal;
            if (yyToken < 0) {
              yyToken = yyLex.advance() ? yyLex.token() : 0;
            }
            if (yyToken == 0) {
              return yyVal;
            }
            continue yyLoop;
          }
          if ((yyN = yyGindex[yyM]) != 0 && (yyN += yyState) >= 0
              && yyN < yyTable.length && yyCheck[yyN] == yyState)
            yyState = yyTable[yyN];
          else
            yyState = yyDgoto[yyM];
          continue yyLoop;
        }
      }
    }