used overloaded function to make code cleaner

This commit is contained in:
Karma Riuk
2025-07-11 22:17:01 +02:00
parent aaec4cefcf
commit e170afc840
2 changed files with 31 additions and 41 deletions

View File

@@ -31,56 +31,31 @@ namespace parser {
);
register_prefix(
{
token::type::BANG,
std::bind(&parser::parse_prefix_expr, this)
);
register_prefix(
token::type::MINUS,
},
std::bind(&parser::parse_prefix_expr, this)
);
register_prefix(
{
token::type::TRUE,
std::bind(&parser::parse_boolean, this)
);
register_prefix(
token::type::FALSE,
},
std::bind(&parser::parse_boolean, this)
);
using namespace std::placeholders;
register_infix(
token::type::PLUS,
std::bind(&parser::parse_infix_expr, this, _1)
);
register_infix(
{token::type::PLUS,
token::type::MINUS,
std::bind(&parser::parse_infix_expr, this, _1)
);
register_infix(
token::type::ASTERISK,
std::bind(&parser::parse_infix_expr, this, _1)
);
register_infix(
token::type::SLASH,
std::bind(&parser::parse_infix_expr, this, _1)
);
register_infix(
token::type::EQ,
std::bind(&parser::parse_infix_expr, this, _1)
);
register_infix(
token::type::NEQ,
std::bind(&parser::parse_infix_expr, this, _1)
);
register_infix(
token::type::GT,
std::bind(&parser::parse_infix_expr, this, _1)
);
register_infix(
token::type::LT,
token::type::LT},
std::bind(&parser::parse_infix_expr, this, _1)
);
}
@@ -221,10 +196,23 @@ namespace parser {
prefix_parse_fns[type] = fn;
};
void parser::register_prefix(
std::vector<token::type> types, prefix_parse_fn fn
) {
for (auto& type : types)
register_prefix(type, fn);
};
void parser::register_infix(token::type type, infix_parse_fn fn) {
infix_parse_fns[type] = fn;
};
void
parser::register_infix(std::vector<token::type> types, infix_parse_fn fn) {
for (auto& type : types)
register_infix(type, fn);
};
ast::expression* parser::parse_identifier() {
return new ast::identifier(current, current.literal);
};

View File

@@ -45,7 +45,9 @@ namespace parser {
void unkown_prefix_error(token::token);
void register_prefix(token::type, prefix_parse_fn);
void register_prefix(std::vector<token::type>, prefix_parse_fn);
void register_infix(token::type, infix_parse_fn);
void register_infix(std::vector<token::type>, infix_parse_fn);
ast::expression* parse_identifier();
ast::expression* parse_integer();