Commit | Line | Data |
---|---|---|
bc97a989 LM |
1 | #ifndef __PARSER_H__ |
2 | #define __PARSER_H__ | |
3 | ||
5075f6ea LM |
4 | /* global variables */ |
5 | ||
6 | extern double answer; | |
7 | ||
bc97a989 LM |
8 | /* function type */ |
9 | ||
10 | typedef enum { | |
89cf0955 | 11 | Val = 0, Sig, |
bc97a989 | 12 | Add, Sub, |
c47a9298 LM |
13 | Mul, Div, Mod, |
14 | Pow, Sqr, | |
471da7c9 | 15 | Cos, Sin, Atan, |
3b4b0bbe | 16 | Log, Exp, |
6ba1dd0f | 17 | Store, Recall, Disp, |
471da7c9 | 18 | Quit, Help, |
7fe742c9 LM |
19 | Ans, E, Pi, |
20 | Equal, Diff, Ge, Le, Gt, Lt | |
bc97a989 LM |
21 | } func_t; |
22 | ||
23 | /* keyword type */ | |
24 | ||
25 | typedef struct _keyword_t { | |
26 | char *keyword; | |
27 | func_t func; | |
28 | int nbops; | |
29 | int offset; | |
11cda8d7 | 30 | int prio; |
bc97a989 LM |
31 | } keyword_t; |
32 | ||
33 | /* calculus element type */ | |
34 | ||
0b489a77 | 35 | #define MAX_OPERANDS 10 |
bc97a989 LM |
36 | typedef struct _element_t { |
37 | func_t func; | |
38 | int nbops; | |
39 | struct _element_t *ops[MAX_OPERANDS]; | |
fd88e359 | 40 | double value; |
11cda8d7 | 41 | int prio; |
bc97a989 LM |
42 | } element_t; |
43 | ||
0b489a77 LM |
44 | #define ERROR_OP ((element_t *)(-1)) |
45 | ||
bc97a989 LM |
46 | /* parser function */ |
47 | ||
031d7bba LM |
48 | void delelement (element_t *root); |
49 | ||
ef37d966 | 50 | element_t *parser (char *str, char **next, int prio); |
bc97a989 LM |
51 | |
52 | void print_element (element_t *root, int level); | |
53 | ||
3b4b0bbe | 54 | double evaluate_element (element_t *root, char mask); |
f2927108 | 55 | |
bc97a989 LM |
56 | #endif /* __PARSER_H__ */ |
57 | ||
58 | /* vim: set ts=4 sw=4 et: */ |