Fix brainf*ck interpreter memory issue
[bob_language.git] / tables.h
blob8f1b26c14d024789dcc9f9ed105450a85ced333d
1 #ifndef TABLES_H
2 #define TABLES_H
4 typedef struct {
5 char *name; //meno premennej ako ho zadal pouzivatel,
6 //pouziva sa aj ako indikator, ci je struct inicializovany
7 char *tname; //prelozene meno
8 int pos;
9 } _Variable;
10 typedef _Variable Variable;
12 typedef struct {
13 char *name;
14 int paramcount;
15 } _Function;
16 typedef _Function Function;
18 typedef struct {
19 char *name;
20 int paramcount[256];
21 int paramcountSize;
22 } _Call;
23 typedef _Call Call;
25 void clearLocals();
26 // zmaze obsah tabulky lokalnych premennych
27 void clearGlobals();
28 // zmaze obsah tabulky globalnych premennych
29 void clearFunctions();
30 // zmaze obsah tabulky funkcii
32 int varLocal(char *name);
33 // ak sa name nachadza v tabulke lokalnych premennych, tak vrati jemu
34 // prisluchajuce cislo, inak -1
36 char *varGlobal(char *name);
37 // ak sa name nachadza v tabulke globalnych premennych, tak vrati jemu
38 // prisluchajuce meno, inak NULL
40 char *varGlobalNo(int i);
41 // vrati prelozeny nazov i-tej globalnej premennej alebo null
43 int varFunction(char *name);
44 // ak sa name nachadza v tabulke funkcii, vrati pocet jej parametrov,
45 // inak vrati -1
47 int varFunctionCall(char *name);
48 //vrati kolko krat bola funkcia volana s roznymi poctami parametrov
50 void varInvalidFunctionCalls(char ***names, int *n);
51 //vrati pole nazvov funkcii, ktore boli nekorektne volane s roznymi
52 //poctami parametrov - mena neskopiruje, neslobodno ich menit
54 void addLocal(char *name);
55 // prida name do tabulky lokalnych premennych, zaroven k name asociuje
56 // cislo. Prve volanie addLocal asociuje cislo 0, dalsie 1, 2, ...
57 // Toto cislo je navratova hodnota funkcie varLocal v pripade, ze sa
58 // hladane meno zhoduje s menom v tabulke.
59 // Po volani clearLocals sa zacne asociovat opat od zaciatku, cislom 0
60 // Priklad:
61 // addLocal("Ahoj");
62 // varLocal("Ahoj"); //vrati 0
63 // addLocal("Svet");
64 // varLocal("Svet"); //vrati 1
65 // clearLocals();
66 // addLocal("Fero");
67 // varLocal("Fero"); //vrati 0
69 void addGlobal(char *name);
70 // prida name do tabulky globalnych premennych, zaroven k nemu asociuje
71 // odlisne, unikatne meno. Toto meno sa vrati pri varGlobal s rovnakym
72 // parametrom name
74 void addFunction(char *name, int paramcount);
75 // prida funkciu name a jej prisluchajuci pocet parametrov do tabulky
76 // funkcii
78 void addFunctionCall(char *name, int paramcount);
79 // prida nazov funkcie a pocet argumentov do zoznamu volanych funkcii
81 #endif