SlideShare una empresa de Scribd logo
1 de 5
Descargar para leer sin conexión
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR
SEDE IBARRA
ESCUELA DE INGENIERIA
Nombre: Espinosa Villarreal Héctor Efrén
Nivel: Quinto de Sistemas
Fecha: 03-05-2013
Asignatura: Compiladores
El papel del analizador sintáctico
Todo lenguaje de programación tiene reglas que describen la estructura sintáctica de
programas bien formados. En Pascal, por ejemplo, un programa se compone de bloques, un
bloque de proposiciones, una proposición de expresiones, una expresión de componentes
léxicos, y así sucesivamente. Se puede describir la sintaxis de las construcciones de los
lenguajes de programación por medio de gramáticas de contexto libre o notación BNF (
Backus-Naur Form).
Las gramáticas ofrecen ventajas significativas a los diseñadores de lenguajes y a los
desarrolladores de compiladores.
Es la fase del analizador que se encarga de chequear el texto de entrada en base a una
gramática dada. Y en caso de que el programa de entrada sea válido, suministra el árbol
sintáctico que lo reconoce.
En teoría, se supone que la salida del analizador sintáctico es alguna representación del
árbol sintáctico que reconoce la secuencia de tokens suministrada por el analizador léxico.
En la práctica, el analizador sintáctico también hace:
• Acceder a la tabla de símbolos (para hacer parte del trabajo del analizador semántico).
• Chequeo de tipos (del analizador semántico).
• Generar código intermedio.
• Generar errores cuando se producen.
En definitiva, realiza casi todas las operaciones de la compilación. Este método de trabajo
da lugar a los métodos de compilación dirigidos por sintaxis.
• Las gramáticas son especificaciones sintácticas y precisas de lenguajes de programación.
• A partir de una gramática se puede generar automáticamente un analizador sintáctico.
• El proceso de construcción puede llevar a descubrir ambigüedades.
• Una gramática proporciona una estructura a un lenguaje de programación, siendo más
fácil generar código y detectar errores.
• Es más fácil ampliar/modificar el lenguaje si está descrito con una gramática
Análisis sintáctico ascendente y descendente
De la forma de construir el árbol sintáctico se desprenden dos tipos o clases de
analizadores sintácticos. Pueden ser descendentes o ascendente
• Descendentes : Parten del axioma inicial, y van efectuando derivaciones a izquierda hasta
obtener la secuencia de derivaciones que reconoce a la sentencia.
Pueden ser:
_ Con retroceso.
_ Con recursión.
_ LL(1)
• Ascendentes: Parten de la sentencia de entrada, y van aplicando reglas de producción
hacia atrás (desde el consecuente hasta el antecedente), hasta llegar al axioma inicial.
Pueden ser:
_ Con retroceso.
_ LR(1)
Árbol sintáctico de una sentencia de un lenguaje
Es una representación que se utiliza para describir el proceso de derivación de dicha
sentencia.
Como nodos internos del árbol, se sitúan los elementos no terminales de las reglas de
producción que vayamos aplicando, y tantos hijos como símbolos existan en la parte
derecha de dichas reglas.
Veamos un ejemplo: Sea la gramática anterior.
E Ú E + T | T
T Ú T * F | F
F Ú ( E ) | a | b
Supongamos que hay que reconocer: ( a + b ) * a + b
Si el árbol puede construirse, es que la sentencia es correcta:
Ambigüedad: Una gramática es ambigua si derivando de forma diferente con el mismo
tipo de derivación se llega al mismo resultado.
Ejemplo: Considérese la gramática
E  E + E
E  E * E
E  ( E )
E  id | num
si tenemos aux + cont + i
<ID><+><ID><+><ID>
Tratamiento de errores
Hay dos conceptos fundamentales:
 Corrección de errores: exige que el programa pueda ejecutarse. Suele utilizarse en
sistemas que generán .EXE directamente, pues ahorra tiempo (permite encontrar
errores de ejecución a la vez que los de compilación).
 Recuperación de errores: sólo trata de evitar que el número de mensajes de error sea
