#include #include #include int scan (unsigned char *input, ssize_t end, ssize_t *res) { unsigned char ch; ssize_t p = 0; ssize_t r2 = -1; ssize_t r3 = -1; Q3: if (p == end) return -1; ch = input[p]; { if (ch < 58) { if (ch < 48) goto Q3_1; else goto Q3_0; } else goto Q3_1; } Q3_0: r2 = p; p++; goto Q6; Q3_1: p++; goto Q3; Q4: if (p == end) goto Q4_0; ch = input[p]; { if (ch < 120) { if (ch < 48) goto Q4_0; else { if (ch < 58) goto Q4_1; else goto Q4_0; } } else { if (ch < 121) goto Q4_2; else goto Q4_0; } } Q4_0: res[0] = r2; res[1] = p; p++; return 0; Q4_1: p++; goto Q4; Q4_2: p++; goto Q8; Q5: if (p == end) goto Q5_0; ch = input[p]; { if (ch < 58) { if (ch < 48) goto Q5_0; else goto Q5_1; } else goto Q5_0; } Q5_0: res[0] = r3; res[1] = p; p++; return 0; Q5_1: p++; goto Q5; Q6: if (p == end) return -1; ch = input[p]; { if (ch < 120) { if (ch < 48) goto Q6_1; else { if (ch < 58) goto Q6_0; else goto Q6_1; } } else { if (ch < 121) goto Q6_2; else goto Q6_1; } } Q6_0: p++; goto Q6; Q6_1: p++; goto Q3; Q6_2: p++; goto Q7; Q7: if (p == end) return -1; ch = input[p]; { if (ch < 58) { if (ch < 48) goto Q7_1; else goto Q7_0; } else goto Q7_1; } Q7_0: r3 = p; p++; goto Q4; Q7_1: p++; goto Q3; Q8: if (p == end) return -1; ch = input[p]; { if (ch < 58) { if (ch < 48) return -1; else goto Q8_0; } else return -1; } Q8_0: p++; goto Q5; } int main (int argc, char **argv) { ssize_t r[2] = { -1, -1 }; scan ((unsigned char*)(argv[1]), (ssize_t)strlen (argv[1]), r); printf ("%zd,%zd\n", r[0], r[1]); return 0; }