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