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)
72 str = skip_whitespace(str);
74 return token(str, str);
77 while (*str != 0 && *str == ';') {
78 str = skip_until_newline(str + 1);
79 str = skip_whitespace(str);
86 return token(str, str + 1);
89 const char *str_end = next_quote(str + 1);
90 return token(str, *str_end == 0 ? str_end : str_end + 1);
94 return token(str, next_non_symbol(str + 1));