demasiado grande y que el compilador/intérprete pueda seguir ejecutándose
correctamente en instrucciones sucesivas.
Corrección ortográfica
Errores ortográficos típicos:
 Un carácter por otro.
 Un carácter perdido.
 Un carácter añadido.
 Dos caracteres intercambiados.
Pueden comprobarse sólo los errores anteriores, lo que acelera el proceso.
Correcciones posibles:
 Análisis sintáctico
o Si se espera una palabra reservada y aparece un identificador, buscar la
palabra reservada más parecida al identificador.
o Deshacer errores de concatenación. Por ejemplo, convertir 'begina' en 'begin
a'.
 Análisis semántico
o Si un identificador se utiliza en un contexto incompatible con su tipo, tratar
de sustituirlo por otro de nombre parecido y tipo compatible con el contexto.
o Si un identificador no ha sido referenciado o asignado, es candidato para
corrección ortográfica. Sólo en compiladores de dos pasos. En la tabla de
símbolos se puede añadir como valor un par de contadores de uso y
asignación.
Todas las correcciones efectuadas deben ser cuidadosamente documentadas, para evitar que
el programador se pierda al probar el programa.
Corrección de errores sintácticos
Si se detecta al analizar la cadena
xUy
donde x,y en A* y U en A es el próximo símbolo a analizar, podemos intentar lo siguiente:
 Borrar U e intentarlo de nuevo.
 Insertar una cadena de terminales z entre x, U y empezar a analizar a partir de z.
 Insertar una cadena de terminales z entre x, U y empezar a analizar a partir de U,
poniendo z en la pila (si es análisis bottom-up).
 Borrar símbolos del final de x e intentar de nuevo.
No hacer nunca los dos últimos. Deshace la información semántica asociada.
Ejemplo: tenemos
if (...) { x=0; else ...
El error se detecta en "else". Solución posible: añadir "}" delante de "else", analizando
if (...) { x=0; } else ...
Recuperación de errores de compilación
Conviene tener una sola rutina de recuperación de errores separada del resto del
compilador.
 Evitar que un solo error produzca varios mensajes.
Ejemplo: A[i1,i2,...,i3], donde A no es un "array". Al abrir el corchete nos dará un
error: "A no es un array". Al cerrar el corchete podría dar otro: "El número de
índices no coincide con el rango de A". Si se ha dado el primero, el segundo es
innecesario. Una solución: detectado el primer error, se sustituye la referencia a A
por una referencia a un identificador "fantasma". La rutina de recuperación de
errores podría ignorar los mensajes que se refieren al identificador fantasma.
 Evitar que un error idéntico repetido produzca varios mensajes. Ejemplo:
 { ...
 { int i;
 ...
 /* { */ ...
 }
 for (i=0; i<j; i++) { a=j-i+1; b=2*a+i; }
 }
 }
Se nos olvida poner la tercera llave. La llave siguiente cierra el segundo bloque. "i"
está indefinida en el primer bloque. El bucle "for" nos daría cinco veces el mensaje
"variable i indefinida".
Solución: crear un identificador llamado "i" en la tabla de símbolos con los atributos
correctos. Esto elimina los mensajes subsiguientes. Atención: esto podría hacer que
no se detecte un error real que nos interesaría atrapar. Otra alternativa sería imprimir
un solo mensaje diciendo que el identificador "i" ha sido utilizado sin declaración
previa en las líneas número a,b,c...
Recuperación de errores en un intérprete
Hay que señalar el error y detener la ejecución, permitiendo al programador
 revisar las variables
 revisar el código
 modificar el código
 reanudar la ejecución
 saltarse líneas
 abandonar la ejecución del último programa
 abandonar totalmente la ejecución
y asegurarse de que todo sigue correctamente. En lenguaje simbólico se puede
manipular la pila de ejecución, salir automáticamente de rutinas pendientes, sin
continuar la ejecución, etc.
http://www.lcc.uma.es/~galvez/ftp/tci/tictema3.pdf
http://arantxa.ii.uam.es/~alfonsec/docs/compila9.htm

