diff --git a/CMakeLists.txt b/CMakeLists.txt index 79429ed..a64adf4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,14 @@ project(calculator VERSION 1.0 LANGUAGES C) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) +include(FetchContent) + +FetchContent_Declare( + arena + GIT_REPOSITORY https://laentropia-homelab.tail7368da.ts.net/laentropia/Arena.git + GIT_TAG main + SOURCE_DIR ${CMAKE_SOURCE_DIR}/external/arena +) # Export compile_commands.json (para clangd) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -14,12 +22,29 @@ add_compile_options( ) -include_directories(include) +FetchContent_MakeAvailable(arena) + +add_library(arena STATIC + external/arena/src/arena.c +) + +target_include_directories(arena + PUBLIC ${CMAKE_SOURCE_DIR}/external/arena/include +) add_library(calculator_lib src/lexer.c src/parser.c src/evaluator.c + src/ASTNodeArray.c +) + +target_include_directories(calculator_lib + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +target_link_libraries(calculator_lib + PUBLIC arena ) add_executable(calculator src/main.c) diff --git a/external/arena b/external/arena new file mode 160000 index 0000000..3d3b859 --- /dev/null +++ b/external/arena @@ -0,0 +1 @@ +Subproject commit 3d3b8596ccf2e31983c0c83eb36572a1e4399ec4 diff --git a/include/evaluator.h b/include/evaluator.h index 78c5730..d176bd2 100644 --- a/include/evaluator.h +++ b/include/evaluator.h @@ -2,6 +2,7 @@ #define EVALUATOR_H #include "lexer.h" +#include "arena.h" #include int64_t evaluate(ASTNode *tree); diff --git a/include/parser.h b/include/parser.h index 911d964..03d5443 100644 --- a/include/parser.h +++ b/include/parser.h @@ -2,6 +2,7 @@ #define PARSER_H #include "lexer.h" +#include "arena.h" #include typedef struct { diff --git a/src/parser.c b/src/parser.c index c2ac315..6803508 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1,9 +1,10 @@ #include "parser.h" #include "lexer.h" +#include "arena.h" #include #include #include -#include + uint8_t node_lbp(ASTNode node) { if (node.type == NODE_INTEGER) {