-
Notifications
You must be signed in to change notification settings - Fork 0
/
main_zaloha.c
134 lines (107 loc) · 3.31 KB
/
main_zaloha.c
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <stdbool.h>
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "scaner.h"
#include "zasobnik.h"
#include "str.h"
#include "parser.h"
#include "bvs.h"
#include "interpret.h"
/*
* Autor: Pavel Slabý, xslaby00
* a další
* Datum odevzdání: 11.12.2011
*/
UkTToken token;
FILE *soubor;
int chyba;
TZasobnik zasobnik;
UkTBSUzel tab_sym;
UkTBSUzel pom_tab_sym;
UkTBSUzel nazvy_funkci; // kam odkazuje navesti
UkTBSPolozka obsah;
UkTSezInstr seznam_instrukci;
unsigned int klic_cislo=0;
TPrvek prvek_pomocny;
int typ_instrukce;
UkTBSPolozka op1;
UkTBSPolozka op2;
UkTBSPolozka op3;
// ---- nove pridano
UkTBSFunkce strom_funkci;
UkTBSFunkPol uzel_aktualni_funkce;
char *pom_token_data;
// --- konec novyho
UkTBSUzel pole_stromu;
int delka_pole_stromu;
UkTZasAdr zas_navr_adres;
UkTSezPar zas_zpracovani;
UkTBSPolozka *uk_na_zasobnik;
int main(){
printf("main: prvni kontrola\n");
chyba = ERR_OK;
if ((soubor = fopen("kod", "r")) == NULL) {
printf("main: otevreni souboru\n");
return ERR_INTERNI;
}
//token = NULL;
chyba = zasobnik_init( &zasobnik);
if (chyba!=ERR_OK){
//TODO: zavrit soubor
// odalokovat token
return chyba;
}
seznam_instrukci = malloc(sizeof(struct seznamInstr));
Sez_init(seznam_instrukci);
//strom_funkci = malloc(sizeof(struct bsfunkce));
BVSFunkceInit(&strom_funkci);
BVSInit(&pom_tab_sym);
delka_pole_stromu=1;
zas_navr_adres = malloc(sizeof(struct zasAdr));
zas_adres_in(zas_navr_adres);
zas_zpracovani = malloc(sizeof(struct sezPar));
Sez_init_funkce(zas_zpracovani);
if ((obsah = malloc(sizeof (TBSPolozka)))==NULL){
return ERR_INTERNI;
}
obsah->typ = TDNIL;
printf("main: druha kontrola\n");
chyba = syntakticky_analyzator();
if (chyba != ERR_OK){
printf(" ----- VSTUP NEPRIJAT s kodem: %d ------\n",chyba);
return chyba;
}else{
printf(" ----- VSTUP PRIJAT ----- \n");
}
Interpret(seznam_instrukci);
printf("*************Vypis zasobniku**********\n");
set_first(zas_zpracovani);
while(zas_zpracovani->aktivni != NULL){
switch (zas_zpracovani->aktivni->parametr.data->typ){
case TDCISLO: printf("-> ->Klic: %s, dataCis: %f, typ: %d\n", zas_zpracovani->aktivni->parametr.klic, zas_zpracovani->aktivni->parametr.data->data.dataCis, zas_zpracovani->aktivni->parametr.data->typ);
break;
case TDRETEZEC: printf("-> ->Klic: %s, dataRet: %s, typ: %d\n", zas_zpracovani->aktivni->parametr.klic, zas_zpracovani->aktivni->parametr.data->data.dataRet, zas_zpracovani->aktivni->parametr.data->typ);
break;
case TDBOOL: printf("-> ->Klic: %s, dataRet: %d, typ: %d\n", zas_zpracovani->aktivni->parametr.klic, zas_zpracovani->aktivni->parametr.data->data.dataBool, zas_zpracovani->aktivni->parametr.data->typ);
break;
case TDNIL: printf("-> ->Klic: %s, nil, typ: %d\n", zas_zpracovani->aktivni->parametr.klic, zas_zpracovani->aktivni->parametr.data->typ);
}
set_nasl(zas_zpracovani);
}
printf("**************************************\n");
Sez_zrus(seznam_instrukci);
Sez_zrus_funkce(uzel_aktualni_funkce->zasobnik);
BVSZrus (&uzel_aktualni_funkce->koren);
token_uvolni(token);
zasobnik_free(&zasobnik);
fclose(soubor);
if (chyba != ERR_OK){
printf(" ----- VSTUP NEPRIJAT s kodem: %d ------\n",chyba);
return chyba;
}else{
printf(" ----- VSTUP PRIJAT ----- \n");
return ERR_OK;
}
}