Más contenido relacionado

La actualidad más candente

Sintaxis Y Gramatica
Sintaxis Y GramaticaSintaxis Y Gramatica
Sintaxis Y Gramaticaguest0ec93c
 
Alfabeto, Cadenas, Lenguajes, y Problemas
Alfabeto, Cadenas, Lenguajes, y ProblemasAlfabeto, Cadenas, Lenguajes, y Problemas
Alfabeto, Cadenas, Lenguajes, y ProblemasRaul
 
Analisis lexico 2
Analisis lexico 2Analisis lexico 2
Analisis lexico 2perlallamas
 
ESPRESIONES REGULARES
ESPRESIONES REGULARESESPRESIONES REGULARES
ESPRESIONES REGULARESAnel Sosa
 
Variables de-programación
Variables de-programaciónVariables de-programación
Variables de-programaciónKarenNaranjoH
 
Analizador LÉxico
Analizador LÉxicoAnalizador LÉxico
Analizador LÉxicoFARIDROJAS
 
Expresiones regulares edward
Expresiones regulares edwardExpresiones regulares edward
Expresiones regulares edwardEdward Larez
 
Cap5
Cap5Cap5
Cap5CJAO
 
Tipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacionTipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacionjorge severino
 
Sintaxis Y Gramatica
Sintaxis Y GramaticaSintaxis Y Gramatica
Sintaxis Y Gramaticaamouritsme_wi
 
Típos de grámatica y más, exposición de compiladores e intérpretes
Típos de grámatica y más, exposición de compiladores e intérpretesTípos de grámatica y más, exposición de compiladores e intérpretes
Típos de grámatica y más, exposición de compiladores e intérpretesElmer André Boulangger Alberca
 
Analisis Lexico
Analisis LexicoAnalisis Lexico
Analisis LexicoFARIDROJAS
 
Exposición de compiladores e intérpretes - Profesor: Eddie Malca
Exposición de compiladores e intérpretes - Profesor: Eddie MalcaExposición de compiladores e intérpretes - Profesor: Eddie Malca
Exposición de compiladores e intérpretes - Profesor: Eddie MalcaElmer André Boulangger Alberca
 

La actualidad más candente (20)

Sintaxis Y Gramatica
Sintaxis Y GramaticaSintaxis Y Gramatica
Sintaxis Y Gramatica
 
Expresiones Regulares
Expresiones RegularesExpresiones Regulares
Expresiones Regulares
 
Claselexico
ClaselexicoClaselexico
Claselexico
 
Gramática y autómatas
Gramática y autómatasGramática y autómatas
Gramática y autómatas
 
Alfabeto, Cadenas, Lenguajes, y Problemas
Alfabeto, Cadenas, Lenguajes, y ProblemasAlfabeto, Cadenas, Lenguajes, y Problemas
Alfabeto, Cadenas, Lenguajes, y Problemas
 
Analisis lexico 2
Analisis lexico 2Analisis lexico 2
Analisis lexico 2
 
ESPRESIONES REGULARES
ESPRESIONES REGULARESESPRESIONES REGULARES
ESPRESIONES REGULARES
 
Variables de-programación
Variables de-programaciónVariables de-programación
Variables de-programación
 
Analizador léxico
Analizador léxicoAnalizador léxico
Analizador léxico
 
Analizador LÉxico
Analizador LÉxicoAnalizador LÉxico
Analizador LÉxico
 
Compiladores1
Compiladores1Compiladores1
Compiladores1
 
Expresiones regulares edward
Expresiones regulares edwardExpresiones regulares edward
Expresiones regulares edward
 
Cap5
Cap5Cap5
Cap5
 
Tipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacionTipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacion
 
Ola k ase
Ola k aseOla k ase
Ola k ase
 
Sintaxis Y Gramatica
Sintaxis Y GramaticaSintaxis Y Gramatica
Sintaxis Y Gramatica
 
