fix parser, add functions

This commit is contained in:
zbyv 2024-11-28 21:21:30 +01:00
parent 14477d73b0
commit 0426bb04ac
4 changed files with 15 additions and 6 deletions

1
main.c
View File

@ -16,7 +16,6 @@ int main(int argc, char *argv[]) {
return 1;
}
parser_init(&parser);
node = parser_parse(&parser, argv[1], "x");
if (!node) {

View File

@ -20,6 +20,17 @@ MAKE_FUNCTION_1_ARG(atan)
MAKE_FUNCTION_1_ARG(sinh)
MAKE_FUNCTION_1_ARG(cosh)
MAKE_FUNCTION_1_ARG(tanh)
MAKE_FUNCTION_1_ARG(floor)
MAKE_FUNCTION_1_ARG(ceil)
static double mf_sgn(const double *args) {
if (args[0] < 0.0)
return -1.0;
else if (args[0] > 0.0)
return 1.0;
else
return 0.0;
}
static double mf_min(const double *args) {
if (args[0] < args[1])
@ -57,6 +68,9 @@ const struct math_function *fns_get(void) {
{ "min", 2, mf_min },
{ "max", 2, mf_max },
{ "mod", 2, mf_mod },
{ "sgn", 1, mf_sgn },
{ "floor", 1, mf_floor },
{ "ceil", 1, mf_ceil },
{ NULL }
};

View File

@ -300,11 +300,8 @@ int parse_n_expressions(struct parser *parser, struct expr_node **out_nodes, siz
return 1;
}
void parser_init(struct parser *parser) {
error_buffer_init(&parser->eb);
}
int parser_parse_n(struct parser *parser, const char *str, const char *variable_name, struct expr_node **out_nodes, size_t n) {
error_buffer_init(&parser->eb);
lex_init(&parser->lexer, str, variable_name);
if (!parse_n_expressions(parser, out_nodes, n)) {

View File

@ -9,7 +9,6 @@ struct parser {
struct error_buffer eb;
};
void parser_init(struct parser *parser);
int parser_parse_n(struct parser *parser, const char *str, const char *variable_name, struct expr_node **out_nodes, size_t n);
struct expr_node *parser_parse(struct parser *parser, const char *str, const char *variable_name);