correct some tests
[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 Quit, Help,
18 Ans, E, Pi
19 } func_t;
20
21 /* keyword type */
22
23 typedef struct _keyword_t {
24 char *keyword;
25 func_t func;
26 int nbops;
27 int offset;
28 int prio;
29 } keyword_t;
30
31 /* calculus element type */
32
33 #define MAX_OPERANDS 10
34 typedef struct _element_t {
35 func_t func;
36 int nbops;
37 struct _element_t *ops[MAX_OPERANDS];
38 double value;
39 int prio;
40 } element_t;
41
42 #define ERROR_OP ((element_t *)(-1))
43
44 /* parser function */
45
46 void delelement (element_t *root);
47
48 element_t *parser (char *str, char **next, int prio);
49
50 void print_element (element_t *root, int level);
51
52 double evaluate_element (element_t *root, char mask);
53
54 #endif /* __PARSER_H__ */
55
56 /* vim: set ts=4 sw=4 et: */