Added warnings and errors and created functions for cleaner code

This commit is contained in:
sam-astro 2022-01-05 09:54:02 -05:00 committed by GitHub
parent 22fa7fd57f
commit 5df1c50c16
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -31,7 +31,7 @@ bool isNumber(const string& str)
return true; return true;
} }
bool stob(const string str) { bool stob(string str) {
transform(str.begin(), str.end(), str.begin(), ::tolower); transform(str.begin(), str.end(), str.begin(), ::tolower);
istringstream is(str); istringstream is(str);
bool b; bool b;
@ -39,7 +39,7 @@ bool stob(const string str) {
return b; return b;
} }
string StringRaw(const string s) string StringRaw(const string& s)
{ {
string str = trim(s); string str = trim(s);
@ -59,7 +59,7 @@ string StringRaw(const string s)
return withoutQuotes; return withoutQuotes;
} }
string Quoted(const string s) string Quoted(const string& s)
{ {
string str = trim(s); string str = trim(s);
@ -76,7 +76,7 @@ string Quoted(const string s)
return withQuotes; return withQuotes;
} }
string RMParenthesis(const string s) string RMParenthesis(const string& s)
{ {
string str = trim(s); string str = trim(s);
string withoutParenthesis; string withoutParenthesis;
@ -92,7 +92,7 @@ string RMParenthesis(const string s)
return withoutParenthesis; return withoutParenthesis;
} }
any GetVariableValue(const string varName, const unordered_map<string, any>& variableVals) any GetVariableValue(const string& varName, const unordered_map<string, any>& variableVals)
{ {
auto iA = variableVals.find(varName); auto iA = variableVals.find(varName);
if (iA != variableVals.end()) if (iA != variableVals.end())
@ -113,7 +113,7 @@ any GetVariableValue(const string varName, const unordered_map<string, any>& var
} }
} }
bool IsVar(const string varName, const unordered_map<string, any>& variableVals) bool IsVar(const string& varName, const unordered_map<string, any>& variableVals)
{ {
if (variableVals.find(varName) != variableVals.end()) if (variableVals.find(varName) != variableVals.end())
return true; return true;
@ -121,37 +121,33 @@ bool IsVar(const string varName, const unordered_map<string, any>& variableVals)
return false; return false;
} }
vector<any> VarValues(const vector<string> varNames, const unordered_map<string, any>& variableVals) vector<any> VarValues(const vector<string>& varNames, const unordered_map<string, any>& variableVals)
{ {
vector<any> realValues; vector<any> realValues;
for (int varIndex = 0; varIndex < varNames.size(); varIndex++) for (int varIndex = 0; varIndex < varNames.size(); varIndex++)
{ {
varNames[varIndex] = trim(varNames[varIndex]); string varName = trim(varNames[varIndex]);
auto iA = variableVals.find(varNames[varIndex]); auto iA = variableVals.find(varName);
if (iA != variableVals.end()) if (iA != variableVals.end())
{ {
realValues.push_back(iA->second); realValues.push_back(iA->second);
} }
else else
{ {
auto iB = globalVariableValues.find(varNames[varIndex]); auto iB = globalVariableValues.find(varName);
if (iB != globalVariableValues.end()) if (iB != globalVariableValues.end())
{
realValues.push_back(iB->second); realValues.push_back(iB->second);
}
else else
{ realValues.push_back(varName);
realValues.push_back(varNames[varIndex]);
}
} }
} }
return realValues; return realValues;
} }
bool IsFunction(const string funcName) bool IsFunction(const string& funcName)
{ {
if (functionValues.find(funcName) != functionValues.end()) if (functionValues.find(funcName) != functionValues.end())
return true; return true;
@ -159,7 +155,20 @@ bool IsFunction(const string funcName)
return false; return false;
} }
any EvalExpression(const string ex, const unordered_map<string, any>& variableVals) int LogWarning(const string& warningText)
{
cerr << "\x1B[33mWARNING: " << warningText << "\033[0m\t\t" << endl;
return 1;
}
int CriticalError(const string& errorText)
{
cerr << "\x1B[31mERROR: " << errorText << "\033[0m\t\t" << endl;
exit(EXIT_FAILURE);
return 2;
}
any EvalExpression(const string& ex, const unordered_map<string, any>& variableVals)
{ {
string expression = trim(ex); string expression = trim(ex);
bool inQuotes = false; bool inQuotes = false;
@ -295,7 +304,7 @@ any EvalExpression(const string ex, const unordered_map<string, any>& variableVa
return evaluate(newExpression); return evaluate(newExpression);
} }
bool BooleanLogic(const string valA, const string determinant, const string valB, const unordered_map<string, any>& variableVals) bool BooleanLogic(const string& valA, const string& determinant, const string& valB, const unordered_map<string, any>& variableVals)
{ {
any valARealValue = EvalExpression(valA, variableVals); any valARealValue = EvalExpression(valA, variableVals);
any valBRealValue = EvalExpression(valB, variableVals); any valBRealValue = EvalExpression(valB, variableVals);
@ -316,7 +325,7 @@ bool BooleanLogic(const string valA, const string determinant, const string valB
return false; return false;
} }
int evalEqu(const vector<string> str, unordered_map<string, any>& variableValues) int evalEqu(const vector<string>& str, unordered_map<string, any>& variableValues)
{ {
if (IsVar(str[0], variableValues)) if (IsVar(str[0], variableValues))
{ {
@ -350,6 +359,7 @@ int evalEqu(const vector<string> str, unordered_map<string, any>& variableValues
//cout << variables[v] << " is " << variableValues[v] << endl; //cout << variables[v] << " is " << variableValues[v] << endl;
return 0; return 0;
} }
LogWarning("uninitialized variable or typo in \'" << str[0] << "\'");
return 1; return 1;
} }
@ -542,8 +552,7 @@ any ExecuteFunction(const string functionName, const vector<any> inputVarVals)
} }
catch (const std::exception&) catch (const std::exception&)
{ {
cout << "\x1B[31mERROR: \'" << unWrapVec(words[lineNum]) << "\'\nIn function: " << functionName << "\nLine: " << lineNum << "\033[0m\t\t" << endl; CriticalError("\'" << unWrapVec(words[lineNum]) << "\'\nIn function: " << functionName << "\nLine: " << lineNum);
exit(1);
} }
if (!returnVal.empty()) if (!returnVal.empty())
return returnVal; return returnVal;
@ -598,24 +607,17 @@ int parseSlang(string script)
//cout << functName << " is \n" << Vec2Str(functionContents) << endl << endl; //cout << functName << " is \n" << Vec2Str(functionContents) << endl << endl;
} }
else else
for (int t = 0; t < (int)types.size(); t++) {
if (words[lineNum][0] == types[t]) if(words[lineNum][0] == "string")
{ globalVariableValues[words[lineNum][1]] = StringRaw(words[lineNum][3]);
else if(words[lineNum][0] == "int")
//Checks if it is variable globalVariableValues[words[lineNum][1]] = stoi(words[lineNum][3]);
else else if(words[lineNum][0] == "float")
{ globalVariableValues[words[lineNum][1]] = stof(words[lineNum][3]);
if(words[lineNum][0] == "string") else if(words[lineNum][0] == "bool")
globalVariableValues[words[lineNum][1]] = words[lineNum][3]; globalVariableValues[words[lineNum][1]] = stob(words[lineNum][3]);
else if(words[lineNum][0] == "int") LogWarning("unrecognized type \'" + words[lineNum][0] + "\' on line: " + lineNum);
globalVariableValues[words[lineNum][1]] = stoi(words[lineNum][3]); }
else if(words[lineNum][0] == "float")
globalVariableValues[words[lineNum][1]] = stof(words[lineNum][3]);
else if(words[lineNum][0] == "bool")
globalVariableValues[words[lineNum][1]] = stob(words[lineNum][3]);
//cout << words[lineNum][1] << " is " << words[lineNum][3] << endl;
}
}
} }
// Executes main, which is the starting function // Executes main, which is the starting function