-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparser.h
More file actions
56 lines (37 loc) · 1.09 KB
/
Copy pathparser.h
File metadata and controls
56 lines (37 loc) · 1.09 KB
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
45
46
47
48
49
50
51
52
53
54
55
56
#ifndef _PARSER_H_
#define _PARSER_H_
#include "lex.h"
typedef struct sym_s {
char *name;
int lbl;
int dist;
struct sym_s *next;
} sym_t;
typedef struct parser_s {
lex_instance_t *lex;
sym_t *variables;
sym_t *returns;
sym_t *breaks;
sym_t *continues;
int lbl;
} parser_t;
typedef enum id_obj_e {
RC_NONE = 0,
RC_ADDRESS = 1,
RC_VARIABLE = 2,
RC_FUNCTION = 3
} id_obj_t;
int new_label (parser_t *parser);
void sym_dist_inc (parser_t *parser, int b);
void sym_dist_dec (parser_t *parser, int b);
sym_t* sym_create_lbl (int lbl);
sym_t* sym_create_name (const char* name);
void sym_push (sym_t** stack, sym_t *sym);
void sym_pop (sym_t** stack);
int sym_dist_top (sym_t** stack);
int sym_dist_name (sym_t** stack, const char* name, int *dist);
int sym_lbl_top (sym_t** stack);
parser_t *parser_create (int max_symbol_length);
void parser_destroy (parser_t *parser);
void program (parser_t *parser);
#endif