diff options
author | kdx <kikoodx@paranoici.org> | 2023-03-15 19:45:43 +0100 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2023-03-15 19:49:03 +0100 |
commit | 4b069f86578ecf84301b80a66f3cce722005d94b (patch) | |
tree | 2f1bbb5807da798645dc624ddc7bf870e2129234 | |
parent | 0d7f156145be397af2d36890d8126f75b70ee377 (diff) | |
download | golem-4b069f86578ecf84301b80a66f3cce722005d94b.tar.gz |
get rid of duplicate TOK_END
-rw-r--r-- | lexer.c | 7 | ||||
-rw-r--r-- | main.c | 17 | ||||
-rw-r--r-- | mvp.golem | 2 | ||||
-rw-r--r-- | onlymain.golem | 4 | ||||
-rwxr-xr-x | test.sh | 1 |
5 files changed, 23 insertions, 8 deletions
@@ -59,9 +59,12 @@ lexer(Slice slice) // Single character tokens. if (simple_token(slice.str[i]) != TOK_NONE) { - token_append(&toks, - token_create(slice_sub(slice, i, i + 1), + Slice sub = slice_sub(slice, i, i + 1); + token_append(&toks, token_create(sub, simple_token(slice.str[i]))); + if (slice.str[i] == '}') + token_append(&toks, + token_create(sub, TOK_END)); i += 1; continue; } @@ -6,6 +6,14 @@ #include <stdio.h> #include <stdlib.h> +static void +destroy_duplicates(Token **list, unsigned int type) +{ + for (Token *e = (*list)->next; e != NULL; e = e->next) + if (e->type == type && e->prev->type == type) + token_delete(list, e->prev); +} + int main(int argc, char **argv) { @@ -24,11 +32,12 @@ main(int argc, char **argv) fclose(file); Token *tokens = lexer(slice); + destroy_duplicates(&tokens, TOK_END); group_scope(&tokens); - group_deref(&tokens); - group_funcall(&tokens); - group_global(&tokens); - group_local(&tokens); + //group_deref(&tokens); + //group_funcall(&tokens); + //group_global(&tokens); + //group_local(&tokens); token_print(tokens, 1, 0); token_destroy(tokens); @@ -11,7 +11,7 @@ main(argc argv) { local world; g_heap = 8000; - hello = (strdup "bonjour"); + hello = (strdup "bonjour");;; world = (strdup "monde"); (print hello); (print " "); diff --git a/onlymain.golem b/onlymain.golem new file mode 100644 index 0000000..e973537 --- /dev/null +++ b/onlymain.golem @@ -0,0 +1,4 @@ +main(argc argv) { + (print [argv (sub argc 1)]); + return (less argc 2); +}; @@ -1,4 +1,3 @@ #!/bin/sh ./build.sh || exit 1 -./golem mvp.golem || exit 1 valgrind ./golem mvp.golem || exit 1 |