ESTRUCTURA DE LOS LENGUAJES DE PROGRAMACION DEFINICION DE UN LENGUAJE SINTAXIS (BNF-EBNF-DIAGRAMAS DE SINTAXIS). + SEMANTICA OPERACIONAL(APROXIMACION UTILIZADA AQUI) FORMAL(A TRAVES DE MECANISMOS RIGUROSOS Y EXACTOS). SEMANTICA OPERACIONAL: Se describe el significado de cada construcción del lenguaje en términos de las operaciones correspondientes en un procesador abstracto. SIMPLESEM -PUNTERO DE INSTRUCCIONES -MEMORIA(DE DATOS-DE CODIGO) ip Code Memory (C) Code Memory (D) Explicar la semántica de un comando explicando las operaciones correspondiente en SIMPLESEM(LA SEMANTICA O FUNCIONAMIENTO DE SIMPLESEM YA ES CONOCIDA). PROCESAMIENTO DE UN LENGUAJE CONVERSION ENTRE LENGUAJES DE ALTO NIVEL --a--> DE MAQUINA que interpreta que interpreta un programador la computadora ALTERNATIVAS INTERPRETACION: ejecución pasa a paso de cada instrucción de un programa . CICLO: LECTURA-DECODIFICACION-EJECUCION Menor velocidad-Relativo aprovechamiento de memoria(solo se carga una instrucción por vez). COMPILACION: Conversión completa de un programa antes de su ejecución. FASES: COMPILACION-ENSAMBLADO LINKEDITADO-CARGADO-EJECUCION Mayor velocidad-Todo el programa debe cargarse en memoria para su ejecución. LIGADURA (BINDING) Programas tratan con entidades (funciones,variables,sentencias). poseen atributos (nombre, tipo, parámetros). BINDING: Proceso de especificación de la naturaleza exacta de cada atributo. Ligadura *entre una variable y su nombre *Entre una variable y su tipo *Entre un programa y su espacio de almacenamiento. *Entre un subprograma y sus parámetros . Proceso asociado *Identificación *Determinación *Reserva de espacio *Pasaje de parámetros LENGUAJES DIFERENTES: • En número de entidades • En número de atributos • En momento de realizarlo – Binding estático – Binding Dinámico • BINDING CONGELADO -> CONSTANTE ( Valor de la variable cuando es creada) VARIABLES Atracción de la noción de celda de memoria de una computadora. Caracterizada por: NOMBRE: usado para identificar y referirse a una variable. AMBITO: es el rango de instrucciones de programa sobre el cual una variable es conocida y manipulada. Fuera de el la variable es INVISIBLE. TIEMPO DE VIDA: es el intervalo de tiempo en el que un espacio de almacenamiento (memoria) es asociado con una variable. Este proceso es llamado ALOCACION. VALOR: es el contenido del espacio de memoria asignado a al variable. Esta representado en forma codificada (cadena de bits). Esta codificación se interpretara de acuerdo al TIPO de la variable. TIPO: es la especificación de la clase de valores que puede ser asociada con una variable junto con el conjunto que pueden usarse para crear, modificar y acceder tales valores. TIPOS PREDEFINIDOS BOOLEAN: valores posibles(TRUE, FALSE). Operaciones(AND, OR, NOT). TIPOS DEFINIDOS POR EL USUARIO Type T= array [1..10] of BOOLEAN TIPOS ABSTRACTOS DE DATOS TYPE counters DEFINITION Integer range 0..59 OPERATIONS Up(counters); down(counters); Zero(counters) END counters; LIGADURA DINAMICA DE TIPOS (APL SNOBOL) A5 (variable simple) A (etiqueta) A1 -2- 51(arreglo unidimensional) UNIDADES DE PROGRAMAS Descomposición de un programa: 1)Componentes de una Unidad de Programa: -Segmento de código: fijo, se almacena en C[]. -registro de activación: variable, contiene toda la información necesaria para la ejecución de una unidad de programa. Se almacena en D[]. Variables locales y No locales. Información de binding. punto de retorno. 2)Activación de una Unidad de programa: -una única instancia por unidad. -mas de una instancia por unidad(lenguajes recursivos). ESTRUCTURA DE LOS LP EN TIEMPO DE EJECUCION DIVISION DE LOS LP DE ACUERDO A SUS REQUERIMIENTOS DE MEMORIA a)Estáticos: con requerimientos de memoria predeterminados.(FORTRAN,COBOL). b)Basados en pila: con requerimientos de memoria Predeterminados y con una estrategia de pila.(ALGOL 60). c)Dinámicos: con requerimientos de memoria Impredecibles (LISP,PROLOG,APL, JAVA). d)Híbridos: b)+ c).(PASCAL, C, ADA). EJEMPLOS DE CADA CLASIFICACION DE LENGUAJES: 1)Estructura del lenguaje FORTRAN (estáticos) . Almacenamiento de un programa FORTRAN en memoria(todos los segmento de código juntos en C[] y todos los registros de activación en D[]). Activation record for global data ip Code segment for unit 1 Activation record for unit 1 Code segment for unit 2 Activation record for unit 2 Code segment for unit 3 … … Activation record for unit n Code segment for unit n code memory(c) data memory(d) • COMPILACION -> LENGUAJE MÁQUINA • LINKADO -> ASIGNACIÓN DE MEMORIA • CARGA -> CARGA DE MEMORIA (EJS. EN SIMPLESEM) Ejs: Si RA (Registro de activación) de la unidad “i” se asigna a memoria a partir de la posición 830 – La Posición de datos referenciada como [i,10] será direccionada como D[840] • El desplazamiento 0 tiene el puntero de retorno Notación d[i,j] = es la posición de j a partir del RA de la unidad i c[i,j] = instrucción en el desplazamiento j del segmento de codigo de la unidad i X = es c[i,j] o d[i,j] para indicar la dirección de x • El traductor o compilador trasladará nombres de variables a un par de c[i,j] o d[i,j] • El linkador a direcciones c[m] o d[m] Constructores descriptos: GOTO-CALL-RETURN (Transferencia de control). Sentencia Ligadura Linkeditado RA GOTO X ip:=& c[i,j] (1) ip:= j COMMON CALL P d[P,0]:=ip+2 (2) D[m]:=ip+2 MAIN ip:=&c[P,0] ip:=n X RETURN ip:=d[P,0] ip:=D[m] (1) i = unidad que está siendo trasladada - x = etiqueta de la instrucción localizada en el desplazamiento j del segmento de código de la unidad i. (2) Almacena el punto de retorno en la posición 0 del registro de activación de la unidad P - b) Reemplazar el contenido del puntero de instrucción &c[P,0], la primera instrucción de la unidad P transfiere el control a P. (luego del link m en la dirección asignada al segmento de código de P. (3) Reemplazar el puntero de instrucción en el contenido d[P,0] retorno de la unidad P Link = m dirección de RA de P Descripción en términos de funcionamiento de SIMPLESEM D(3)=ip+2 Ip=5 0 ip main common I Return Point main Ip=3 J noop halt Return Point x K D(4)=5 D(0)=6 x D(5)=D(0)+D(4) Ip=D(3) halt Code memory J Data memory D(3)=Ip+2 5 ip common I Ip=5 Ip=3 main J noop 2 halt D(4)=5 Return Point x K J D(0)=6 D(5)=D(0)+D(4) Ip=D(3) halt Code memory Return Point Data memory D(3)=ip+2 7 ip Ip=5 common 6 Return Point main Ip=3 J Noop Halt 2 x 5 D(4)=5 Ip=D(3) halt Code memory Return Point K J D(0)=6 D(5)=D(0)+D(4) I Data memory PROGRAMA INTEGER I,J COMMON I CALL X GOTO 10 LIGADURA I <-> d[COMMON,0] I <-> d[MAIN,1] 10 <-> c[MAIN,3] X <-> c[X,0] LINKEDITADO I <-> D[0] I <-> D[2] 10 <-> C[3] X <-> D[5] SOUBROTINE X INTEGER K,J COMMON I K=5 I=6 J=1+K RETURN END I<-> d[COMMON,0] K<-> d[X,1] J<-> d[X,2] I <-> D[0] K <-> D[4] J <-> D[5] D(3)=ip+2 common 5 Ip=5 2 ip Ip=3 main Noop halt D(4)=5 D(0)=6 D(5)=D(0)+D(4) Ip=D(3) halt Code memory 2 x 5 11 Data memory 2)Estructura del lenguaje ALGOL (Basado en Pila) unit A unit B unit C end B end C unit D end D A unit E unit F end F end A end E B unit G C end G D E F G Unidades de ejecución Disjuntas Anidadas Problemas básicos Recursividad Variables dinámicas: type T=array [m,n] of real VENTAJA BASICA DE UTILIZAR UNA ESTRUCTURA DE PILA: Cada registro de activación que se carga en memoria, y se deja libre ese espacio al finalizar su ejecución!! 1)Agregar en los registros de activación enlaces dinámicos (además del punto de retorno). 2)Agregar dos punteros mas a SIMPLESEM: 2.1)free: siguiente dirección libre de memoria. 2.3)current: apunta al inicio del registro de activación actual. CALL B D[free]:= ip+5 D[free+1]:=current current :=free free:= free+S (S tamaño de B) ip:= n RETURN free:=current current:=D[current+1] ip:=D[free] Ejemplo:sea la siguiente secuencia de llamadas de rutinas FGFGFEA Genera la siguiente secuencia SIMPLESEM A E F G F G Current F Free 3)ESTRUCTURA DE LOS LENGUAJES DINAMICOS (APL,SNOBOL,LISP) CONCEPCION: lenguajes con reglas dinámicas A locación Ligadura de tipo Ligadura de ámbito IMPLEMENTACION: Almacenamiento de los registros de activación en una pila y enlace de los mismos a través de ENLACES DINAMICOS ESTRUCTURA DE UN PROGRAMA APL Main program Subprogram SUB Function subprogram FUN