Sunteți pe pagina 1din 21

Asignatura:

5-12-2013

Lenguajes y Autmatas I

Carrera: Ingeniera En Sistemas Computacionales Integrantes Del Equipo: Martin Emmanuel Herrera Zavala. Juan Alfredo Maldonado Alamilla. Manuel Armando Hernndez Moguel. Sergio Ivn Yam Dzul. Semestre: 5 Grupo A Docente: Ing. Antonia Guadalupe Castillo Coronado Investigacin

Contenido
ANALISIS SINTACTICO.................................................................................................................2 GRAMATICA LIBRE DEL CONTEXTO (GLC) ............................................................................3 RBOL DE DERIVACION ..............................................................................................................4 DIAGRAMA DE SINTAXIS .............................................................................................................5 ELIMINACIN DE LA AMBIGEDAD ..........................................................................................6 AMBIGEDAD:................................................................................................................................6 TIPOS DE AMBIGEDAD: ............................................................................................................6 AMBIGEDAD INHERENTE: ........................................................................................................7 AMBIGEDAD TRANSITORIA: ....................................................................................................7 GENERACIN DE MATRIZ PREDICTIVA (CLCULO FIRST Y FOLLOW) .........................8 TIPOS DE ANALIZADORES SINTCTICOS ..............................................................................9 ANALIZADOR SINTCTICO ASCENDENTE .............................................................................9 CARCTERISTICAS ......................................................................................................................9 ANLISIS SINTCTICO DESCENDENTE CON RETROCESO. ...........................................11 ANLISIS SINTCTICO DESCENDENTE PREDICTIVO (ASDP) ........................................11 ANALIZADOR SINTCTICO ASCENDENTE ...........................................................................12 MANEJO DE ERRORES ..............................................................................................................14 GENERADOR DE ANALIZADOR SINTCTICO ......................................................................16 CONCLUSIONES ..........................................................................................................................17 BIBLIOGRAFAS: ..........................................................................................................................20

ANALISIS SINTACTICO
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 sucesivamente. Se puede describir la sintaxis de las construcciones de los lenguajes de programacin por medio de gramticas de contexto libre o notacin BNF ( Backus-Naur Form). Las gramticas ofrecen ventajas significativas a los diseadores de lenguajes y a los desarrolladores de compiladores. Las gramticas son especificaciones sintcticas y precisas de lenguajes de programacin. A partir de una gramtica se puede generar automticamente un analizador sintctico. El proceso de construccin puede llevar a descubrir ambigedades. Una gramtica proporciona una estructura a un lenguaje de programacin, siendo ms fcil generar cdigo y detectar errores. Es ms fcil ampliar/modificar el lenguaje si est descrito con una gramtica. La 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. Adems 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.

GRAMATICA LIBRE DEL CONTEXTO (GLC)


Estas gramticas, conocidas tambin como gramticas de tipo 2 o gramticas independientes del contexto, son las que generan los lenguajes libres o independientes del contexto. Los lenguajes libres del contexto son aquellos que pueden ser reconocidos por un autmata de pila determinstico o no determinstico. Como toda gramtica se definen mediante una cudrupla G = (N, T, P, S), siendo - N es un conjunto finito de smbolos no terminales - T es un conjunto finito de smbolos terminales - P es un conjunto finito de producciones - S es el smbolo distinguido o axioma En una gramtica libre del contexto, cada produccin de P tiene la forma

Es decir, que en el lado izquierdo de una produccin pueden aparecer el smbolo distinguido o un smbolo no terminal y en el lado derecho de una produccin cualquier cadena de smbolos terminales y/o no terminales de longitud mayor o igual que 1. La gram quiere generar contiene la cadena vaca.

Los ejemplos mostrados a continuacin corresponden a los lenguajes libres del contexto que fueron introducidos en los ejemplos 1, 2 y 3 del apunte de autmatas de pila.

La siguiente gramtica genera las cadenas del lenguaje Contiene las siguientes producciones
3

