Professional Documents
Culture Documents
Qu es el analizador sintctico?
Es la fase del analizador que se encarga de chequear el texto de entrada en base a una gramtica dada. Y en caso de que el programa de entrada sea vlido, suministra el rbol sintctico que lo reconoce.
rbol sintctico
Los principales problemas que se plantean en el anlisis sintctico descendente son dos: el retroceso (en ingls backtracking) y la recursividad a izquierdas.
El retroceso, se produce cuando se eligen mal las producciones para alcanzar la sentencia a analizar, y debe de darse marcha atrs en el proceso de anlisis, para elegir otra alternativa. El retroceso se repite hasta que se ha elegido la alternativa correcta; evidentemente esto ralentiza enormemente el proceso de anlisis. La recursividad a izquierdas, se deriva de que en general se elige el criterio de tomar siempre en primera opcin la alternativa ms a la izquierda. Si en la gramtica existen producciones de la forma: entonces el analizador sintctico se introduce en un bucle infinito, del que no puede salir. A continuacin se muestra la traza de un analizador sintctico recursivo y que da lugar al rbol sintctico. Puede observarse como el analizador sigue el rbol sintctico de la raz a las hojas, eligiendo siempre la primera alternativa por la izquierda. El analizador lxico va leyendo los tokens y envindoselos al analizador sintctico. En el caso de que el token recibido no concuerde con el que contiene la regla, se devuelve al analizador lxico (caso de las derivaciones a <vacio>).
ANALISIS SINTACTICO: <EXPRESION> ANALISIS SINTACTICO: <TERMINO> ANALISIS SINTACTICO: <FACTOR> ANALIZADOR LEXICO: Lee el token ( ANALISIS SINTACTICO: <EXPRESION> ANALISIS SINTACTICO: <TERMINO> ANALISIS SINTACTICO: <FACTOR> ANALIZADOR LEXICO: Lee el token a ANALIZADOR LEXICO: Recibe en buffer el token a ANALISIS SINTACTICO: <VARIABLE> ANALIZADOR LEXICO: Lee el token a ANALISIS SINTACTICO: <MAS_FACTORES> ANALIZADOR LEXICO: Lee el token + ANALIZADOR LEXICO: Recibe en buffer el token +
ANALISIS SINTACTICO: <MAS_TERMINOS> ANALIZADOR LEXICO: Lee el token + ANALISIS SINTACTICO: <TERMINO> ANALISIS SINTACTICO: <FACTOR> ANALIZADOR LEXICO: Lee el token b ANALIZADOR LEXICO: Recibe en buffer el token b ANALISIS SINTACTICO: <VARIABLE> ANALIZADOR LEXICO: Lee el token b
Tratamientos de errores
Hay dos conceptos fundamentales: Correccin de errores: exige que el programa pueda ejecutarse. Suele utilizarse en sistemas que generan .EXE directamente, pues ahorra tiempo (permite encontrar errores de ejecucin a la vez que los de compilacin). Recuperacin de errores: slo trata de evitar que el nmero de mensajes de error sea demasiado grande y que el compilador/intrprete pueda seguir ejecutndose correctamente en instrucciones sucesivas.
No hacer nunca los dos ltimos. Deshace la informacin semntica asociada. Ejemplo: tenemos if (...) { x=0; else ... El error se detecta en "else". Solucin posible: aadir "}" delante de "else", analizando if (...) { x=0; } else ...