Cap4 Analisis Sintactico

6,422 views

Published on

Se presentan las diferentes estrategias de recuperación de errores que pueden utilizarse en el análsis sintáctico.

Published in: Education
  • Be the first to comment

  • Be the first to like this

Cap4 Analisis Sintactico

  1. 1. Análisis Sintáctico Capítulo 4 Leonel Morales Díaz [email_address] Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados Disponible en: http://www.ingenieriasimple.com/compiladores
  2. 2. Analizador Sintáctico Analizador Léxico Analizador sintáctico Tabla de Símbolos Componente Léxico (Token) GetNextToken() Programa Fuente Arbol de Análisis Sintáctico Resto de Etapa Inicial Código Intermedio
  3. 3. Errores <ul><li>Léxicos </li></ul><ul><ul><li>Escribir mal algo (fi en lugar de if) </li></ul></ul><ul><li>Sintácticos </li></ul><ul><ul><li>Paréntesis no equilibrados </li></ul></ul><ul><ul><li>If sin Then </li></ul></ul><ul><li>Semáticos </li></ul><ul><ul><li>Llamada a función con parámetros de tipo incorrecto </li></ul></ul><ul><li>Lógicos </li></ul><ul><ul><li>Recursión infinita </li></ul></ul><ul><ul><li>Run time error </li></ul></ul>
  4. 4. Errores Sintácticos <ul><li>Objetivos </li></ul><ul><ul><li>Informar de los errores con claridad </li></ul></ul><ul><ul><ul><li>Lugar donde ocurrió el error </li></ul></ul></ul><ul><ul><li>Recuperarse de los errores </li></ul></ul><ul><ul><ul><li>Varias estrategias </li></ul></ul></ul><ul><ul><li>No retrasar el análisis en programas correctos </li></ul></ul>
  5. 5. Programa ejemplo <ul><li>Program impmax(input, output); </li></ul><ul><li>Var </li></ul><ul><li>x, y : integer; </li></ul><ul><li>Function max(i: integer; j: integer) : integer; </li></ul><ul><li>{devuelve el máximo de los enteros i y j} </li></ul><ul><li>Begin </li></ul><ul><li>if i > j then max := i </li></ul><ul><li>else max := j </li></ul><ul><li>End; </li></ul><ul><li>Begin </li></ul><ul><li>readln(x,y); </li></ul><ul><li>writeln(max(x,y)) </li></ul><ul><li>End. </li></ul>
  6. 6. Estrategias de recuperación de errores <ul><li>En modo de pánico </li></ul><ul><li>A nivel de frase </li></ul><ul><li>De producciones de error </li></ul><ul><li>De corrección global </li></ul>
  7. 7. En modo de pánico <ul><li>Se descubre el error </li></ul><ul><li>Se desechan símbolos de entrada </li></ul><ul><li>Se llega a un componente de sincronización </li></ul><ul><ul><li>; end loop then </li></ul></ul><ul><ul><li>Se debe definir cuáles se usarán </li></ul></ul><ul><li>Puede desechar gran parte de la entrada </li></ul><ul><li>Garantiza recuperación </li></ul>
  8. 8. A nivel de frase <ul><li>Identificar prefijo para la entrada restante </li></ul><ul><li>Ejemplo </li></ul><ul><ul><li>If while not true then ... </li></ul></ul><ul><ul><li>Entrada restante: not true then... </li></ul></ul><ul><ul><li>Prefijo identificable: if </li></ul></ul><ul><ul><li>Corrección: if not true then ... </li></ul></ul><ul><li>Difícil de implementar </li></ul>
  9. 9. Producciones de error <ul><li>Se identifican patrones de error </li></ul><ul><li>Se incluyen producciones para esos patrones </li></ul><ul><li>Si la producción se usa... </li></ul><ul><ul><li>Corregir en reglas semánticas </li></ul></ul><ul><li>Modificar la gramática </li></ul>
  10. 10. Corrección Global <ul><li>Identificar todas las posibles variaciones </li></ul><ul><li>Evaluar la mínima </li></ul><ul><li>Utilizarla </li></ul>

×