You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

70 lines
1.5 KiB

#ifndef WEBDICE_EXPRESSION
#define WEBDICE_EXPRESSION
#include <stdint.h>
enum expression_type{
WEBDICE_CONST,
WEBDICE_ROLL,
WEBDICE_BINARY
};
enum binary_type{
WEBDICE_MUL,
WEBDICE_DIV,
WEBDICE_ADD,
WEBDICE_SUB
};
struct expression_id{
enum expression_type id;
};
struct expression_const{
enum expression_type id;
int64_t value;
};
struct expression_roll{
enum expression_type id;
int64_t count;
int64_t type;
};
struct expression_binary{
enum expression_type id;
enum binary_type operation;
union expression* left;
union expression* right;
};
union expression{
struct expression_id id;
struct expression_const constant;
struct expression_roll roll;
struct expression_binary binary;
};
struct expression_result{
char* text;
long double min;
long double max;
long double expected;
long double actual;
};
union expression* webdice_const(int64_t value);
union expression* webdice_roll(int64_t count, int64_t roll);
union expression* webdice_mul(union expression* left, union expression* right);
union expression* webdice_div(union expression* left, union expression* right);
union expression* webdice_add(union expression* left, union expression* right);
union expression* webdice_sub(union expression* left, union expression* right);
union expression* webdice_binary(enum binary_type type, union expression* left, union expression* right);
struct expression_result resolve(union expression* root);
void free_expression(union expression* root);
#endif