Típos de grámatica y más, exposición de compiladores e intérpretes
Típos de grámatica y más, exposición de compiladores e intérpretesTípos de grámatica y más, exposición de compiladores e intérpretes
Típos de grámatica y más, exposición de compiladores e intérpretes
 
Analisis Lexico
Analisis LexicoAnalisis Lexico
Analisis Lexico
 
Exposición de compiladores e intérpretes - Profesor: Eddie Malca
Exposición de compiladores e intérpretes - Profesor: Eddie MalcaExposición de compiladores e intérpretes - Profesor: Eddie Malca
Exposición de compiladores e intérpretes - Profesor: Eddie Malca
 
AnáLisis LéXico
AnáLisis LéXicoAnáLisis LéXico
AnáLisis LéXico
 

Similar a El papel del analizador sintáctico

Presentación 2014 profe gabriel
Presentación 2014 profe gabrielPresentación 2014 profe gabriel
Presentación 2014 profe gabrielEnrique Morales
 
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS Infomania pro
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico maryr_
 
Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2Universidad
 
Analizador sintactico
Analizador sintacticoAnalizador sintactico
Analizador sintacticoalexisdario
 
La programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortadaLa programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortadaAeChm-MgMs-NnNm-OpSe
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semanticoAlvaro Cedeño
 
Estructura general del programa
Estructura general del programaEstructura general del programa
Estructura general del programaRubén Peña
 
Analizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador SintácticoAnalizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador SintácticoRaul Gomez
 

Similar a El papel del analizador sintáctico (20)

Capitulo 3 paul carrera,dego balcazar
Capitulo 3 paul carrera,dego balcazarCapitulo 3 paul carrera,dego balcazar
Capitulo 3 paul carrera,dego balcazar
 
Analisis lexico
Analisis lexicoAnalisis lexico
Analisis lexico
 
Presentación 2014 profe gabriel
Presentación 2014 profe gabrielPresentación 2014 profe gabriel
Presentación 2014 profe gabriel
 
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico
 
Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Analizador sintactico
Analizador sintacticoAnalizador sintactico
Analizador sintactico
 
Curso prog sist
Curso prog sistCurso prog sist
Curso prog sist
 
Analizador sintactico
Analizador sintacticoAnalizador sintactico
Analizador sintactico
 
Analisis sintactico
Analisis sintacticoAnalisis sintactico
Analisis sintactico
 
La programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortadaLa programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortada
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Python
 
Compilador2
Compilador2Compilador2
Compilador2
 
Análisis Sintáctico
Análisis SintácticoAnálisis Sintáctico
Análisis Sintáctico
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semantico
 
Analizador sintáctico
Analizador sintácticoAnalizador sintáctico
Analizador sintáctico
 
Estructura general del programa
Estructura general del programaEstructura general del programa
Estructura general del programa
 
Analizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador SintácticoAnalizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador Sintáctico
 
Gramaticas
GramaticasGramaticas
Gramaticas
 

Más de Hector Espinosa

Flex y bison héctor espinosa
Flex y bison   héctor espinosaFlex y bison   héctor espinosa
Flex y bison héctor espinosaHector Espinosa
 
Analizador léxicográfico
Analizador léxicográficoAnalizador léxicográfico
Analizador léxicográficoHector Espinosa
 
Clasificación de los lenguajes de programación según la
Clasificación de los lenguajes de programación según laClasificación de los lenguajes de programación según la
Clasificación de los lenguajes de programación según laHector Espinosa
 

Más de Hector Espinosa (7)

Flex y bison héctor espinosa
Flex y bison   héctor espinosaFlex y bison   héctor espinosa
Flex y bison héctor espinosa
 
Estado fiancieros
Estado fiancierosEstado fiancieros
Estado fiancieros
 
Analizador léxicográfico
Analizador léxicográficoAnalizador léxicográfico
Analizador léxicográfico
 
Bootstrapping
BootstrappingBootstrapping
Bootstrapping
 
Compilar mediante dos
Compilar mediante dosCompilar mediante dos
Compilar mediante dos
 
