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.
67 lines
1.4 KiB
67 lines
1.4 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); |
|
#endif
|
|
|