This commit is contained in:
r4
2022-08-22 23:43:21 -04:00
parent 6475d9c457
commit 824153a9df
5 changed files with 876 additions and 0 deletions

42
expr.h Normal file
View File

@@ -0,0 +1,42 @@
#ifndef __EXPR_H__
#define __EXPR_H__
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
typedef struct {
size_t start, end;
const char *err;
} ExprError;
typedef struct {
const char *name;
const char *description;
double (*func)(double *args);
const char **arg_names;
size_t n_args;
} ExprBuiltinFunc;
typedef struct {
const char *name;
const char *description;
double val;
} ExprBuiltinVar;
typedef struct _Expr Expr;
extern ExprBuiltinFunc *expr_builtin_funcs;
extern const size_t expr_n_builtin_funcs;
extern ExprBuiltinVar *expr_builtin_vars;
extern const size_t expr_n_builtin_vars;
Expr *expr_new();
void expr_destroy(Expr *e);
ExprError expr_set(Expr *e, const char *expr) __attribute__((warn_unused_result));
ExprError expr_eval(Expr *e, double *out_res) __attribute__((warn_unused_result));
void expr_set_var(Expr *e, const char *name, double val);
bool expr_get_var(Expr *e, const char *name, double *out); /* Returns false if not present */
void expr_set_func(Expr *e, const char *name, double (*func)(double *args), size_t n_args);
#endif /* __EXPR_H__ */