Clasificación de los lenguajes de programación según la
Clasificación de los lenguajes de programación según laClasificación de los lenguajes de programación según la
Clasificación de los lenguajes de programación según la
 
DV Decompiler
DV DecompilerDV Decompiler
DV Decompiler
 

El papel del analizador sintáctico

  • 1. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA ESCUELA DE INGENIERIA Nombre: Espinosa Villarreal Héctor Efrén Nivel: Quinto de Sistemas Fecha: 03-05-2013 Asignatura: Compiladores El papel del analizador sintáctico Todo lenguaje de programación tiene reglas que describen la estructura sintáctica de programas bien formados. En Pascal, por ejemplo, un programa se compone de bloques, un bloque de proposiciones, una proposición de expresiones, una expresión de componentes léxicos, y así sucesivamente. Se puede describir la sintaxis de las construcciones de los lenguajes de programación por medio de gramáticas de contexto libre o notación BNF ( Backus-Naur Form). Las gramáticas ofrecen ventajas significativas a los diseñadores de lenguajes y a los desarrolladores de compiladores. Es la fase del analizador que se encarga de chequear el texto de entrada en base a una gramática dada. Y en caso de que el programa de entrada sea válido, suministra el árbol sintáctico que lo reconoce. En teoría, se supone que la salida del analizador sintáctico es alguna representación del árbol sintáctico que reconoce la secuencia de tokens suministrada por el analizador léxico. En la práctica, el analizador sintáctico también hace: • Acceder a la tabla de símbolos (para hacer parte del trabajo del analizador semántico). • Chequeo de tipos (del analizador semántico). • Generar código intermedio. • Generar errores cuando se producen. En definitiva, realiza casi todas las operaciones de la compilación. Este método de trabajo da lugar a los métodos de compilación dirigidos por sintaxis. • Las gramáticas son especificaciones sintácticas y precisas de lenguajes de programación. • A partir de una gramática se puede generar automáticamente un analizador sintáctico. • El proceso de construcción puede llevar a descubrir ambigüedades. • Una gramática proporciona una estructura a un lenguaje de programación, siendo más fácil generar código y detectar errores. • Es más fácil ampliar/modificar el lenguaje si está descrito con una gramática Análisis sintáctico ascendente y descendente De la forma de construir el árbol sintáctico se desprenden dos tipos o clases de analizadores sintácticos. Pueden ser descendentes o ascendente • Descendentes : Parten del axioma inicial, y van efectuando derivaciones a izquierda hasta obtener la secuencia de derivaciones que reconoce a la sentencia. Pueden ser: _ Con retroceso. _ Con recursión. _ LL(1) • Ascendentes: Parten de la sentencia de entrada, y van aplicando reglas de producción
  • 2. hacia atrás (desde el consecuente hasta el antecedente), hasta llegar al axioma inicial. Pueden ser: _ Con retroceso. _ LR(1) Árbol sintáctico de una sentencia de un lenguaje Es una representación que se utiliza para describir el proceso de derivación de dicha sentencia. Como nodos internos del árbol, se sitúan los elementos no terminales de las reglas de producción que vayamos aplicando, y tantos hijos como símbolos existan en la parte derecha de dichas reglas. Veamos un ejemplo: Sea la gramática anterior. E Ú E + T | T T Ú T * F | F F Ú ( E ) | a | b Supongamos que hay que reconocer: ( a + b ) * a + b Si el árbol puede construirse, es que la sentencia es correcta:
  • 3. Ambigüedad: Una gramática es ambigua si derivando de forma diferente con el mismo tipo de derivación se llega al mismo resultado. Ejemplo: Considérese la gramática E  E + E E  E * E E  ( E ) E  id | num si tenemos aux + cont + i <ID><+><ID><+><ID> Tratamiento de errores Hay dos conceptos fundamentales:  Corrección de errores: exige que el programa pueda ejecutarse. Suele utilizarse en sistemas que generán .EXE directamente, pues ahorra tiempo (permite encontrar errores de ejecución a la vez que los de compilación).  Recuperación de errores: sólo trata de evitar que el número de mensajes de error sea demasiado grande y que el compilador/intérprete pueda seguir ejecutándose correctamente en instrucciones sucesivas. Corrección ortográfica Errores ortográficos típicos:  Un carácter por otro.  Un carácter perdido.  Un carácter añadido.  Dos caracteres intercambiados. Pueden comprobarse sólo los errores anteriores, lo que acelera el proceso. Correcciones posibles:  Análisis sintáctico o Si se espera una palabra reservada y aparece un identificador, buscar la palabra reservada más parecida al identificador. o Deshacer errores de concatenación. Por ejemplo, convertir 'begina' en 'begin a'.  Análisis semántico o Si un identificador se utiliza en un contexto incompatible con su tipo, tratar de sustituirlo por otro de nombre parecido y tipo compatible con el contexto.
  • 4. o Si un identificador no ha sido referenciado o asignado, es candidato para corrección ortográfica. Sólo en compiladores de dos pasos. En la tabla de símbolos se puede añadir como valor un par de contadores de uso y asignación. Todas las correcciones efectuadas deben ser cuidadosamente documentadas, para evitar que el programador se pierda al probar el programa. Corrección de errores sintácticos Si se detecta al analizar la cadena xUy donde x,y en A* y U en A es el próximo símbolo a analizar, podemos intentar lo siguiente:  Borrar U e intentarlo de nuevo.  Insertar una cadena de terminales z entre x, U y empezar a analizar a partir de z.  Insertar una cadena de terminales z entre x, U y empezar a analizar a partir de U, poniendo z en la pila (si es análisis bottom-up).  Borrar símbolos del final de x e intentar de nuevo. No hacer nunca los dos últimos. Deshace la información semántica asociada. Ejemplo: tenemos if (...) { x=0; else ... El error se detecta en "else". Solución posible: añadir "}" delante de "else", analizando if (...) { x=0; } else ... Recuperación de errores de compilación Conviene tener una sola rutina de recuperación de errores separada del resto del compilador.  Evitar que un solo error produzca varios mensajes. Ejemplo: A[i1,i2,...,i3], donde A no es un "array". Al abrir el corchete nos dará un error: "A no es un array". Al cerrar el corchete podría dar otro: "El número de índices no coincide con el rango de A". Si se ha dado el primero, el segundo es innecesario. Una solución: detectado el primer error, se sustituye la referencia a A por una referencia a un identificador "fantasma". La rutina de recuperación de errores podría ignorar los mensajes que se refieren al identificador fantasma.  Evitar que un error idéntico repetido produzca varios mensajes. Ejemplo:  { ...  { int i;  ...  /* { */ ...  }  for (i=0; i<j; i++) { a=j-i+1; b=2*a+i; }  }  } Se nos olvida poner la tercera llave. La llave siguiente cierra el segundo bloque. "i" está indefinida en el primer bloque. El bucle "for" nos daría cinco veces el mensaje "variable i indefinida". Solución: crear un identificador llamado "i" en la tabla de símbolos con los atributos correctos. Esto elimina los mensajes subsiguientes. Atención: esto podría hacer que no se detecte un error real que nos interesaría atrapar. Otra alternativa sería imprimir
  • 5. un solo mensaje diciendo que el identificador "i" ha sido utilizado sin declaración previa en las líneas número a,b,c... Recuperación de errores en un intérprete Hay que señalar el error y detener la ejecución, permitiendo al programador  revisar las variables  revisar el código  modificar el código  reanudar la ejecución  saltarse líneas  abandonar la ejecución del último programa  abandonar totalmente la ejecución y asegurarse de que todo sigue correctamente. En lenguaje simbólico se puede manipular la pila de ejecución, salir automáticamente de rutinas pendientes, sin continuar la ejecución, etc. http://www.lcc.uma.es/~galvez/ftp/tci/tictema3.pdf http://arantxa.ii.uam.es/~alfonsec/docs/compila9.htm