private String Step(SV s, String inp)
        {
            Char c = PreStep(ref inp);

            if (POINT.Contains(c))
            {
                return("0." + Step(new I0(), inp));
            }
            else if (ZERO.Contains(c))
            {
                return("0" + Step(new T2(), inp));
            }
            else if (DECIMAL.Contains(c))
            {
                return(c.ToString() + Step(new T4(), inp));
            }
            throw new CannotParseException();
        }
        private String Step(T2 s, String inp)
        {
            Char c;

            try
            {
                c = PreStep(ref inp);
            }
            catch (EndOfStringException)
            {
                return("");
            }

            if (POINT.Contains(c))
            {
                return(c.ToString() + Step(new T3(), inp));
            }

            throw new CannotParseException();
        }