-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathminicomp.h
93 lines (80 loc) · 1.81 KB
/
minicomp.h
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "supp.h"
extern FILE *infile;
#define MAXLEN 1024
extern char tkname[MAXLEN];
extern int label;
extern int nesting;
extern int local_offset,parm_offset,framesize;
#define REAL DOUBLE
#define FUNCTION FUNKT
#define YYERROR_VERBOSE 1
enum nodeflags {
NVARIABLE,NNUMBER,NADD,NMUL,NSUB,NDIV,NINDEX,
NEQUALS,NLT,NGT,NLEQ,NGEQ,NNEQ,NAND,NOR,
NI2R,NR2I,NASSGN,NCALL,NARG
};
extern char *nodename[];
typedef struct Typ type;
typedef struct obj operand;
typedef struct var {
int nesting;
char *name;
struct Typ *type;
struct var *next;
int offset;
struct Var *vbccvar;
} var;
#define MAXNESTING 128
extern var *first_var[128];
typedef struct {
int flags;
char *name;
} *stype;
typedef struct mnode {
enum nodeflags flags;
struct mnode *left,*right;
type *type;
var *var;
int ivalue;
double rvalue;
} node;
void enter_block(void);
void leave_block(void);
void enter_func(char *,type *);
void leave_func(void);
var *find_var(char *,int);
var *add_var(char *,type *);
var *new_temp(int);
char *add_string(char *);
void error(int,...);
void *getmem(size_t);
node *number_node(void);
node *var_node(void);
node *conv_tree(node *,int);
node *binary_node(enum nodeflags,node *,node *);
void print_tree(node *);
void simplify_tree(node *);
void free_tree(node *);
type *new_type(int);
type *new_array(type *,node *);
void return_statement(node *);
void while_statement(node *);
void while_end(void);
void if_statement(node *);
void if_end(void);
void if_else(void);
void assign_statement(node *,node *);
void push_int(int);
int pop_int(void);
void push_name(char *);
char *pop_name(void);
operand *gen_tree(node *);
void gen_cond(node *,int,int);
void gen_label(int);
int push_arg(node *);
void gen_global(char *,int);