-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTablaSimbolos.java
127 lines (110 loc) · 4.39 KB
/
TablaSimbolos.java
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
import java.util.ArrayList;
import java.util.HashMap;
public class TablaSimbolos {
private static HashMap<String, Registro> tablaSimbolos = new HashMap<String, Registro>();
public static void add(String nombre, Object valor, int profundidad,Integer tipo, Integer esConstante_num, boolean asignado) {
boolean esConstante = false;
if (valor != null && tipo==1){
//If valor is an array loop and cast each element to Double
if( valor instanceof ArrayList){
ArrayList<Object> array = (ArrayList<Object>) valor;
for(int i=0; i<array.size(); i++){
array.set(i, Double.parseDouble(array.get(i).toString()));
}}else{
valor = Double.parseDouble(valor.toString());
}
}
if (valor != null && tipo==2){
valor = Integer.parseInt(valor.toString());
}
//Comprobamos si es constante o no
switch (esConstante_num) {
case 1:
esConstante = true;
break;
default:
esConstante = false;
break;
}
if (!tablaSimbolos.containsKey(nombre)) {
tablaSimbolos.put(nombre, new Registro(valor, profundidad, esConstante, asignado));
} else {
//Si la profundiad del neuvo es mayor que la del registro, se añade (es decir es una variable local)
if (tablaSimbolos.get(nombre).getProfundidad() < profundidad) {
tablaSimbolos.put(nombre, new Registro(valor, profundidad, esConstante, asignado));
} else {
//Se reemplaza el valor del registro
//tablaSimbolos.get(nombre).setValor(valor);
System.out.println("error");
System.exit(0);
}
}
}
public static void replace(String nombre, Object valor, int profundidad, boolean asignado) {
if (tablaSimbolos.containsKey(nombre)) {
if(tablaSimbolos.get(nombre).getEsConstante() && tablaSimbolos.get(nombre).getAsignado()){
System.out.println("error");
System.exit(0);
}
tablaSimbolos.get(nombre).setValor(valor);
tablaSimbolos.get(nombre).setProfundidad(profundidad);
tablaSimbolos.get(nombre).setAsignado(asignado);
}else{
System.out.println("error");
System.exit(0);
}
}
public static Object get(String nombre) {
if (tablaSimbolos.containsKey(nombre) && tablaSimbolos.get(nombre).getAsignado()) {
return tablaSimbolos.get(nombre).getValor();
} else {
System.out.println("error");
System.exit(0);
return null;
}
}
public static void borrar(String nombre){
tablaSimbolos.remove(nombre);
}
public static void modifyArray(String name, int index, Object valor) {
if (tablaSimbolos.containsKey(name)) {
if (tablaSimbolos.get(name).getValor() instanceof ArrayList) {
ArrayList<Object> array = (ArrayList<Object>) tablaSimbolos.get(name).getValor();
//Check if not out of bounds
if (index < array.size()) {
array.set(index, valor);
} else {
System.out.println("error");
System.exit(0);
}
} else {
System.out.println("error");
System.exit(0);
}
} else {
System.out.println("error");
System.exit(0);
}
}
public static Object getAtArray(String name, int index) {
if (tablaSimbolos.containsKey(name)) {
if (tablaSimbolos.get(name).getValor() instanceof ArrayList) {
ArrayList<Object> array = (ArrayList<Object>) tablaSimbolos.get(name).getValor();
//Check if not out of bounds
if (index < array.size()) {
return array.get(index);
} else {
System.out.println("error");
System.exit(0);
}
} else {
System.out.println("error");
System.exit(0);
}
} else {
System.out.println("error");
System.exit(0);
}
return null;
}
}