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 | ||
715580ff LM |
8 | extern char format[9]; |
9 | ||
bc97a989 LM |
10 | /* function type */ |
11 | ||
12 | typedef enum { | |
89cf0955 | 13 | Val = 0, Sig, |
bc97a989 | 14 | Add, Sub, |
c47a9298 LM |
15 | Mul, Div, Mod, |
16 | Pow, Sqr, | |
9e52bbc5 | 17 | Cos, Sin, Tan, Acos, Asin, Atan, |
3b4b0bbe | 18 | Log, Exp, |
9e52bbc5 | 19 | Abs, Ceil, Floor, |
a8cf32ba | 20 | Store, Recall, Inc, Dec, Disp, |
471da7c9 | 21 | Quit, Help, |
7fe742c9 | 22 | Ans, E, Pi, |
ca3e2a2f | 23 | Equal, Diff, Ge, Le, Gt, Lt, |
94b4e517 | 24 | And, Or, Not, |
715580ff | 25 | Cond, While, Prog, Print |
bc97a989 LM |
26 | } func_t; |
27 | ||
28 | /* keyword type */ | |
29 | ||
30 | typedef struct _keyword_t { | |
31 | char *keyword; | |
32 | func_t func; | |
33 | int nbops; | |
34 | int offset; | |
ca3e2a2f | 35 | float prio; |
bc97a989 LM |
36 | } keyword_t; |
37 | ||
38 | /* calculus element type */ | |
39 | ||
bc97a989 LM |
40 | typedef struct _element_t { |
41 | func_t func; | |
42 | int nbops; | |
0c95a3d3 | 43 | struct _element_t **ops; |
fd88e359 | 44 | double value; |
11cda8d7 | 45 | int prio; |
bc97a989 LM |
46 | } element_t; |
47 | ||
0b489a77 LM |
48 | #define ERROR_OP ((element_t *)(-1)) |
49 | ||
bc97a989 LM |
50 | /* parser function */ |
51 | ||
031d7bba LM |
52 | void delelement (element_t *root); |
53 | ||
ef37d966 | 54 | element_t *parser (char *str, char **next, int prio); |
bc97a989 LM |
55 | |
56 | void print_element (element_t *root, int level); | |
57 | ||
3b4b0bbe | 58 | double evaluate_element (element_t *root, char mask); |
f2927108 | 59 | |
b9c1c40d LM |
60 | /* completion functions */ |
61 | ||
62 | char **generate_completion_list (); | |
63 | ||
64 | void free_completion_list (char **list); | |
65 | ||
bc97a989 LM |
66 | #endif /* __PARSER_H__ */ |
67 | ||
68 | /* vim: set ts=4 sw=4 et: */ |