- TP Integrador
- EBNF
- Teoria
- Practica 1 Teoria
- Practica 2 BNF/EBNF
- Practica 3 Semantica Estatica/Dinamica
- Practica 4 Variables
- Practica 5 Pilas de ejecución (Esta la hice full en papel)
- Practica 6 Parametros
- Practica 7 Sistemas y tipos de Datos
- Practica 8 Excepciones
- Practica 9 Estructuras de control y sentencias
- Resumen Final
- Simplicidad y Legibilidad
- Claridad en los bindings
- Confiabilidad
- Soporte
- Abstración
- Ortogonalidad
- Eficiencia
- Sintaxis
- Abstracta Se refiere a la estructura
- Concreta Se refiere a la parte léxica
- Pragmática Se refiere al uso práctico
- BNF, EBNF Y CONWAY
- Semántica
- Semantica Estatica - Gramatica de Atributos
- Semantica Dinamica
- Formales y Complejas
- Semantica Axiomatica
- Semantica denotacional
- No Formal
- Semantica Operacional
- Formales y Complejas
- Procesamiento de un Programa (Programas Traductores)
- Interpretación
- Compilación
- Interpretación y Compilación
- Ligadura Estatica
- Ligadura Dinamica
- Variable (Nombre, Alcance, Tipo, L-Valor, R-Valor)
- Sobrecarga
Ateriormente hicimos la practica de pila estatica y dinamica, ahora le vamos a agregar parametros, que son los siguientes:
Parametro | Descripción | Ejemplo |
Valor |
Trabajamos con una copia del valor recibido
|
procedura rutina(x:integer);
begin
x = x + 1
end;
a = 3;
rutina(a); |
Referencia |
Trabajamos siempre modificando el valor original
|
procedura rutina(io x:integer);
begin
x = x + 1
end;
a = 3;
rutina(a); |
Nombre |
Tomamos el contexto completo, y trabajamos con las variables originales al contexto (Hay te estar atentos si las variables se modifican por referencia o si son globales)
|
Procedure main;
y: integer;
r1:array[1..6] of integer;
r2:array[1..5] of integer;
procedura rutina(nombre x:integer);
begin
x = x + 1
end;
rutina(r1[ y + r2 [y]]); |
Valor-Resultado |
Es igual al pasaje por valor solo que este trabaja con la copia y al final del proceso, retorna el valor modificado a la variable original. (El valor esta en el)
|
procedura rutina(valor-resultado x:integer);
begin
x = x + 1
end;
a = 3;
rutina(a); //VR = 4 |
- El arbol de anidamiento simplemente para saber que función esta contenida en otra, no es necesario para la practica.
Producto cartesiano
Es un conjunto cuyos elementos están ordenados n-tupla, es decir, es una construcción en teoría de conjuntos y programación que combina dos conjuntos o tipos de datos para formar un nuevo conjunto o tipo cuyos elementos contienen una combinación de elementos de ambos conjuntos. En programación, esto puede representarse mediante una estructura de datos que contiene múltiples campos o propiedades**.** Por ejemplo, los registros. Es una relación 1 a muchos
tuple = (
'physics',
'chemistry',
1997, 2000
) |
class Persona {
String nombre;
String apellido;
int edad;
} |
typedef struct _nodoLista {
void *dato;
struct _nodoLista *siguiente
} nodoLista;
typedef struct _lista {
int cantidad;
nodoLista *primero
} Lista; |
data ArbolBinarioInt =
Nil |
Nodo int
(ArbolBinarioInt dato)
(ArbolBinarioInt dato) |
Correspondencia Finita
La correspondencia finita se refiere a una relación uno a uno entre los elementos de dos conjuntos finitos. Para cada elemento en el primer conjunto, hay exactamente un elemento correspondiente en el segundo conjunto, y viceversa. Esta correspondencia puede ser representada mediante una función que asigna cada elemento del primer conjunto a un único elemento del segundo conjunto. El tipo de dato serían los arreglos.
hash = {
uno: 1,
dos: 2,
tres: 3,
cuatro: 4
} |
function doble($x) {
return 2 * $x;
} |
Uniones
Las uniones, también conocidas como sum type o tipo suma, son una construcción en programación que permite combinar varios tipos de datos en uno solo. En una unión, un valor puede pertenecer a uno de los tipos dentro de la unión. Esto se puede utilizar para representar alternativas o opciones donde un valor puede ser de diferentes tipos.
union codigo {
int numero;
char id;
}; |
data Color =
Rojo |
Verde |
Azul |
Tipos Recursivos
Los tipos recursivos son aquellos que se definen en términos de sí mismos. Esto significa que un tipo puede contener instancias de sí mismo como parte de su estructura. Los tipos recursivos son útiles para modelar estructuras de datos que contienen referencias a sí mismas, como árboles o listas enlazadas. Esta recursividad permite la construcción de estructuras de datos complejas y anidadas.
typedef struct _nodoLista {
void *dato;
struct _nodoLista *siguiente
} nodoLista;
typedef struct _lista {
int cantidad;
nodoLista *primero
} Lista; |
data ArbolBinarioInt =
Nil |
Nodo int
(ArbolBinarioInt dato)
(ArbolBinarioInt dato) |
En pascal y en PL1 no tenemos un manejo de excepciones muy complejo. En cuanto a la estuctura, es parecido a pascal.
Pascal | PL/1 |
---|---|
var x:int | DCL x Integer; |
procedure | Proc |
procedure Manejador1 begin x:=x + 1; end; | ON CONDITION Manejador1 BEGIN x = x + 1; END; |
Ejemplo Completo
Pascal | PL/1 |
Program Principal;
var x:int; b1,b2:boolean;
Procedure P (b1:boolean);
var x:int;
Procedure Manejador1
begin
x:=x + 1;
end;
begin
x:=1;
if b1=true then Manejador1;
x:=x+4;
end;
Procedure Manejador2;
begin
x:=x * 100;
end;
Begin
x:=4;
b2:=true;
b1:=false;
if b1=false then Manejador2;
P(b);
write (x);
End |
|
Parcial de @Guadev
En el main se entra a la primera iteración del for dentro del try siendo i=1, entra al if, imprime 1
y llama al metodo rethrow
. El método evalua en el try y entra al primer if, ya que se envio con el parametro primer
y Lanza la excepción firstException
. Termina el try y la excepción es manejada por el cath del primer try dele método y tira una excepción ThirdException
y se imprime "tercerException" y termina el programa.
Por lo que la opción válida es la
- Imprime "1", luego "Tercer Exception" y termina el programa.
Si se pusiera todo en el bloque try/cath dentro del for, los resultados serian diferentes, ya que el for podria continuar ejecutandose haya sido manejada una excepción o no dentro de su bloque. El resultado final de la impresion seria
"1", "Tercera Excepción", "2", "Tercer Excepción", "3", "Tercer Excepción"
- Salta la excepción first Exceptión y se maneja dentro del rethrow en el segundo cath y en el cath del for donde imprime.
- Salta la excepción second Exception y se maneja dentro del rethrow en el primer cath y en el cath del for donde imprime.
- Salta la excepción third Exception y como no se puede manejar en rethrow es directamente manejada en el main, en el for.