RBOL DE DERIVACION
Un rbol de derivacin permite mostrar grficamente cmo se puede derivar cualquier cadena de un lenguaje a partir del smbolo distinguido de una gramtica que genera ese lenguaje. Un rbol es un conjunto de puntos, llamados nodos, unidos por lneas, llamadas arcos. Un arco conecta dos nodos distintos. Para ser un rbol un conjunto de nodos y arcos debe satisfacer ciertas propiedades: - hay un nico nodo distinguido, llamado raz (se dibuja en la parte superior) que no tiene arcos incidentes. - todo nodo c excepto el nodo raz est conectado con un arco a otro nodo k, llamado el padre de c (c es el hijo de k). El padre de un nodo, se dibuja por encima del nodo. - todos los nodos estn conectados al nodo raz mediante un nico camino. - los nodos que no tienen hijos se denominan hojas, el resto de los nodos se denominan nodos interiores. El rbol de derivacin tiene las siguientes propiedades: - el nodo raz est rotulado con el smbolo distinguido de la gramtica; - cada hoja corresponde a un smbolo terminal o un smbolo no terminal; - cada nodo interior corresponde a un smbolo no terminal.

Para cada cadena del lenguaje generado por una gramtica es posible construir (al menos) un rbol de derivacin, en el cual cada hoja tiene como rtulo uno de los smbolos de la cadena.

DIAGRAMA DE SINTAXIS
Los diagramas de sintaxis son grafos dirigidos donde los elementos no terminales de la gramtica aparecen como rectngulos y los terminales como crculos o elipses.Todo diagrama de sintaxis se supone que tiene un origen y un destino aunque no se dibujan. Correspondencia entre la notacin BNF y los diagramas de sintaxis.

ELIMINACIN DE LA AMBIGEDAD

Una gramtica ambigua permite ms de una derivacin para la misma forma de sentencia por lo que tambin habr ms de un [rbol de derivacin] para la misma. Por ello basta con encontrar dos [rboles derivacin] distintos para la misma forma de sentencia para demostrar que una gramtica es ambigua.

A continuacin se presentan conceptos importantes dentro del estudio de las caractersticas de las gramticas:

AMBIGEDAD:
Sea G = { N , T , P , S } una gramtica libre de contexto y sea L(G) el lenguaje generado por esa gramtica.

Si existe un string w (donde w oe L(G) ) para el cual existen dos ms formas de realizar la derivacin de ms a la izquierda (S w) existen dos ms formas de realizar la derivacin de ms a la derecha (S w), entonces se dice que: G es una gramtica ambigua.

TIPOS DE AMBIGEDAD:
Dentro del estudio de gramticas existen dos tipos fundamentales de ambigedad, los cuales son:

AMBIGEDAD INHERENTE:
Las gramticas que presentan este tipo de ambigedad no pueden utilizarse para lenguajes de programacin, ya que por ms transformaciones que se realicen sobre ellas, NUNCA se podr eliminar completamente la ambigedad que presentan.

AMBIGEDAD TRANSITORIA:
Este tipo de ambigedad puede llegar a ser eliminada realizando una serie de transformaciones sobre la gramtica original. Una vez que se logra lo anterior, la gramtica queda lista para ser reconocida por la mayor parte de los analizadores sintcticos. (Se le considera "ambigedad" porque existen mtodos para realizar anlisis sintctico que no aceptan gramticas con estas caractersticas)

Dnde se presenta la Ambigedad Transitoria:

Generalmente la ambigedad se presenta cuando existen producciones con factores comunes (distintas alternativas para un smbolo no-terminal que inician de la misma forma); cuando existen producciones que son recursivas izquierdas (producciones para un smbolo no-terminal en las cuales el primer smbolo de su forma sentencia es ese mismo smbolo no-terminal).

GENERACIN DE MATRIZ PREDICTIVA (CLCULO FIRST Y FOLLOW)

FIRST: Sea G := (V; ; Q0; P) una gramtica libre de contexto. Para cada forma sentencial (V U )* y para cada k N definiremos la funcin.

En otras palabras, el operador F IRST k asocia a cada forma sentencial los primeros k smbolos de cualquier forma terminal alcanzable desde mediante derivaciones masa la izquierda".

FOLLOW: Con las mismas notaciones anteriores, para cada forma de sentencia (V U )* definiremos la funcin FOLLOWG GK () del modo siguiente.

