6 #include "./tokenizer.h"
8 static bool is_symbol_char(char x)
10 static const char forbidden_symbol_chars[] = {
11 '(', ')', '"', '\'', ';'
13 static const size_t n = sizeof(forbidden_symbol_chars) / sizeof(char);
15 for (size_t i = 0; i < n; ++i) {
16 if (x == forbidden_symbol_chars[i] || isspace(x)) {
24 static const char *skip_whitespace(const char *str)
28 while(*str != 0 && isspace(*str)) {
35 static const char *next_quote(const char *str)
39 while(*str != 0 && *str != '"') {
46 static const char *skip_until_newline(const char *str)
50 while(*str != 0 && *str != '\n') {
57 static const char *next_non_symbol(const char *str)
61 while(*str != 0 && is_symbol_char(*str)) {
68 struct Token next_token(const char *str)
71 return token(NULL, NULL);
74 str = skip_whitespace(str);
76 return token(NULL, NULL);
79 while (*str != 0 && *str == ';') {
80 str = skip_until_newline(str + 1);
81 str = skip_whitespace(str);
87 return token(str, str + 1);
90 const char *str_end = next_quote(str + 1);
91 return token(str, *str_end == 0 ? str_end : str_end + 1);
95 return token(str, next_non_symbol(str + 1));