private D_PieceContent makePieceContent(PieceTokenizer f)
        {
            var g = f.reStart();

            D_PieceContent piece = new D_PieceContent();
            D_Piece c;

            string w1;
            if ((w1 = getWord(f)) != null)
            {
                piece.PieceContentClause = D_PieceContent.D_PieceContentClause.Word;
                piece.Word = new D_Word();
                piece.Word.Value = w1;
            }
            else if (isString(f))
            {
                piece.PieceContentClause = D_PieceContent.D_PieceContentClause.String;
                piece.String = new D_String();
                piece.String.Value = f.CurrentPiece();
            }
            else if ((c = makePiece(f)) != null)
            {
                piece.PieceContentClause = D_PieceContent.D_PieceContentClause.Piece;
                piece.Piece = c;
            }
            else
            {
                f.goBack(g);
                return null;
            }
            return piece;
        }
        private Tuple<string, string> buildPieceContents(VariableTracker vt, D_PieceContent pieceWrap, D_Item item)
        {
            StringBuilder cls = new StringBuilder();
            StringBuilder method = new StringBuilder();
            Tuple<string, string> v;

            switch (pieceWrap.PieceContentClause) {
                case D_PieceContent.D_PieceContentClause.Word:

                    var d = vt.NewVariable();
                    method.AppendLine("D_" + pieceWrap.Word.Value + " "+d+";\r\n if(("+d+" = make" + pieceWrap.Word.Value + "(f))!=null){");
                    break;
                case D_PieceContent.D_PieceContentClause.String:
                    method.AppendLine("if(isToken(f,\""+pieceWrap.String.Value+"\")){");
                    break;
                case D_PieceContent.D_PieceContentClause.Piece:

                    v = buildPiece(vt, pieceWrap.Piece, item);
                    method.AppendLine("{");
                    cls.AppendLine(v.Item1);
                    method.AppendLine(v.Item2);
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
            return new Tuple<string, string>(cls.ToString(), method.ToString());
        }