De nuevo nos ocuparemos solamente de FOLLOW: = FOLLOW1. Obsrvese que FOLLOW k () * y que para cada x FOLLOW (), Ixl k. Obsrvese que para cada variable A V, FOLLOW(A) son todos los smbolos terminales que pueden aparecer a la derecha de A en alguna forma de sentencia de la gramtica.
8

TIPOS DE ANALIZADORES SINTCTICOS ANALIZADOR SINTCTICO ASCENDENTE


En ste analizador las entradas son de izquierda a derecha, y construcciones de derivaciones por la izquierda de una sentencia o enunciado.

CARCTERISTICAS
El anlisis sintctico descendente (ASD) intenta encontrar entre las producciones de la gramtica la derivacin por la izquierda del smbolo inicial para una cadena de entrada. Parte del axioma de la gramtica. Procesa la entrada de izquierda a derecha. Escoge reglas gramaticales. Bueno primeramente para trabajar el anlisis sintctico descendente se debe realizar primeramente algunas operaciones para que la gramtica sea LL1 las cuales son:

ELIMINAR AMBIGUEDAD: Para eliminar la ambigedad se debe reescribir la gramtica.

ELIMINAR RECURSIVIDAD POR LA IZQUIERDA: Una gramtica es recursiva por la izquierda si tiene un nodo Terminal a tal que existe una derivacin A->A para alguna cadena . Es decir por simple observacin podemos identificar.

Para eliminar la recursividad por la izquierda se utiliza la siguiente formula.

Factorizar: Se trata de rescribir las producciones de la gramtica con igual comienzo para retrasar la decisin hasta haber visto lo suficiente de la entrada como para elegir la opcin correcta.

Ejemplo:

10

ANLISIS SINTCTICO DESCENDENTE CON RETROCESO.


El mtodo parte del axioma inicial y aplica todas las posibles reglas al no terminal ms a la izquierda. Se usa el retroceso para resolver la incertidumbre.Sencillo de implementar. Muy eficiente. Ejemplo:

ANLISIS SINTCTICO DESCENDENTE PREDICTIVO (ASDP)


El analizador debe realizar la previsin de la regla a aplicar slo con ver el primer smbolo que produce para que el algoritmo tenga una complejidad lineal. Las gramticas que son susceptibles de ser analizadas sintcticamente de forma descendente mediante un anlisis predictivo y consultando un nicamente un smbolo de entrada pertenecen al grupo LL(1). A partir de gramticas LL(1) se pueden construir analizadores sintcticos descendentes predictivos (ASDP), que son ASD sin retroceso.

11

Ejemplo:

ANALIZADOR SINTCTICO ASCENDENTE


El objetivo de un anlisis ascendente consiste en construir el rbol sintctico desde abajo hacia arriba, esto es, desde los tokens hacia el axioma inicial, lo cual disminuye el nmero de reglas mal aplicadas con respecto al caso descendente (si hablamos del caso con retroceso) o ampla el nmero de gramticas susceptibles de ser analizadas (si hablamos del caso LL(1)). Anlisis ascendente con retroceso Al igual que ocurra con el caso descendente, este tipo de anlisis intenta probar todas las posibles operaciones (reducciones y desplazamientos) mediante un mtodo de fuerza bruta, hasta llegar al rbol sintctico, o bien agotar todas las opciones, en cuyo caso la cadena se rechaza. En el anlisis con retroceso no se permiten las reglas , puesto que estas se podrn aplicar de forma indefinida. Anlisis Ascendente sin Retroceso El anlisis ascendente sin retroceso busca una derivacin derecha de la cadena de entrada de forma determinista. Este se sustenta en su aplicacin a las gramticas LR(K). La L viene de la lectura de la cadena de entrada de izquierda a derecha. La R de producir un rbol de derivacin derecho.

12

La k indica el nmero de smbolos que es necesario leer a la entrada para tomar la decisin de qu produccin emplear. Un parser del tipo shift-reduce puede verse como un autmata de pila determinista extendido que realiza el anlisis de abajo hacia arriba. Dada una cadena de entrada w, simula una derivacin ms a la derecha.

Cul es su diferencia? En el anlisis sintctico descendente: se construye el rbol sintctico arriba hacia abajo y se utiliza ms reglas. En el anlisis sintctico ascendente: se construye el rbol sintctico de abajo hacia arriba, lo cual disminuye el nmero de reglas mal aplicadas con respecto al caso descendente.

