From dc758810b463c1674991601edb0ba41d40831e7a Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 11 Oct 2021 09:59:42 +0200 Subject: Remove most code for step-by-step guide --- src/bootstrap/parser.c | 78 -------------------------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 src/bootstrap/parser.c (limited to 'src/bootstrap/parser.c') diff --git a/src/bootstrap/parser.c b/src/bootstrap/parser.c deleted file mode 100644 index 7a5b516..0000000 --- a/src/bootstrap/parser.c +++ /dev/null @@ -1,78 +0,0 @@ -Token * -consume_token(Tokens *tokens) { - if (tokens->n == 0) { - return NULL; - } - Token *ret = tokens->start; - tokens->start = &tokens->start[1]; - tokens->n--; - return ret; -} - -Object * -parse(Tokens *tokens) { - while (tokens->n > 0) { - Token *token = consume_token(tokens); - if (token == NULL) { - return NULL; - } - - switch (token->type) { - case TOKEN_FIXNUM: { - ssize_t num = 0; - int sign = 1; - for (size_t i = 0; i < token->value.n; i++) { - char c = token->value.start[i]; - if (c == '-') { - sign = -1; - continue; - } - num = num * 10 + (c - '0'); - } - return make_fixnum(num * sign); - } break; - case TOKEN_BOOL: { - if (sv_equal(token->value, TRUE_TOKEN)) { - return obj_true; - } - if (sv_equal(token->value, FALSE_TOKEN)) { - return obj_false; - } - } break; - case TOKEN_RPAREN: { - return NULL; - } break; - case TOKEN_LPAREN: { - if (tokens->n > 0 && tokens->start[0].type == TOKEN_RPAREN) { - return obj_nil; - } - - Object *next_obj = parse(tokens); - if (next_obj == NULL) { - return NULL; - } - Object *root = make_pair(next_obj, obj_nil); - Object *list = root; - while (tokens->n > 0 && (next_obj = parse(tokens)) != NULL) { - list->cdr = make_pair(next_obj, obj_nil); - list = list->cdr; - } - return root; - } break; - case TOKEN_STRING: { - Object *obj = make_empty_string(); - append_string(obj, token->value); - return obj; - } break; - case TOKEN_SYMBOL: { - return make_symbol(token->value.start, token->value.n); - } break; - default: { - fprintf(stderr, "error: unknown token\n"); - } break; - } - } - - return NULL; -} - -- cgit v1.2.1