add some coverage tests
[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
715580ff
LM
8extern char format[9];
9
bc97a989
LM
10/* function type */
11
12typedef enum {
89cf0955 13 Val = 0, Sig,
bc97a989 14 Add, Sub,
c47a9298
LM
15 Mul, Div, Mod,
16 Pow, Sqr,
9e52bbc5 17 Cos, Sin, Tan, Acos, Asin, Atan,
3b4b0bbe 18 Log, Exp,
9e52bbc5 19 Abs, Ceil, Floor,
a8cf32ba 20 Store, Recall, Inc, Dec, Disp,
471da7c9 21 Quit, Help,
7fe742c9 22 Ans, E, Pi,
ca3e2a2f 23 Equal, Diff, Ge, Le, Gt, Lt,
94b4e517 24 And, Or, Not,
715580ff 25 Cond, While, Prog, Print
bc97a989
LM
26} func_t;
27
28/* keyword type */
29
30typedef struct _keyword_t {
31 char *keyword;
32 func_t func;
33 int nbops;
34 int offset;
ca3e2a2f 35 float prio;
bc97a989
LM
36} keyword_t;
37
38/* calculus element type */
39
bc97a989
LM
40typedef struct _element_t {
41 func_t func;
42 int nbops;
0c95a3d3 43 struct _element_t **ops;
fd88e359 44 double value;
11cda8d7 45 int prio;
bc97a989
LM
46} element_t;
47
0b489a77
LM
48#define ERROR_OP ((element_t *)(-1))
49
bc97a989
LM
50/* parser function */
51
031d7bba
LM
52void delelement (element_t *root);
53
ef37d966 54element_t *parser (char *str, char **next, int prio);
bc97a989
LM
55
56void print_element (element_t *root, int level);
57
3b4b0bbe 58double evaluate_element (element_t *root, char mask);
f2927108 59
b9c1c40d
LM
60/* completion functions */
61
62char **generate_completion_list ();
63
64void free_completion_list (char **list);
65
bc97a989
LM
66#endif /* __PARSER_H__ */
67
68/* vim: set ts=4 sw=4 et: */