summaryrefslogtreecommitdiff
path: root/src/parse.h
blob: 3d919a8f79f6e03f81af8fa69b34d83141ca92ea (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
41
42
43
44
#include "hashtable.h"
#ifndef PARSE
#define PARSE

typedef enum SymbolProvince {
	NO_PROVINCE,
	KEY_REF,
	LITERAL
} prov_t;
typedef enum LiteralType {
	NO_TYPE,
	INT,
	FLOAT,
	STRING
} litType_t;
typedef struct Symbol {
	prov_t province;
	litType_t litType;
	void* name;
	struct Symbol** args;
	int argCount;
} sym_t;
typedef struct SymbolSet {
	sym_t** symbols;
	int count;
} symset_t;

sym_t* init_sym(prov_t province, litType_t litType, void* name);
sym_t* init_sym_key(char* value);
sym_t* init_sym_int(int value);
sym_t* init_sym_float(float value);
sym_t* init_sym_str(char* value);
void destroy_sym(sym_t* symbol);
void destroy_sym_tree(sym_t* origin);
int symtoi(sym_t* symbol);
float symtof(sym_t* symbol);
char* symtos(sym_t* symbol);
void symbol_add_arg(sym_t* symbol, sym_t* arg);
void symset_add_symbol(symset_t* symbolSet, sym_t* symbol);
symset_t* parse_symbols(char** str, int* sLine);
sym_t* parse_symbol_final(char* str);
void write_symbol_visual(sym_t* symbol, int offset);

#endif