finish operation vector building

This commit is contained in:
2026-10-05 11:17:48 +03:00
parent f00ed50d32
commit bc4fbafec4
7 changed files with 412 additions and 60 deletions
+17 -24
View File
@@ -87,9 +87,9 @@ class Parser
public:
char buffer[256];
std::shared_ptr<std::vector<Expression::Token>>& pv;
std::vector<Expression::Token>& pv;
Parser(std::shared_ptr<std::vector<Expression::Token>>& pv)
Parser(std::vector<Expression::Token>& pv)
: s(I), pv(pv)
{
buf_clear();
@@ -210,7 +210,7 @@ public:
}
else
{
pv->push_back(Expression::Token(value));
pv.push_back(Expression::Token(value));
}
return 0;
@@ -234,7 +234,7 @@ public:
}
int leave_rv(void)
{
pv->push_back(Expression::Token(buffer));
pv.push_back(Expression::Token(buffer));
return 0;
}
@@ -261,37 +261,37 @@ public:
{
if (!strcmp(buffer, "("))
{
pv->push_back(Expression::Token(Expression::Token::OPA));
pv.push_back(Expression::Token(Expression::Token::OPA));
break;
}
else if (!strcmp(buffer, ")"))
{
pv->push_back(Expression::Token(Expression::Token::CPA));
pv.push_back(Expression::Token(Expression::Token::CPA));
break;
}
else if (!strcmp(buffer, "+"))
{
pv->push_back(Expression::Token(Expression::Token::ADD));
pv.push_back(Expression::Token(Expression::Token::ADD));
break;
}
else if (!strcmp(buffer, "-"))
{
pv->push_back(Expression::Token(Expression::Token::SUB));
pv.push_back(Expression::Token(Expression::Token::SUB));
break;
}
else if (!strcmp(buffer, "*"))
{
pv->push_back(Expression::Token(Expression::Token::MUL));
pv.push_back(Expression::Token(Expression::Token::MUL));
break;
}
else if (!strcmp(buffer, "/"))
{
pv->push_back(Expression::Token(Expression::Token::DIV));
pv.push_back(Expression::Token(Expression::Token::DIV));
break;
}
else if (!strcmp(buffer, "**"))
{
pv->push_back(Expression::Token(Expression::Token::POW));
pv.push_back(Expression::Token(Expression::Token::POW));
break;
}
}
@@ -308,9 +308,9 @@ public:
}
};
std::shared_ptr<std::vector<Expression::Token>> tokenize_input(const char * const input_string)
std::vector<Expression::Token> tokenize_input(const char * const input_string)
{
std::shared_ptr<std::vector<Expression::Token>> pv = std::make_shared<std::vector<Expression::Token>>();
std::vector<Expression::Token> pv;
Parser p(pv);
for (int i = 0, l = strlen(input_string) + 1; i < l; i++)
@@ -361,8 +361,12 @@ int assert_same(const std::vector<Expression::Token>& a, const std::vector<Expre
return 1;
}
break;
default:
pr_warn("Token skipped");
break;
}
}
return 0;
}
@@ -377,15 +381,4 @@ void print_token_vector(const std::vector<Expression::Token>& tv)
std::cout << "(" << *tv[i].to_str() << ")\n";
}
void print_token_vector(const std::vector<Expression::Token>& tv, const std::vector<unsigned char>& colorcoding)
{
int i, l;
for (i = 0, l = tv.size() - 1; i < l; i++)
{
std::cout << "(" << *tv[i].to_str() << ") ";
}
std::cout << "(" << *tv[i].to_str() << ")\n";
}
}