From 2f853fe797b92460d6a4a503c6813e5c0330d0a7 Mon Sep 17 00:00:00 2001 From: Username404 Date: Fri, 6 Aug 2021 19:10:28 +0200 Subject: [PATCH] Add unsigned short values to the tok::type enum and move the parseString function to misc.hpp. --- CMakeLists.txt | 2 +- src/etc/lexer.cpp | 18 ++++-------------- src/headers/lex.hpp | 15 +++++++++------ src/headers/misc.hpp | 5 +++-- src/parser/MainParse.cpp | 7 ------- 5 files changed, 17 insertions(+), 30 deletions(-) delete mode 100644 src/parser/MainParse.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index f7c86d1..9d6c87b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,7 +83,7 @@ set(CPACK_PACKAGE_INSTALL_DIRECTORY "Yerbacon ${CMAKE_PROJECT_VERSION_MAJOR}.${C set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${CMAKE_PROJECT_VERSION}-${TIME}") include_directories(${CMAKE_CURRENT_LIST_DIR}) -add_executable(${EXENAME} src/main.cpp ${CMAKE_CURRENT_BINARY_DIR}/processed/${PROJECT_NAME}.rc src/parser/MainParse.cpp src/etc/filefuncs.cpp src/etc/lexer.cpp src/headers/lex.hpp src/headers/misc.hpp src/headers/parsing/ParseComponents.hpp src/headers/transpiler/Target.hpp src/headers/transpiler/implementations/Lua.hpp src/headers/transpiler/implementations/Js.hpp src/headers/transpiler/implementations/Py.hpp src/headers/parsing/Parser.hpp src/headers/Yerbacon.hpp src/headers/arguments.hpp) +add_executable(${EXENAME} src/main.cpp ${CMAKE_CURRENT_BINARY_DIR}/processed/${PROJECT_NAME}.rc src/etc/filefuncs.cpp src/etc/lexer.cpp src/headers/lex.hpp src/headers/misc.hpp src/headers/parsing/ParseComponents.hpp src/headers/transpiler/Target.hpp src/headers/transpiler/implementations/Lua.hpp src/headers/transpiler/implementations/Js.hpp src/headers/transpiler/implementations/Py.hpp src/headers/parsing/Parser.hpp src/headers/Yerbacon.hpp src/headers/arguments.hpp) target_compile_definitions(ybcon PRIVATE YBCON_VERSION="${CODENAME} ${PROJECT_VERSION}") # lpkg = linux package, wpkg = windows package diff --git a/src/etc/lexer.cpp b/src/etc/lexer.cpp index 970b67c..2664e0c 100644 --- a/src/etc/lexer.cpp +++ b/src/etc/lexer.cpp @@ -14,20 +14,10 @@ vector lex(const string& in) for (unsigned int i = 0; i < in.size(); ++i) { const char& current = in[i]; switch (current) { - case '#': resVal.emplace_back(tok::TAG, "#"); break; - case '=': resVal.emplace_back(tok::DEFINE, "="); break; - case '(': resVal.emplace_back(tok::LPAR, "("); break; - case ')': resVal.emplace_back(tok::RPAR, ")"); break; - case '{': resVal.emplace_back(tok::LBRACE, "{"); break; - case '}': resVal.emplace_back(tok::RBRACE, "}"); break; - case '[': resVal.emplace_back(tok::LBRACKET, "["); break; - case ']': resVal.emplace_back(tok::RBRACKET, "]"); break; - case '+': resVal.emplace_back(tok::PLUS, "+"); break; - case '-': resVal.emplace_back(tok::HYPHEN, "-"); break; - case '>': resVal.emplace_back(tok::LCOMP, ">"); break; - case '<': resVal.emplace_back(tok::RCOMP, "<"); break; - case '$': resVal.emplace_back(tok::DOLLAR_SIGN, "$"); break; - case '\'': resVal.emplace_back(tok::SQUOTE, "\'"); break; + case tok::TAG: case tok::DEFINE: case tok::LPAR: case tok::RPAR: + case tok::LBRACE: case tok::RBRACE: case tok::LBRACKET: case tok::RBRACKET: + case tok::PLUS: case tok::HYPHEN: case tok::LCOMP: case tok::RCOMP: + case '$': case '\'': resVal.emplace_back(static_cast(current), string(1, current)); case ' ': case '\t': case '\r': case '\n': break; default: { diff --git a/src/headers/lex.hpp b/src/headers/lex.hpp index cb9366b..e07d724 100644 --- a/src/headers/lex.hpp +++ b/src/headers/lex.hpp @@ -3,18 +3,21 @@ #include #include "Yerbacon.hpp" +#include #include struct tok { class LexerException: public Yerbacon::Exception { using Yerbacon::Exception::Exception; }; - enum type { - DEFINE, TAG, DOLLAR_SIGN, NUMBER, PLUS, LPAR, LBRACE, LBRACKET, RPAR, RBRACE, RBRACKET, ALPHACHAR, HYPHEN, LCOMP, RCOMP, - SQUOTE, - STRING, - IDENTIFIER, - UNEXPECTED + enum type: const unsigned short { + UNEXPECTED = std::numeric_limits::max() + 1, IDENTIFIER, NUMBER, ALPHACHAR, + DEFINE = '=', TAG = '#', DOLLAR_SIGN = '$', + PLUS = '+', LPAR = '(', LBRACE = '{', LBRACKET = '[', RPAR = ')', + RBRACE = '}', RBRACKET = ']', + HYPHEN = '-', LCOMP = '>', RCOMP = '<', + SQUOTE = '\'', + STRING = '"', }; const type toktype; const std::string toktext; diff --git a/src/headers/misc.hpp b/src/headers/misc.hpp index a380eb7..0962dee 100644 --- a/src/headers/misc.hpp +++ b/src/headers/misc.hpp @@ -4,7 +4,8 @@ string getFileContent(const string& file); void outputFileContent(const string& file, string_view content); -#include "src/headers/parsing/ParseComponents.hpp" -ParseTree parseString(const string& toParse); +#include "lex.hpp" +#include "parsing/Parser.hpp" +inline auto parseString(const string& toParse) { return Parser::parseVector(lex(toParse)); } #endif //YERBACON_MISC_HPP \ No newline at end of file diff --git a/src/parser/MainParse.cpp b/src/parser/MainParse.cpp deleted file mode 100644 index e75aa99..0000000 --- a/src/parser/MainParse.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include "../headers/parsing/Parser.hpp" - -using namespace std; - -ParseTree parseString(const string& toParse) { - return Parser::parseVector(lex(toParse)); -} \ No newline at end of file