public static Automaton MakeIntegerValue(string value)
        {
            var minus = false;
            var i     = 0;

            while (i < value.Length)
            {
                var c = value[i];
                if (c == '-')
                {
                    minus = true;
                }

                if (c >= '1' && c <= '9')
                {
                    break;
                }

                i++;
            }

            var sb = new StringBuilder();

            _ = sb.Append(value, i, value.Length - i);
            if (sb.Length == 0)
            {
                _ = sb.Append("0");
            }

            var s = minus ? Automaton.MakeChar('-') : Automaton.MakeChar('+').Optional();

            return(Automaton.Minimize(
                       WhitespaceAutomaton.Concatenate(
                           s.Concatenate(Automaton.MakeChar('0').Repeat())
                           .Concatenate(Automaton.MakeString(sb.ToString())))
                       .Concatenate(WhitespaceAutomaton)));
        }
        public static Automaton MakeDecimalValue(string value)
        {
            var minus = false;
            var i     = 0;

            while (i < value.Length)
            {
                var c = value[i];
                if (c == '-')
                {
                    minus = true;
                }

                if ((c >= '1' && c <= '9') || c == '.')
                {
                    break;
                }

                i++;
            }

            var sb1 = new StringBuilder();
            var sb2 = new StringBuilder();
            var p   = value.IndexOf('.', i);

            if (p == -1)
            {
                _ = sb1.Append(value, i, value.Length - i);
            }
            else
            {
                _ = sb1.Append(value, i, p - i);
                i = value.Length - 1;
                while (i > p)
                {
                    var c = value[i];
                    if (c >= '1' && c <= '9')
                    {
                        break;
                    }

                    i--;
                }

                _ = sb2.Append(value, p + 1, i + 1 - (p + 1));
            }

            if (sb1.Length == 0)
            {
                _ = sb1.Append("0");
            }

            var s = minus ? Automaton.MakeChar('-') : Automaton.MakeChar('+').Optional();
            var d = sb2.Length == 0
                ? Automaton.MakeChar('.').Concatenate(Automaton.MakeChar('0').Repeat(1)).Optional()
                : Automaton.MakeChar('.')
                    .Concatenate(Automaton.MakeString(sb2.ToString()))
                    .Concatenate(Automaton.MakeChar('0')
                                 .Repeat());

            return(Automaton.Minimize(WhitespaceAutomaton
                                      .Concatenate(s.Concatenate(Automaton.MakeChar('0').Repeat()).Concatenate(Automaton.MakeString(sb1.ToString())).Concatenate(d))
                                      .Concatenate(WhitespaceAutomaton)));
        }