13

MANEJO DE ERRORES
Si un compilador tuviera que procesar slo programas correctos, su diseo e implantacin se simplificaran mucho. Pero los programadores a menudo escriben programas incorrectos, y un buen compilador debera ayudar al programador a identificar y localizar 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. Los errores en la programacin pueden ser de los siguientes tipos: Lxicos, producidos al escribir mal un identificador, una palabra clave o un operador. Sintcticos, por una expresin aritmtica o parntesis no equilibrados. Semnticos, como un operador aplicado a un operando incompatible. Lgicos, puede ser una llamada infinitamente recursiva. El manejo de errores de sintaxis es el ms complicado desde el punto de vista de la creacin de compiladores. Nos interesa que cuando el compilador encuentre un error, se recupere y siga buscando errores. Por lo tanto el manejador de errores de un analizador sintctico debe tener como objetivos: Indicar los errores de forma clara y precisa. Aclarar el tipo de error y su localizacin. Recuperarse del error, para poder seguir examinando la entrada. No ralentizar significativamente la compilacin. Un buen compilador debe hacerse siempre teniendo tambin en mente los errores que se pueden producir; con ello se consigue: Simplificar la estructura del compilador. Mejorar la respuesta ante los errores. Tenemos varias estrategias para corregir errores, una vez detectados: Ignorar el problema (Panic mode ) : Consiste en ignorar el resto de la entrada hasta llegar a una condicin de seguridad. Una condicin tal se produce cuando nos

14

encontramos un token especial (por ejemplo un ; o un END).A partir de este punto se sigue analizando normalmente. Ejemplo:

Recuperacin a nivel de frase: Intenta recuperar el error una vez descubierto. En el caso anterior, por ejemplo, podra haber sido lo suficientemente inteligente como para insertar el t oken ; . Hay que tener cuidado con este mtodo, pues puede dar lugar a recuperaciones infinitas. Reglas de produccin adicionales para el control de errores: La gramtica se puede aumentar con las reglas que reconocen los errores ms comunes. En el caso anterior, se podra haber puesto algo como:

Lo cual nos da mayor control en ciertas circunstancias Correccin Global: Dada una secuencia completa de tokens a ser reconocida, si hay algn error por el que no se puede reconocer, consiste en encontrar la secuencia completa ms parecida que s se pueda reconocer. Es decir, el analizador sintctico le pide toda la secuencia de tokens al lxico, y lo que hace es devolver lo ms parecido a la cadena de entrada pero sin errores, as como el rbol que lo reconoce.
15

GENERADOR DE ANALIZADOR SINTCTICO


Ascendente

Descendentes

16

CONCLUSIONES
SERGIO IVN YAM DZUL A lo largo del curso hemos conocido y analizados trminos aplicables a los compiladores e intrpretes, los cuales nos permiten traducir o trasladar un lenguaje de programacin a un lenguaje de la computadora. Durante el procedimiento se han detallado las etapas y los componentes que interviene, as como tambin se han presentado elementos que interactan tal como lo hacen las reglas idiomticas, procurando una sintaxis adecuada y respetando reglas sintcticas. Observando a cada elemento por separado y luego analizando su integracin. De esta manera podemos entender el proceso interno para traduccin del lenguajes, as tambin es posible obtener por fuera de un editor, es decir usar una aplicacin como el JLEX en basic. En ltima instancia observamos diversas tcnicas para la implementacin y/o creacin de los autmatas, en los cuales se observaron sus caractersticas y funcionamiento. Se comprendi la manera en la que estos tratan a los errores y as como tambin se informa a la usuario, clasificando los errores (en opinin personal) de sintaxis y lgicos, los primeros corresponden a errores de escritura por parte del programador quien por omisin o descuido olvido agregar un componente de la sintaxis, el segundo igual por error del programador que ha utilizado de manera inadecuada las herramientas del lenguaje. Los compiladores debern analizar el componente faltante y ubicar su posicin exacta dndole al programador una muy clara descripcin del error, mencionado que el pasado esto no era posible pues si un error se origina el programador deba revisar lnea por linar hasta hallar el error. Estas herramientas han proporcionado al programador un elemento de suma vala para su efectuar su trabajo, y esto puede derivar en crear lenguajes y aplicacin ms potentes y avanzadas
17

