-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathIT.h
61 lines (53 loc) · 2.27 KB
/
IT.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
#pragma once
#define ID_MAXSIZE 10 // максимальное количество символов в идентификаторе
#define TI_MAXSIZE 4096 // максимальное количество строк в таблице идентификаторов
#define TI_INT_DEFAULT 0x00000000 // значение по умолчанию для типа integer
#define TI_STR_DEFAULT 0x00 // значение по умолчанию для типа string
#define TI_NULLIDX 0xffffffff // нет элкмента таблицы идентификаторов
#define TI_STR_MAXSIZE 255 //
namespace IT // таблица идентификаторов
{
enum IDDATATYPE { INT = 1, STR = 2 }; // типы данных идентификаторов: integer, string
enum IDTYPE { V = 1, F = 2, P = 3, L = 4, OP = 5 }; // типы идентификаторов: переменная, функция, параметр, литерал, оператор
struct Entry // строка таблицы идентификаторов
{
int idxfirstLE; // индекс первой строки в таблице лексем
char visibility[ID_MAXSIZE];
char id[ID_MAXSIZE]; // индентификатор (автоматически усекается до ID_MAXSIZE)
IDDATATYPE iddatatype; // тип данных
IDTYPE idtype; // тип идентификатора
int countOfPar = 0;
union
{
int vint; // значение integer
struct
{
int len; // количество символов в string
char str[TI_STR_MAXSIZE - 1]; // символы string
} vstr; // значение string
} value; // значение идентификатора
};
struct IdTable // экземпляр таблицы идентификаторов
{
int maxsize; // емкость таблицы идентификаторов < TI_MAXSIZE
int size; // текущий размер таблицы идентификаторов < maxsize
Entry* table; // массив строк таблицы идентификаторов
};
IdTable Create( // создать таблицу идентификаторов
int size // емкость таблицы идентификаторов < TI_MAXSIZE
);
void Add( // добавить строку в таблицу идентификаторов
IdTable& idtable, // экземпляр таблицы идентификаторов
Entry entry // строка таблицы идентификаторов
);
Entry GetEntry( // получить строку таблицы идентификаторов
IdTable& idtable, // экземпляр таблицы идентификаторов
int n // номер получаемой строки
);
int IsId( // возврат: номер строки (если есть), TI_NULLIDX (если нет)
IdTable& idtable, // экземпляр таблицы идентификаторов
char id[ID_MAXSIZE] // идентификатор
);
void Delete(IdTable& idtable); // удалить таблицу лексем (освободить память)
void showTable(IdTable& idtable);
};