enhance store feature
[calc.git] / parser.h
1 #ifndef __PARSER_H__
2 #define __PARSER_H__
3
4 /* global variables */
5
6 extern double answer;
7
8 /* function type */
9
10 typedef enum {
11 Val = 0, Sig,
12 Add, Sub,
13 Mul, Div, Mod,
14 Pow, Sqr,
15 Cos, Sin, Atan,
16 Log, Exp,
17 Store, Recall, Disp,
18 Quit, Help,
19 Ans, E, Pi
20 } func_t;
21
22 /* keyword type */
23
24 typedef struct _keyword_t {
25 char *keyword;
26 func_t func;
27 int nbops;
28 int offset;
29 int prio;
30 } keyword_t;
31
32 /* calculus element type */
33
34 #define MAX_OPERANDS 10
35 typedef struct _element_t {
36 func_t func;
37 int nbops;
38 struct _element_t *ops[MAX_OPERANDS];
39 double value;
40 int prio;
41 } element_t;
42
43 #define ERROR_OP ((element_t *)(-1))
44
45 /* parser function */
46
47 void delelement (element_t *root);
48
49 element_t *parser (char *str, char **next, int prio);
50
51 void print_element (element_t *root, int level);
52
53 double evaluate_element (element_t *root, char mask);
54
55 #endif /* __PARSER_H__ */
56
57 /* vim: set ts=4 sw=4 et: */