// // Created by doggo on 04/02/2021. // #include "../headers/lex.hpp" #include using namespace std; vector resVal; void separate() {resVal.emplace_back(tok::SEPARATOR, "");} vector lex(const string& in) { for (const char& current : in) { 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::SQUOTE, "\'"); break; case '"': resVal.emplace_back(tok::DQUOTE, "\""); break; case ' ': case '\t': case '\r': case '\n': separate(); break; default: { if (isdigit(current)) resVal.emplace_back(tok::INT, string(1, current)); else if (isalpha(current)) resVal.emplace_back(tok::ALPHACHAR, string(1, current)); else resVal.emplace_back(tok::OTHER, string(1, current)); break; } } } return resVal; }