44 lines
1.7 KiB
C++
44 lines
1.7 KiB
C++
//
|
|
// Created by doggo on 04/02/2021.
|
|
//
|
|
|
|
#include "../headers/lex.hpp"
|
|
#include <iostream>
|
|
using namespace std;
|
|
|
|
vector<tok> resVal;
|
|
|
|
void separate() {resVal.emplace_back(tok::SEPARATOR, "");}
|
|
|
|
vector<tok> 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;
|
|
} |