-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsymbol.h
49 lines (39 loc) · 1.68 KB
/
symbol.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
#ifndef GLOBAL_H
#include "global.h"
#endif
struct parser_t;
#ifndef SYMBOL_H
#define SYMBOL_H
#endif
/* Definition der Art der Symboltabellen-Einträge */
enum symtype_t : int {
KONST = 310, /* Konstanten-Eintrag */
INTIDENT = 320, /* Identifikator vom Typ int */
REALIDENT = 330, /* Identifikator vom Typ real */
PROC = 400 /* Procedure */
};
/* Symboltabelle */
struct symtable ;
/* Aufbau eines Symboltabellen-Eintrags */
struct st_entry {
symtype_t token ; /* Art des Eintrags (KONST/INTIDENT/REALIDENT/PROC) */
char *name; /* Zeiger auf Namen */
int wertaddr; /* Wert bei Konstanten (KONST);
relative Speicheradresse (offset) bei Variablen */
symtable * subsym; /* Zeiger auf Teil-Symboltabelle bei Art PROC */
};
/* Aufbau der (Teil- )Symboltabelle */
struct symtable {
symtable * precsym; /* Zeiger auf Übergeordnete Symboltabelle; bei oberster NULL */
int level; /* Schachtelungstiefe */
int anzahl; /* Anzahl der Symboltabelleneinträge */
st_entry eintrag[SYMMAX]; /* Feld für Einträge */
};
extern symtable *actsym, /* Zeiger auf aktuelle Symboltabelle */
*firstsym; /* Zeiger auf oberste (globale) Symboltabelle */
symtable * create_newsym() ; /* Neue ST erzeugen */
st_entry * lookup( string s); /* Namen in ganzer Symboltabelle suchen */
st_entry * lookup_in_actsym ( string s); /* Namen in aktueller Symboltabelle suchen */
st_entry * insert( parser_t* parser, symtype_t tok, string name, int wertaddr = 0 ); /* Neuen Eintrag in actsym erzeugen */
// void generate(int); /* Codeerzeugung */
void printsymtab( parser_t& parser, symtable *); /* Ausgabe der Symboltabelle */