used overloaded function to make code cleaner
This commit is contained in:
@@ -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);
|
||||
};
|
||||
|
@@ -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();
|
||||
|
Reference in New Issue
Block a user