-
Notifications
You must be signed in to change notification settings - Fork 0
/
manejoVariables.c
85 lines (62 loc) · 2.2 KB
/
manejoVariables.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
#include "libreria.h"
t_nodo* variablesDeclaradas = NULL;
t_nodo* variablesRepetidas = NULL;
t_nodo* bufferDeNombreDeVariables = NULL;
void agregarNombreDeVariableABuffer(char* nombre)
{
bufferDeNombreDeVariables = agregarValorALista(strdup(nombre), bufferDeNombreDeVariables);
}
bool variableEstaEnLista(char* nombre, char* tipo,t_nodo* listaDeVariables)
{
t_nodo* nodoDeLista = listaDeVariables;
while(nodoDeLista != NULL)
{
t_variableDeclarada* unaVariable = nodoDeLista->valor;
if(!strcmp(nombre,unaVariable->nombreVariable) && !strcmp(tipo,unaVariable->tipoVariable))
{
return true;
}
nodoDeLista = nodoDeLista->siguiente;
}
return false;
}
bool variableYaFueDeclarada(char* nombre, char* tipo)
{
return variableEstaEnLista(nombre,tipo,variablesDeclaradas);
}
bool variableYaFueRepetida(char* nombre,char* tipo){
return variableEstaEnLista(nombre,tipo,variablesRepetidas);
}
void liberarBufferDeNombresDeVariables()
{
liberarLista(bufferDeNombreDeVariables);
bufferDeNombreDeVariables = NULL;
}
void agregarVariableRepetida(t_variableDeclarada* variableRepetida){
if (!variableYaFueRepetida(variableRepetida->nombreVariable,variableRepetida->tipoVariable)){
variablesRepetidas = agregarValorALista(variableRepetida, variablesRepetidas);
}
//Si ya fue repetida no se agrega en la lista.
}
void agregarVariableDeclarada(char* nombre, char* tipo)
{
t_variableDeclarada* nuevaVariable = malloc(sizeof(t_variableDeclarada));
nuevaVariable->nombreVariable = strdup(nombre);
nuevaVariable->tipoVariable = strdup(tipo);
if(variableYaFueDeclarada(nombre,tipo)){
agregarVariableRepetida(nuevaVariable); //Este pasa manos puede ser un poco innecesario.
}
else{
variablesDeclaradas = agregarValorALista(nuevaVariable, variablesDeclaradas);
}
}
void declararTodasLasVariablesEnBuffer(char* tipoDeVariables)
{
t_nodo* listaAux = bufferDeNombreDeVariables;
while(listaAux != NULL)
{
agregarVariableDeclarada(listaAux->valor,tipoDeVariables);
listaAux = listaAux->siguiente;
}
liberarBufferDeNombresDeVariables();
}