You are on page 1of 4

Todo lenguaje de programacin tiene reglas que describen la estructura sintctica de programas bien formados.

En Pascal, por ejemplo, un programa se compone de bloques, un bloque de proposiciones, una proposicin de expresiones, una expresin de componentes lxicos, y as sucesi amente. !e puede describir la sintaxis de las construcciones de los lenguajes de programacin por medio de gramticas de contexto libre o notacin "#$ % "ac&us'#aur $orm(. )as gramticas ofrecen entajas significati as a los dise*adores de lenguajes y a los desarrolladores de compiladores. + )as gramticas son especificaciones sintcticas y precisas de lenguajes de programacin. + , partir de una gramtica se puede generar automticamente un anali-ador sintctico. + El proceso de construccin puede lle ar a descubrir ambig.edades. + /na gramtica proporciona una estructura a un lenguaje de programacin, siendo ms fcil generar cdigo y detectar errores. + Es ms fcil ampliar0modificar el lenguaje si est descrito con una gramtica. )a mayor parte de este tema est dedicada a los mtodos de anlisis sintctico de uso tpico en compiladores. Primero se introducen los conceptos bsicos, despus las tcnicas adecuadas para la aplicacin manual. ,dems como los programas pueden contener errores sintcticos, los mtodos de anlisis sintctico se pueden ampliar para que se recuperen de los errores sintcticos ms frecuentes. 12u es el anali-ador sintctico 3 Es la fase del anali-ador que se encarga de c4equear el texto de entrada en base a una gramtica dada. 5 en caso de que el programa de entrada sea lido, suministra el rbol sintctico que lo reconoce. En teora, se supone que la salida del anali-ador sintctico es alguna representacin del rbol sintctico que reconoce la secuencia de to&ens suministrada por el anali-ador lxico. En la prctica, el anali-ador sintctico tambin 4ace6 + ,cceder a la tabla de smbolos %para 4acer parte del trabajo del anali-ador semntico(. + 74equeo de tipos % del anali-ador semntico(. + 8enerar cdigo intermedio. + 8enerar errores cuando se producen. En definiti a, reali-a casi todas las operaciones de la compilacin. Este mtodo de trabajo da lugar a los mtodos de compilacin dirigidos por sintaxis.

9anejo de errores sintcticos !i un compilador tu iera que procesar slo programas correctos, su dise*o e implantacin se simplificaran muc4o. Pero los programadores a menudo escriben programas incorrectos, y un buen compilador debera ayudar al programador a identificar y locali-ar errores. Es ms, considerar desde el principio el manejo de errores puede simplificar la estructura de un compilador y mejorar su respuesta a los errores. )os errores en la programacin pueden ser de los siguientes tipos6 + )xicos, producidos al escribir mal un identificador, una palabra cla e o un operador. + !intcticos, por una expresin aritmtica o parntesis no equilibrados. + !emnticos, como un operador aplicado a un operando incompatible. + )gicos, puede ser una llamada infinitamente recursi a. El manejo de errores de sintaxis es el ms complicado desde el punto de ista de la creacin de compiladores. #os interesa que cuando el compilador encuentre un error, se recupere y siga buscando errores. Por lo tanto el manejador de errores de un anali-ador sintctico debe tener como objeti os6 + :ndicar los errores de forma clara y precisa. ,clarar el tipo de error y su locali-acin. + ;ecuperarse del error, para poder seguir examinando la entrada. + #o ralenti-ar significati amente la compilacin. /n buen compilador debe 4acerse siempre teniendo tambin en mente los errores que se pueden producir< con ello se consigue6 + !implificar la estructura del compilador. + 9ejorar la respuesta ante los errores. Tenemos arias estrategias para corregir errores, una e- detectados6 + :gnorar el problema %Panic mode (6 7onsiste en ignorar el resto de la entrada 4asta llegar a una condicin de seguridad. /na condicin tal se produce cuando nos encontramos un to&en especial %por ejemplo un =<> o un =E#?>(., partir de este punto se sigue anali-ando normalmente. aux @ aAiB aAiB @ aAjB<

aAjB @ aux< Error id =@> id =A= id =B> id >A= id =B> >@> id >A= id =B> =<> id >A= id =B> =@> id =<> To&en especial, seguimos compilando a partir de l + ;ecuperacin a ni el de frase6 :ntenta recuperar el error una e- descubierto. En el caso anterior, por ejemplo, podra 4aber sido lo suficientemente inteligente como para insertar el to&en =<> . Cay que tener cuidado con este mtodo, pues puede dar lugar a recuperaciones infinitas. + ;eglas de produccin adicionales para el control de errores6 )a gramtica se puede aumentar con las reglas que reconocen los errores ms comunes. En el caso anterior, se podra 4aber puesto algo como6 sentDerrnea E sentDsinDacabar sentenciaDacabada ><> sentenciaDacabada E sentencia =<> sentDsinDacabar E sentencia )o cual nos da mayor control en ciertas circunstancias + 7orreccin 8lobal 6 ?ada una secuencia completa de to&ens a ser reconocida, si 4ay algFn error por el que no se puede reconocer, consiste en encontrar la secuencia completa ms parecida que s se pueda reconocer. Es decir, el anali-ador sintctico le pide toda la secuencia de to&ens al lxico, y lo que 4ace es de ol er lo ms parecido a la cadena de entrada pero sin errores, as como el rbol que lo reconoce. Tipo de gramtica que acepta un anali-ador sintctico #osotros nos centraremos en el anlisis sintctico para lenguajes basados en gramticas formales, ya que de otra forma se 4ace muy difcil la comprensin del compilador, y se pueden corregir, qui-s ms fcilmente, errores de muy difcil locali-acin, como es la ambig.edad en el reconocimiento de ciertas sentencias. )a gramtica que acepta el anali-ador sintctico es una gramtica de contexto libre6 + 8ramtica 6 8 %#, T, P, !( # @ #o terminales. T @ Terminales. P @ ;eglas de Produccin. ! @ ,xioma :nicial. Ejemplo 6 !e considera la gramtica que reconoce las operaciones aritmticas.

GEEEHT IJT KTETL$ MJ$ N $ E :? O J #/9 PJ%E( En el que6 # @ QE, T, $R estn a la i-quierda de la regla. T @ Q:?, #/9, % ,( ,H ,LR P @ !on las siete reglas de produccin. ! @ ,xioma inicial. Podra ser cualquiera, en este caso es E.

Srbol sintctico de una sentencia de un lenguaje Es una representacin que se utili-a para describir el proceso de deri acin de dic4a sentencia. 7omo nodos internos del rbol, se sitFan los elementos no terminales de las reglas de produccin que ayamos aplicando, y tantos 4ijos como smbolos existan en la parte derec4a de dic4as reglas. Teamos un ejemplo6 !ea la gramtica anterior. EEEHTJT TETL$J$ $E%E(JaJb !upongamos que 4ay que reconocer6 % a H b ( L a H b !i el rbol puede construirse, es que la sentencia es correcta6 ,mbig.edad6 /na gramtica es ambigua si deri ando de forma diferente con el mismo tipo de deri acin se llega al mismo resultado.

You might also like