-
Notifications
You must be signed in to change notification settings - Fork 0
/
caminaNodos.pd
206 lines (192 loc) · 7.23 KB
/
caminaNodos.pd
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
utilizar bepd/builtins
utilizar ast como AST
[DOCUMENTA
@brief{Realiza "dispatch" sobre un nodo.}
Hereda a esta clase para poder realizar operaciones complejas sobre ASTs
escribiendo únicamente los métodos que necesites. La implementación
predeterminada no hace nada.
Debido a la naturaleza de esta clase, no deberías heredarla en clases públicas
de tu API. Esta clase solo exíste porque PseudoD aún no soporta "pattern
matching" y será eliminada eventualmente. Considerala un detalle de tu
implementación de cualquier operación compleja que estes programando.
DOCUMENTA]
clase CaminaNodos
[DOCUMENTA
@brief{Visita un nodo.}
Visitar a un nodo llama al método con el nombre apropiado. Por ejemplo,
visitar un @pd{AST#NodoSi} llamará al método @code{#visitarSi} con el
nodo. Cualquier valor que este método devuelva será también devuelto por
@pd{visitar}.
DOCUMENTA]
metodo visitar: nodo
metodo visitarPrograma: nodo
metodo visitarVariable: nodo
metodo visitarFijar: nodo
metodo visitarEscribir: nodo
metodo visitarNl: nodo
metodo visitarClase: nodo
metodo visitarDeclaraciónDeAtributosEnClase: nodo
metodo visitarDeclaraciónDeMétodoEnClase: nodo
metodo visitarImplementa: nodo
metodo visitarDefineAtributosEnClase: nodo
metodo visitarDefineMétodoEnClase: nodo
metodo visitarFunción: nodo
metodo visitarNecesitas: nodo
metodo visitarDevolver: nodo
metodo visitarSi: nodo
metodo visitarMientras: nodo
metodo visitarMétodo: nodo
metodo visitarAtributos: nodo
metodo visitarUtilizar: nodo
metodo visitarIdentificador: nodo
metodo visitarNúmeroLiteral: nodo
metodo visitarTextoLiteral: nodo
metodo visitarLlamarProcedimiento: nodo
metodo visitarEnviarMensaje: nodo
metodo visitarOperador: nodo
metodo visitarNoLlamar: nodo
metodo visitarAutoejecutar: nodo
metodo visitarFunciónAnónima: nodo
metodo visitarSonIguales: nodo
metodo visitarReferenciar: nodo
metodo visitarNo: nodo
metodo visitarClonar: nodo
metodo visitarVariadic: nodo
finclase
metodo CaminaNodos#visitar: nodo
si EsInstancia: nodo, AST#NodoPrograma
devolver yo#visitarPrograma: nodo
finsi
si EsInstancia: nodo, AST#NodoVariable
devolver yo#visitarVariable: nodo
finsi
si EsInstancia: nodo, AST#NodoFijar
devolver yo#visitarFijar: nodo
finsi
si EsInstancia: nodo, AST#NodoEscribir
devolver yo#visitarEscribir: nodo
finsi
si EsInstancia: nodo, AST#NodoNl
devolver yo#visitarNl: nodo
finsi
si EsInstancia: nodo, AST#NodoClase
devolver yo#visitarClase: nodo
finsi
si EsInstancia: nodo, AST#NodoDeclaraciónDeAtributosEnClase
devolver yo#visitarDeclaraciónDeAtributosEnClase: nodo
finsi
si EsInstancia: nodo, AST#NodoDeclaraciónDeMétodoEnClase
devolver yo#visitarDeclaraciónDeMétodoEnClase: nodo
finsi
si EsInstancia: nodo, AST#NodoImplementa
devolver yo#visitarImplementa: nodo
finsi
si EsInstancia: nodo, AST#NodoDefineAtributosEnClase
devolver yo#visitarDefineAtributosEnClase: nodo
finsi
si EsInstancia: nodo, AST#NodoDefineMétodoEnClase
devolver yo#visitarDefineMétodoEnClase: nodo
finsi
si EsInstancia: nodo, AST#NodoFunción
devolver yo#visitarFunción: nodo
finsi
si EsInstancia: nodo, AST#NodoNecesitas
devolver yo#visitarNecesitas: nodo
finsi
si EsInstancia: nodo, AST#NodoDevolver
devolver yo#visitarDevolver: nodo
finsi
si EsInstancia: nodo, AST#NodoSi
devolver yo#visitarSi: nodo
finsi
si EsInstancia: nodo, AST#NodoMientras
devolver yo#visitarMientras: nodo
finsi
si EsInstancia: nodo, AST#NodoMétodo
devolver yo#visitarMétodo: nodo
finsi
si EsInstancia: nodo, AST#NodoAtributos
devolver yo#visitarAtributos: nodo
finsi
si EsInstancia: nodo, AST#NodoUtilizar
devolver yo#visitarUtilizar: nodo
finsi
si EsInstancia: nodo, AST#NodoIdentificador
devolver yo#visitarIdentificador: nodo
finsi
si EsInstancia: nodo, AST#NodoNumeroLiteral
devolver yo#visitarNúmeroLiteral: nodo
finsi
si EsInstancia: nodo, AST#NodoTextoLiteral
devolver yo#visitarTextoLiteral: nodo
finsi
si EsInstancia: nodo, AST#NodoLlamarProcedimiento
devolver yo#visitarLlamarProcedimiento: nodo
finsi
si EsInstancia: nodo, AST#NodoEnviarMensaje
devolver yo#visitarEnviarMensaje: nodo
finsi
si EsInstancia: nodo, AST#NodoOperador
devolver yo#visitarOperador: nodo
finsi
si EsInstancia: nodo, AST#NodoNoLlamar
devolver yo#visitarNoLlamar: nodo
finsi
si EsInstancia: nodo, AST#NodoAutoejecutar
devolver yo#visitarAutoejecutar: nodo
finsi
si EsInstancia: nodo, AST#NodoFunciónAnónima
devolver yo#visitarFunciónAnónima: nodo
finsi
si EsInstancia: nodo, AST#NodoSonIguales
devolver yo#visitarSonIguales: nodo
finsi
si EsInstancia: nodo, AST#NodoReferenciar
devolver yo#visitarReferenciar: nodo
finsi
si EsInstancia: nodo, AST#NodoNo
devolver yo#visitarNo: nodo
finsi
si EsInstancia: nodo, AST#NodoClonar
devolver yo#visitarClonar: nodo
finsi
si EsInstancia: nodo, AST#NodoVariadic
devolver yo#visitarVariadic: nodo
finsi
[ Nunca se llega hasta aquí. ]
Escribir: ({#visitar no implementado para ~t}#formatear: (TipoDe: nodo))
Inalcanzable
finmetodo
metodo CaminaNodos#visitarPrograma: nodo finmetodo
metodo CaminaNodos#visitarVariable: nodo finmetodo
metodo CaminaNodos#visitarFijar: nodo finmetodo
metodo CaminaNodos#visitarEscribir: nodo finmetodo
metodo CaminaNodos#visitarNl: nodo finmetodo
metodo CaminaNodos#visitarClase: nodo finmetodo
metodo CaminaNodos#visitarDeclaraciónDeAtributosEnClase: nodo finmetodo
metodo CaminaNodos#visitarDeclaraciónDeMétodoEnClase: nodo finmetodo
metodo CaminaNodos#visitarImplementa: nodo finmetodo
metodo CaminaNodos#visitarDefineAtributosEnClase: nodo finmetodo
metodo CaminaNodos#visitarDefineMétodoEnClase: nodo finmetodo
metodo CaminaNodos#visitarFunción: nodo finmetodo
metodo CaminaNodos#visitarNecesitas: nodo finmetodo
metodo CaminaNodos#visitarDevolver: nodo finmetodo
metodo CaminaNodos#visitarSi: nodo finmetodo
metodo CaminaNodos#visitarMientras: nodo finmetodo
metodo CaminaNodos#visitarMétodo: nodo finmetodo
metodo CaminaNodos#visitarAtributos: nodo finmetodo
metodo CaminaNodos#visitarUtilizar: nodo finmetodo
metodo CaminaNodos#visitarIdentificador: nodo finmetodo
metodo CaminaNodos#visitarNúmeroLiteral: nodo finmetodo
metodo CaminaNodos#visitarTextoLiteral: nodo finmetodo
metodo CaminaNodos#visitarLlamarProcedimiento: nodo finmetodo
metodo CaminaNodos#visitarEnviarMensaje: nodo finmetodo
metodo CaminaNodos#visitarOperador: nodo finmetodo
metodo CaminaNodos#visitarNoLlamar: nodo finmetodo
metodo CaminaNodos#visitarAutoejecutar: nodo finmetodo
metodo CaminaNodos#visitarFunciónAnónima: nodo finmetodo
metodo CaminaNodos#visitarSonIguales: nodo finmetodo
metodo CaminaNodos#visitarReferenciar: nodo finmetodo
metodo CaminaNodos#visitarNo: nodo finmetodo
metodo CaminaNodos#visitarClonar: nodo finmetodo
metodo CaminaNodos#visitarVariadic: nodo finmetodo