fix comparison operator priority
[calc.git] / parser.h
CommitLineData
bc97a989
LM
1#ifndef __PARSER_H__
2#define __PARSER_H__
3
5075f6ea
LM
4/* global variables */
5
6extern double answer;
7
bc97a989
LM
8/* function type */
9
10typedef 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
25typedef 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
36typedef 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
48void delelement (element_t *root);
49
ef37d966 50element_t *parser (char *str, char **next, int prio);
bc97a989
LM
51
52void print_element (element_t *root, int level);
53
3b4b0bbe 54double evaluate_element (element_t *root, char mask);
f2927108 55
bc97a989
LM
56#endif /* __PARSER_H__ */
57
58/* vim: set ts=4 sw=4 et: */