60 lines
1.3 KiB
C
60 lines
1.3 KiB
C
#ifndef EQUATIONS_H
|
|
#define EQUATIONS_H
|
|
#pragma once
|
|
#include "defines.h"
|
|
#include "terms/Brackets.h"
|
|
#include "terms/Constant.h"
|
|
#include "terms/Equal.h"
|
|
#include "terms/Operator.h"
|
|
#include "terms/Term.h"
|
|
#include "terms/Variable.h"
|
|
#include "terms/Paranthesis.h"
|
|
#include "tokenizer.h"
|
|
|
|
#include "../vendor/lexertk.hpp"
|
|
|
|
struct Equation {
|
|
vector<Term*> lwing;
|
|
vector<Term*> rwing;
|
|
|
|
LOG* log = nullptr;
|
|
|
|
// TODO: Optimize this mess
|
|
void Parse(lexertk::generator expression) {
|
|
tok_log = log;
|
|
|
|
string lwing_str;
|
|
string rwing_str;
|
|
|
|
bool left = true;
|
|
for (int i = 0; i < expression.size(); i++) {
|
|
if (expression[i].value[0] == '\0') continue;
|
|
|
|
if (expression[i].value[0] == '=') {
|
|
left = !left;
|
|
continue; // dont add equal sign
|
|
}
|
|
else left = left;
|
|
(left) ? lwing_str.append(expression[i].value) : rwing_str.append(expression[i].value); // append to wings
|
|
}
|
|
|
|
// Tokenize wings
|
|
lexertk::generator lwing_lexer;
|
|
lwing_lexer.process(lwing_str);
|
|
lwing = tokenize(lwing_lexer);
|
|
if (lwing.empty()) {
|
|
return; // error occured
|
|
}
|
|
|
|
lexertk::generator rwing_lexer;
|
|
rwing_lexer.process(rwing_str);
|
|
rwing = tokenize(rwing_lexer);
|
|
if (lwing.empty()) {
|
|
return; // error occured
|
|
}
|
|
|
|
tok_log = nullptr;
|
|
}
|
|
};
|
|
|
|
#endif // !EQUATIONS_H
|