diff --git a/CMakeLists.txt b/CMakeLists.txt index 5dbc97e..72a2273 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,10 +15,10 @@ enable_testing() add_subdirectory(external/googletest) # Adds the sub-directories of all of the binaries # +# The order is equivalent to which order they are compiled # add_subdirectory(lexer) +add_subdirectory(ast) -# The app subdirectory # +# Executable directories # add_subdirectory(LXC) - -# Compiles the tests # add_subdirectory(tests) diff --git a/LXC/CMakeLists.txt b/LXC/CMakeLists.txt index 342b4f1..2ea22fc 100644 --- a/LXC/CMakeLists.txt +++ b/LXC/CMakeLists.txt @@ -3,6 +3,7 @@ add_executable(LXC LXC.cpp) # Links the other binaries # target_link_libraries(LXC PRIVATE Lexer) +target_link_libraries(LXC PRIVATE AST) # Creates the precompiled header for the binary # target_include_directories(LXC PRIVATE ${CMAKE_SOURCE_DIR}/common) diff --git a/Lexer/CMakeLists.txt b/Lexer/CMakeLists.txt index 6086259..8ba0b40 100644 --- a/Lexer/CMakeLists.txt +++ b/Lexer/CMakeLists.txt @@ -1,8 +1,8 @@ # Fetches all files for in the binary # file (GLOB LexerSources src/*.cpp inc/*.h) - add_library(Lexer STATIC ${LexerSources}) +# Adds the headers in the current directory # target_include_directories ( Lexer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/inc diff --git a/ast/CMakeLists.txt b/ast/CMakeLists.txt new file mode 100644 index 0000000..09a68b0 --- /dev/null +++ b/ast/CMakeLists.txt @@ -0,0 +1,16 @@ +# Fetches all files for the binary # +file (GLOB ASTSources src/*.cpp inc/*.h) +add_library(AST STATIC ${ASTSources}) + +# Adds the headers in the current directory # +target_include_directories ( + AST PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/inc +) + +# Links to the Lexer so it can use tokens as data types # +target_link_libraries(AST PUBLIC Lexer) + +# Creates the precompiled header of the binary # +target_include_directories(AST PRIVATE ${CMAKE_SOURCE_DIR}/common) +target_precompile_headers(AST PRIVATE ${CMAKE_SOURCE_DIR}/common/LXC.h) diff --git a/ast/inc/Node.h b/ast/inc/Node.h new file mode 100644 index 0000000..1ce5e04 --- /dev/null +++ b/ast/inc/Node.h @@ -0,0 +1,35 @@ +#include + +namespace LXC::AST +{ + enum class NodeType + { + // General nodes // + + Identifier, + Operation, + + // Variable nodes // + + Var_Declare, + Var_Assign, + Var_Access, + + // Control flow nodes // + + IfBranch, + ReturnVal + + }; + + class Node + { + public: + Node(NodeType _type) + : m_Type(_type) + {} + + protected: + const NodeType m_Type; + }; +} diff --git a/ast/src/AST.cpp b/ast/src/AST.cpp new file mode 100644 index 0000000..3c9f4b2 --- /dev/null +++ b/ast/src/AST.cpp @@ -0,0 +1 @@ +#include