Actividad 2 programacion de sistemas

432 views

Published on

Published in: News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
432
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Actividad 2 programacion de sistemas

  1. 1.  
  2. 2.  El análisis léxico es la primera fase de un compiladorconsistente en un programa que recibe como entrada elcódigo fuente de otro programa (secuencia decaracteres) y produce una salida compuesta de tokens(componentes léxicos) o símbolos. Estos tokens sirvenpara una posterior etapa del proceso de traducción,siendo la entrada para el analizador sintáctico .
  3. 3.  El analisis sintactico es nuestra segunda etapa paragenerar nuestro compilador. El analizador sintáctico obtiene una cadena decomponentes léxicos del analizador léxico, y compruebasi la cadena puede ser generada por la gramática delprograma fuente.
  4. 4.  La fase de análisis semántico revisa el programafuente para tratar de encontrar errores semánticos yreúne la información sobre los tipos para la faseposterior de generación de código. En ella se utiliza laestructura jerárquica determinada por la fase de análisissintáctico para identificar los operadores y operandos deexpresiones y proposiciones.
  5. 5.  a) manejo de localidades temporales de memoria(buffers) El uso de localidades temporales de memoria es paraagilizar el tiempo de compilación, el manejo de este espor medio de estructuras de datos utilizando memoriadinámica, como se vio en materias anteriores comoestructura de datos, usando esta implementación dediferentes formas que pueden clasificarse de acuerdo asu argumento de búsqueda.
  6. 6.  b) creación de tablas de símbolosLas tablas de símbolos (también llamadas tablas deidentificadores y tablas de nombres), realizan dosimportantes funciones en el proceso de traducción:verificar que la semántica sea correcta y ayudar en lageneración apropiada de código. Ambas funciones serealizan insertando o recuperando desde la tabla desímbolos los atributos de las variables usadas en elprograma fuente. Estos atributos, tales como: elnombre, tipo, dirección de almacenamiento y dimensión deuna variable, usualmente se encuentran explícitamente enlas declaraciones o más implícitamente a través delcontexto en que aparecen los nombres de variables en elprograma.
  7. 7.  Una de las estructuras de datos que se encuentranrelacionadas con las fases del proceso de compilaciónes la tabla de símbolos, la cual tiene como propósitoregistrar información que se comparte entre variasetapas y que permite administrar los recursos asociadosa las entidades que manipulará el programa. La tabla desímbolos tiene típicamente la siguiente estructura:
  8. 8. en donde podemos apreciar la designación de laentidad y su token -derivados del análisis de léxico-asi como una serie de atributos (tipo dedato, dirección en memoria) que emanan de otrasfases (análisis gramatical y semántico). Lasconsultas a la tabla de símbolos se realizan pormedio del lexema con que se designa a la entidad.
  9. 9.  c) Manejo de errores léxicosEl compilador tiene que::Reportar clara y exactamente la presencia de erroresRecuperarse de cada error lo suficientemente rápido para poderdetectar errores subsiguientes:Tratar de evitar mensajes falsos de errorUn error que produce un token erroneoErrores léxicos posiblesUn token o componente léxico es una cadena de caracteres quetiene un significado coherente en cierto lenguaje deprogramación. Ejemplos de tokens, podrían ser palabras clave(if, while, int), identificadores, números, signos, o un operador devarios caracteres. Son los elementos más básicos sobre loscuales se desarrolla toda traducción de un programa, surgen enla primera fase, llamada análisis léxico.
  10. 10.  a) Diagramas de sintaxisEs otra forma (al igual que los árboles de derivación) deespecificar gramáticas del tipo 2.• La característica de este esquema es que permite ver lasderivaciones al instante de que ocurren.
  11. 11.  b) Precedencia de operadoresLa precedencia de operadores es de vital importancia en elproceso de análisis sintáctico ya que nos representará laforma en que debe construirse el árbol de derivación.En aritmética existen prioridades, por ejemplo: * y / tienenpreferencia sobre + y -.() indican la máxima prioridad.La forma de evaluación depende de cómo se construyanlos operadores, ya sea en infijo, postfijo o prefijo.Las operaciones se realizan de abajo hacia arriba.
  12. 12.  c) Analizador sintáctico: analizador descendente(LL), analizador ascendente (LR, LALR).Analizador descendente (LL). Existen diferentes métodosde análisis sintáctico. La mayoría caen en una de doscategorías: ascendentes y descendentes.Los ascendentes construyen el árbol desde las hojas haciala raíz. Los descendentes lo hacen en modo inverso.
  13. 13.  Derivación izquierda:S->aA->aaBbC->aabbC->aabbc (1234)S->aA->aaBbC->aaBbc->aabbc (3421)LL(k) traductores “top-down”Un análisis anticipado de k caracteresS->aS|cA• A->bA|cB|ε• B->cB|a| ε• Construir cadena acbb• S->aS o S->cA; al anticipar el primersímbolo
  14. 14.  Analizador ascendente (LR, LALR)Algunos problemas no se pueden resolver de formadescendente ya que no están fácil quitar la ambigüedad.En algunos casos es más fácil demostrar algo ya existente.Generalmente los analizadores sintácticos LR(k) son deltipo “bottom-up”
  15. 15. El analizador trata de reducir la cadena de entrada w alsímbolo inicial S. En un proceso que recorre el árbol dederivación en sentido inverso que se llama reducción.No sólo es necesario una gramática que no presenteambigüedades sino que también tenga el valor de k máspequeño.
  16. 16.  d) Administración de tablas de símbolos.La tabla de símbolos se crea durante la fase de análisisléxico a través de los componentes léxicos, pero en elproceso de análisis sintáctico sufren algunasmodificaciones.Generalmente se agregan valores de tipo y significadopara el análisis sintáctico.
  17. 17.  e) Manejo de errores sintácticos y su recuperación.Si los traductores tuvieran que procesar programascorrectas el proceso de implantación se simplificaríamucho.¿Cómo debe de responder un compilador de pascal a uncódigo Fortran?Ningún método de recuperación de errores resuelve todoslos problemas
  18. 18.  a) Verificación de tipos en expresiones.La verificación de los tipos de datos se hace asignando el valorde tipo de cada una de los componentes léxicos.Estos valores se comparan para verificar que los tipos de datoscoincidad y sean congruentes, de lo contrario no se puedenrealizar los cálculos.Sistema Semantico.Reglas de un lenguaje que permiten saignar tipos de lasdisteintas partes de un programa y verificar su correccion.Formado por las definiciones y reglas que permiten comprobarel dominio de un identificador, y en que contextos puede serusado.Cada lenguaje tiene un sistema de tipos propio, aunque puedevariar de una a otra implementación.La comprobación de tipos es parte del análisis semantico.
  19. 19.  b) Conversión de tiposLas conversiones nos permiten que una expresión de untipo sea tratada como una expresión de otro tipo, dichasconversiones pueden ser implícitas o explícitas, porejemplo la conversión de un tipo int a long es implícita, sinembargo la conversión de un tipo long a un tipo int esexplícita, esto debido a que un int puede ser expresado enformato long sin que haya perdida de precisión en laoperación, sin embargo si intentamos convertir un numerolong a int puede haber perdida de precisión y se necesitauna conversión explícita
  20. 20.  c) Acciones agregadas en un analizador sintácticodescendente (top-down).En un parser recursivo-descendente, el código de las accionessemánticas es mezclado dentro del flujo de control de las acciones delparser. En un parser especificado en javaCC, las acciones semánticasson fragmentos de código de programa en java unido a lasproducciones gramaticales.Cada símbolo terminal y noterminal puede asociarse con su propio tipode valor semántico.Los otros tokens no necesitarían tener un valor. Por otra parte el tipoasociado a un token debe por supuesto coincidir con el tipo de tokenque el scanner retorne.Para una regla ABCD, la acción semántica debe retornar un valorcuyo tipo es el asociado al noterminal A. Pero puede construir estevalor de los valores asociados a los terminales y noterminales B, C, D.
  21. 21.  d) Pila semántica en un analizador sintácticoascendente (bottom-up).El diseño ascendente se refiere a la identificación deaquellos procesos que necesitan computarizarse conforme vayan apareciendo, su análisis como sistema y sucodificación, o bien, la adquisición de paquetes de softwarepara satisfacer el problema inmediato.Los problemas de integración entre los subsistemas sonsumamente costosos y muchos de ellos no se solucionanhasta que la programación alcanza la fecha limite para laintegración total del sistema.
  22. 22.  e) Administración de la tabla de símbolos.Una tabla de símbolos es una estructura de datos que usa elproceso de traducción de un lenguaje de programación, por uncompilador o un intérprete, donde cada símbolo en el códigofuente de un programa está asociado con información tal comola ubicación, el tipo de datos y el ámbito de cadavariable, constante o procedimiento.Los símbolos en la tabla de símbolos pueden referirse aconstantes, a funciones o a tipos de datos en el código fuentede un programa.El administrador de la tabla de símbolos se encarga de manejarlos accesos a la tabla de símbolos, en cada una de las etapasde compilación de un programa.
  23. 23.  f) Manejo de errores semánticos.Los errores semánticos son más sutiles. Un errorsemántico se produce cuando la sintáxis del código escorrecta, pero la semántica o significado no es el que sepretendía. La construcción obedece las reglas dellenguaje, y por ello el compilador o intérprete no detectanlos errores semánticos. Los compiladores e intérpretessólo se ocupan de la estructura del código que seescribe, y no de su significado. Un error semántico puedehacer que el programa termine de forma anormal, con o sinun mensaje de error.

×