int match (char* s) { int pos = -1; int state = 1; int done = -1; while (1) { char c; c = s[++pos]; if (state == 4) { done = pos; if (c == '\0') break; if (c == 'a') { state = 4; continue; } if (c == 'b') { state = 4; continue; } break; } if (state == 1) { if (c == '\0') break; if (c == 'a') { state = 2; continue; } if (c == 'b') { state = 3; continue; } break; } if (state == 3) { if (c == '\0') break; if (c == 'a') { state = 2; continue; } if (c == 'b') { state = 4; continue; } break; } if (state == 2) { if (c == '\0') break; if (c == 'a') { state = 4; continue; } if (c == 'b') { state = 3; continue; } break; } fprintf( stderr, "error: Unknown state: %d", state ); exit(2); } return done; }