-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathintercodeglobals.h
More file actions
62 lines (46 loc) · 1.37 KB
/
intercodeglobals.h
File metadata and controls
62 lines (46 loc) · 1.37 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
57
58
59
60
61
62
#include "globals.h"
typedef enum {
numA, labelA, nop
} Addrkind;
typedef enum {
addOp, subOp, multOp, divOp, ltOp, eqOp,
letOp, gtOp, getOp, noteqOp, andOp, orOp, assignOp,
allocOp, immedOp, loadOp, storeOp,
gotoOp, iffOp, retOp, funOp, endOp, paramOp,
callOp, argOp, labOp, hltOp, inputOp, outputOp
} Opkind;
//a operação loadop utiliza além do 2o operando como funte do endereço do dado a ser carregado,
//um terceiro parametro que representa um deslocamento, ou uma soma a partir do endereço do 2o parametro,
//afim de facilitar operações com vetores.
typedef struct {
Addrkind akind;
union{
int val;
struct {
char *name;
char *scope;
} var;
}contents;
} Address;
typedef struct item* TApontador;
typedef struct item{
TApontador prox, ant;
Address addr1, addr2, addr3;
Opkind op;
int location;
}TItem;
typedef struct {
TApontador head;
int tamanho;
}THead;
typedef struct{
char* var;
char* regDesloc;
}storeInfo;
THead *initLista();
Address initAddress(Addrkind akind, int val, char *name, char *scope);
void insereLista(THead* a, Address addr1, Address addr2, Address addr3, Opkind op, int location);
TApontador pesquisaLista(THead* a, int location);
int nDigitos(long a);
char* printAddress(Address addr);
void printIntercode(THead * head);