Skip to content

📓 Conceptos y Paradigmas de Lenguajes de Programación, BNF, EBNF, Pila estática/dinámica, pasaje de parámetros y demás

Notifications You must be signed in to change notification settings

Fabian-Martinez-Rincon/CPLP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

contributions welcome GitHub stars GitHub repo size in bytes

🧠 CPLP

Parcial de Promoción Resumen


Teoria 1 Introducción y Evaluación de Lenguajes

  • 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

Teoria 2 Semántica

  • Semantica Estatica - Gramatica de Atributos
  • Semantica Dinamica
    • Formales y Complejas
      • Semantica Axiomatica
      • Semantica denotacional
    • No Formal
      • Semantica Operacional
  • Procesamiento de un Programa (Programas Traductores)
    • Interpretación
    • Compilación
    • Interpretación y Compilación

Teoria 3 Semantica Operacional

  • Ligadura Estatica
  • Ligadura Dinamica
  • Variable (Nombre, Alcance, Tipo, L-Valor, R-Valor)
  • Sobrecarga

💻 Resumen Practica 6 Párametros

Ateriormente hicimos la practica de pila estatica y dinamica, ahora le vamos a agregar parametros, que son los siguientes:

ParametroDescripciónEjemplo
Valor

Trabajamos con una copia del valor recibido

  • x = 3
procedura rutina(x:integer);
begin
  x = x + 1
end;

a = 3;
rutina(a);
Referencia

Trabajamos siempre modificando el valor original

  • a <--- x
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)
  • x ↑ r1 [ y + r2 [y] ]
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)

  • x(a) = 3
procedura rutina(valor-resultado x:integer);
begin
  x = x + 1
end;
a = 3;
rutina(a); //VR = 4

Datos a tener en cuenta

  • El arbol de anidamiento simplemente para saber que función esta contenida en otra, no es necesario para la practica.

👾 Resumen Practica 7 Tipos de Datos

Tipos de datos compuestos

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

Producto Cartesiano

tuple = (
  'physics',
  'chemistry', 
  1997, 2000
  )
class Persona {
  String nombre;
  String apellido;
  int edad;
}

Producta Cartesiano y Recursión

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.

Producto Cartesiano y Recursión

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)

🤖 Resumen Practica 8 Excepciones

En pascal y en PL1 no tenemos un manejo de excepciones muy complejo. En cuanto a la estuctura, es parecido a pascal.

Diferencias entre un lenguaje y otro

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
PascalPL/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
Prog Principal;
  DCL x Integer;
  DCL b1,b2 Boolean;
PROC P (b1 Boolean);
  DCL x Integer;
BEGIN
  ON CONDITION Manejador1 BEGIN x = x + 1; END;
  X = 1;
  IF b1=true THEN SIGNAL CONDITION Manejador1
  x = x + 4;
END;
BEGIN
  ON CONDITION Manejador2 BEGIN x = x * 100; END;
  X = 4;
  b2 = true;
  b1 = false;
  IF b1=false THEN SIGNAL CONDITION Manejador2
  P(b1);
  WRITE (x);
END.

Parcial de @Guadev

2 3

Ejercicio 3a)

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

  1. Imprime "1", luego "Tercer Exception" y termina el programa.

Ejercicio 3b)

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.

About

📓 Conceptos y Paradigmas de Lenguajes de Programación, BNF, EBNF, Pila estática/dinámica, pasaje de parámetros y demás

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published