Pre-compile the token_RE regular expression.
| 179 | |
| 180 | // Pre-compile the token_RE regular expression. |
| 181 | regex_t *precompile(void) |
| 182 | { |
| 183 | regex_t *re = malloc(sizeof(regex_t)); |
| 184 | int errcode = regcomp(re, token_RE, REG_EXTENDED); |
| 185 | if (errcode) { // Really should never happen... |
| 186 | char buf[BUFSIZ]; |
| 187 | regerror(errcode, re, buf, sizeof(buf)); |
| 188 | fprintf(stderr, "(F) Pattern for token_RE does not compile.\n"); |
| 189 | regfree(re); |
| 190 | free(re); |
| 191 | exit(1); |
| 192 | } |
| 193 | return re; |
| 194 | } |
| 195 | |
| 196 | // Returns length of matched token (ws inclusive) or 0 when in error. |
| 197 | unsigned get_token(char const *text, unsigned start) |