aboutsummaryrefslogtreecommitdiffstats
path: root/parser.h
blob: 57763c84900ca957ba84561d9215c965d2d2ec9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#ifndef PARSER_H_
#define PARSER_H_

#include "variable.h"

#include <stdint.h>

typedef struct {
	variable *vars;
	char **names;
	uint32_t *stack;
	uint32_t stidx;
	char **lines;
	uint32_t lnidx;
	variable *ret;
	uint8_t indent;
	uint8_t sindent;
} instance;

#define SKIP (1 << 7)

typedef int (*func_t)(instance *);

instance *inewinstance(void);
void idelinstance(instance *it);

int idoline(instance *it, const char *s);
variable **iparse(instance *it, const char *s);
variable *isolve(instance *it, variable **ops, uint32_t count);

void inew_cfunc(instance *it, const char *name, func_t func);

variable *make_varf(variable *v, float f);
variable *make_vars(variable *v, const char *s);

uint32_t ipop(instance *it);
void ipush(instance *it, uint32_t v);
variable *igetarg(instance *it, uint32_t n);

#endif // PARSER_H_