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))); }