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