private D_Piece makePiece(PieceTokenizer f)
        {
            var g = f.reStart();

            D_Piece piece = new D_Piece();
            D_PieceWrap d; D_PieceKernalOr c;
            if ((d = makePieceWrap(f)) != null)
            {
                piece.PieceClause = D_Piece.D_PieceClause.PieceWrap;
                piece.PieceWrap = d;
            }
            else if ((c = makePieceKernalOr(f)) != null)
            {
                piece.PieceClause = D_Piece.D_PieceClause.PieceKernalOr;
                piece.PieceKernalOr = c;
            }
            else return null;
            return piece;
        }
        private Tuple<string, string> buildPiece(VariableTracker vt, D_Piece piece, D_Item item)
        {
            StringBuilder cls = new StringBuilder();
            StringBuilder method = new StringBuilder();
            Tuple<string, string> v;

            switch (piece.PieceClause)
            {
                case D_Piece.D_PieceClause.PieceWrap:
                    v = buildPieceWrap(vt, piece.PieceWrap, item);
                    cls.Append(v.Item1);
                    method.Append(v.Item2);
                    break;
                case D_Piece.D_PieceClause.PieceKernalOr:
                    v = buildPieceKernalOr(vt, piece.PieceKernalOr, item);
                    cls.Append(v.Item1);
                    method.Append(v.Item2);
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }

            return new Tuple<string, string>(cls.ToString(), method.ToString());
        }