diff --git a/app/main.c b/app/main.c index dc5ed95..fa51531 100644 --- a/app/main.c +++ b/app/main.c @@ -1,12 +1,36 @@ #include #include -#include "repl.h" +#include "evaluator.h" +#include "reader.h" -static repl_t repl; +#define BUFFER_SIZE 128U + +static memory_pool_t pool; +static char buffer[BUFFER_SIZE]; + +static bool step_repl(void) +{ + init_memory_pool(&pool); + + const int len = read_line(getchar, buffer, BUFFER_SIZE); + if (len < 0) + return false; + const expression_t *e = read_expression(&pool, buffer, len); + if (NULL == e) { + puts("Invalid expression\n"); + return true; + } + + const int result = evaluate(e); + printf("%d\n", result); + + return true; +} int main(void) { - run_repl(&repl); + while (step_repl()) + ; return EXIT_SUCCESS; } diff --git a/lib/include/repl.h b/lib/include/repl.h deleted file mode 100644 index 260267e..0000000 --- a/lib/include/repl.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef REPL_H -#define REPL_H - -#include "memory_pool.h" - -#define REPL_BUFFER_SIZE 128 - -typedef struct { - memory_pool_t pool; - char buffer[REPL_BUFFER_SIZE]; -} repl_t; - -bool step_repl(repl_t *repl); -void run_repl(repl_t *repl); - -#endif diff --git a/lib/repl.c b/lib/repl.c deleted file mode 100644 index ad7e914..0000000 --- a/lib/repl.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "repl.h" - -#include "evaluator.h" -#include "reader.h" - -#include -#include - -bool step_repl(repl_t *repl) -{ - init_memory_pool(&repl->pool); - - const int len = read_line(getchar, repl->buffer, REPL_BUFFER_SIZE); - if (len < 0) - return false; - const expression_t *e = read_expression(&repl->pool, repl->buffer, len); - if (NULL == e) { - puts("Invalid expression\n"); - return true; - } - - const int result = evaluate(e); - printf("%d\n", result); - - return true; -} - -void run_repl(repl_t *repl) -{ - while (step_repl(repl)) - ; -} diff --git a/scripts/build.sh b/scripts/build.sh index 0ca929a..1900541 100644 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -10,9 +10,7 @@ mkdir -p build clang $CFLAGS -c -o build/evaluator.o lib/evaluator.c clang $CFLAGS -c -o build/memory_pool.o lib/memory_pool.c clang $CFLAGS -c -o build/reader.o lib/reader.c -clang $CFLAGS -c -o build/repl.o lib/repl.c -ar -crs build/lib.a \ - build/evaluator.o build/memory_pool.o build/reader.o build/repl.o +ar -crs build/lib.a build/evaluator.o build/memory_pool.o build/reader.o # Build tests clang $CFLAGS -Itests -c -o build/testing.o tests/testing.c