MANUEL ARMANDO HERNANDEZ MOGUEL En conclusin tenemos que mientras estuvimos viendo la materia de lenguajes y autmatas hemos aprendido y entendido cuales son las funciones que realiza un compilador ya que vimos cmo se van ligando con sus procesos y funciones en el lenguaje de programacin que se tengo o utilice. Ahora sabemos igual como poder reconocer los errores que se tiene en la gramtica del GLC que tiene un rbol de derivacin y que pueden hacerse de esta misma forma(rbol) igual vimos el tipo de gramtica llamada ambigua que es la que se obtiene de ms de un rbol de derivacin y de varias maneras ms. Al igual ya sabemos que tenemos que tener cuidado porque no existe ningn tipo de manera de saber mediante un software si un algoritmo es ambiguo o no pero aun as existen tcnicas para saber si tenemos ambigedad o no en nuestra gramtica Tambin vimos cmo crear un lenguaje de programacin y si nuestros arboles tiene alguna ambigedad etc. Y as poder corregirla.

MARTIN EMMANUEL HERRERA ZAVALA Tras concluir con esta unidad podemos decir que el tema de los analizadores sintcticos, analizadores lxicos, entre otros son partes fundamentales dentro de lo compiladores de lenguaje o bien dicho, dentro de los programas que nos permiten realizar aplicaciones mediante lenguajes de programacin, ay que permiten detectar la sintaxis que hemos creado y si por alguna razn existe un error dentro de la gramtica, este nos avisa y a su vez no permite detectar y sealar en donde se encuentra el error, bien ahora se puede observar desde otro punto de vista los proceso que se realizan tras compilar un lenguaje de programacin en una aplicacin que nos permite desarrollar software. De igual manera tras haber Tambin podemos saber que no hay manera de detectar si algn algoritmo que nosotros creemos pueda ser ambiguo, aunque existen algunas tcnicas para saber si existe la ambigedad dentro de nuestra gramtica.
18

JUAN ALFREDO MALDONADO ALAMILLA Durante el transcurso de la materia de autmatas vimos temas relacionados a las bases para poder crear o poder entender lo que hace un compilador e interprete en alguna plataforma de programacin. Hemos visto los procesos que hace una pequea porcin de programa que en conjunto hacen el trabajo del compilador y esta parte no es visible al programador. En esta unidad vimos como poder reconocer los errores de gramtica a travs del GLC (gramticas libres de contexto) que tiene como conceptos el rbol de derivacin que nos dice que las derivaciones pueden hacerse de forma de rbol, la gramtica ambigua (w se denomina ambigua si puede obtenerse por ms de un rbol de derivacin), entre otros. La ambigedad es muy importante ya que si la gramtica presenta alguna ambigedad puede no ser apto para usarse en algn lenguaje de programacin dependiendo del tipo de ambigedad que tenga. No existe ningn algoritmo que nos indique si un GLC es ambiguo por lo que hay que tener cuidado con este punto. Para las construcciones de los lenguajes de programacin comunes existen tcnicas para la eliminacin de la ambigedad. Para concluir en esta unidad, vimos las formas de cmo crear un lenguaje de programacin, tanto como detectar si los arboles presentan alguna ambigedad y como poder corregirla para poder implementarlo en un lenguaje de programacin que se quiera crear, esto complementa las dems unidades ya que en las anteriores vimos cmo se conforma y como trabaja el compilador y el intrprete y estos elementos a su vez pertenecen a un lenguaje de programacin.

19

BIBLIOGRAFAS:
http://www.lcc.uma.es/~galvez/ftp/tci/tictema3.pdf http://www.dia.fi.upm.es/~jgarcia/it/MaterialDidactico_ficheros/Practicas/FormasNo rmales.pdf http://www.exa.unicen.edu.ar/catedras/ccomp1/Apunte5.pdf http://sycg.wordpress.com/2010/12/14/analizador-sintactico-ascendente-ydescendente/ http://www.giaa.inf.uc3m.es/docencia/ITIG/sintactico.pdf

20

S-ar putea să vă placă și