summaryrefslogtreecommitdiff
path: root/rushs/evalexpr/src/evalexpr.h
diff options
context:
space:
mode:
Diffstat (limited to 'rushs/evalexpr/src/evalexpr.h')
-rw-r--r--rushs/evalexpr/src/evalexpr.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/rushs/evalexpr/src/evalexpr.h b/rushs/evalexpr/src/evalexpr.h
new file mode 100644
index 0000000..d440ae1
--- /dev/null
+++ b/rushs/evalexpr/src/evalexpr.h
@@ -0,0 +1,43 @@
+#ifndef EVALEXPR_H
+#define EVALEXPR_H
+
+#include <stddef.h>
+
+#include "fifo.h"
+#include "stack.h"
+#include "stack_struct.h"
+
+enum token_type
+{
+ NUMBER = 0,
+ SUB = 1,
+ ADD = 1,
+ MOD = 2,
+ DIV = 2,
+ MUL = 2,
+ EXP = 3,
+ UN_PLUS = 4,
+ UN_MINUS = 4,
+ PAR_LEFT = 5,
+ PAR_RIGHT = 5,
+ WRONG_TOKEN = -1,
+};
+
+struct token
+{
+ enum token_type type;
+ int value;
+};
+
+// evalrpn
+int parse_number(const char *expr, size_t *offset);
+int get_operands(struct stack **s, int *op1, int *op2);
+int my_pow(int a, int b);
+int evalrpn(const char *expr, int *retval);
+
+// shunting yard
+int opcmp(struct token *op1, struct token *op2);
+enum token_type get_type(char op);
+int shunting_yard(const char *expr, char **rpn);
+
+#endif /* ! EVALEXPR_H */