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