2022-03-11 16:00:09 +00:00
|
|
|
#include "Normalizer.h"
|
2022-06-16 15:13:01 +00:00
|
|
|
#include "utils.h"
|
2022-03-11 16:00:09 +00:00
|
|
|
|
|
|
|
TokenStream Normalizer::normalize(const TokenStream& input)
|
|
|
|
{
|
2022-06-16 15:13:01 +00:00
|
|
|
TokenStream result;
|
|
|
|
int i = 0;
|
|
|
|
while (i < input.size())
|
|
|
|
{
|
|
|
|
Token current = input[i];
|
|
|
|
if (current.tk_type == TT_Null)
|
|
|
|
{
|
|
|
|
i++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (current.tk_type == TT_Equal)
|
|
|
|
{
|
|
|
|
if (i + 1 != input.size())
|
|
|
|
{
|
|
|
|
if (input[i + 1].tk_type == TT_Equal)
|
|
|
|
{
|
|
|
|
i += 2;
|
|
|
|
result.push_back(current.copy_with_new_type(TT_Equals));
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
result.push_back(current);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (current.tk_type == TT_Exclamation)
|
|
|
|
{
|
|
|
|
if (i + 1 != input.size())
|
|
|
|
{
|
|
|
|
if (input[i + 1].tk_type == TT_Equal)
|
|
|
|
{
|
|
|
|
i += 2;
|
|
|
|
result.push_back(current.copy_with_new_type(TT_NEqual));
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
result.push_back(current);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (current.tk_type == TT_GreaterThan)
|
|
|
|
{
|
|
|
|
if (i + 1 != input.size())
|
|
|
|
{
|
|
|
|
if (input[i + 1].tk_type == TT_Equal)
|
|
|
|
{
|
|
|
|
i += 2;
|
|
|
|
result.push_back(current.copy_with_new_type(TT_GTE));
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
result.push_back(current);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (current.tk_type == TT_LessThan)
|
|
|
|
{
|
|
|
|
if (i + 1 != input.size())
|
|
|
|
{
|
|
|
|
if (input[i + 1].tk_type == TT_Equal)
|
|
|
|
{
|
|
|
|
i += 2;
|
|
|
|
result.push_back(current.copy_with_new_type(TT_LTE));
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
result.push_back(current);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
result.push_back(current);
|
|
|
|
continue;
|
|
|
|
}
|
2022-03-11 16:00:09 +00:00
|
|
|
|
2022-06-16 15:13:01 +00:00
|
|
|
return result;
|
2022-03-11 16:00:09 +00:00
|
|
|
}
|