#include #include #include typedef uint32_t rune; //typedef char rune; #if 0 State 0: on #\s goto 4 on (- T #\s) goto 0 on :EOF goto 0 State 4: on #\u goto 5 on (- T (OR #\s #\u)) goto 0 on #\s goto 4 on :EOF goto 0 State 5: on #\n goto 6 on (- T (OR #\n #\s)) goto 0 on #\s goto 4 on :EOF goto 0 State 6: on :EXIT goto 2 do (PSETQ $0.S (- P 3) $0.E P) #endif size_t sun (const rune * restrict buf, size_t n) { size_t p = 0; L0: if (p == n) return (size_t)-1; switch (buf[p++]) { case 's': goto L4; default: goto L0; } L4: if (p == n) return (size_t)-1; switch (buf[p++]) { case 'u': goto L5; case 's': goto L4; default: goto L0; } L5: if (p == n) return (size_t)-1; switch (buf[p++]) { case 'n': goto L6; case 's': goto L4; default: goto L0; } L6: return p; }