mirror of
https://github.com/sam-astro/Z-Sharp.git
synced 2025-12-13 09:02:10 +00:00
Added warnings and errors and created functions for cleaner code
This commit is contained in:
parent
22fa7fd57f
commit
5df1c50c16
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user