fix comparison operator priority
[calc.git] / parser.h
... / ...
CommitLineData
1#ifndef __PARSER_H__
2#define __PARSER_H__
3
4/* global variables */
5
6extern double answer;
7
8/* function type */
9
10typedef 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 Equal, Diff, Ge, Le, Gt, Lt
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;
30 int prio;
31} keyword_t;
32
33/* calculus element type */
34
35#define MAX_OPERANDS 10
36typedef struct _element_t {
37 func_t func;
38 int nbops;
39 struct _element_t *ops[MAX_OPERANDS];
40 double value;
41 int prio;
42} element_t;
43
44#define ERROR_OP ((element_t *)(-1))
45
46/* parser function */
47
48void delelement (element_t *root);
49
50element_t *parser (char *str, char **next, int prio);
51
52void print_element (element_t *root, int level);
53
54double evaluate_element (element_t *root, char mask);
55
56#endif /* __PARSER_H__ */
57
58/* vim: set ts=4 sw=4 et: */