You are on page 1of 8

AO DEL BUEN SERVICIO AL CIUDADANO

FACULTAD DE INGENIERIA DE SISTEMAS E INFORMATICA


UNIVERSIDAD NACIONAL DE SAN MARTIN

DOCENTE: Ing. Victor A. Avila Tuesta

CURSO: Compiladores

TEMA: Anlisis sintctico descendente

INTEGRANTES:
Romelia Josefina Garcia Rios
Eduardo Renne Arenas SantaMaria
Jose Manuel Diaz Ayala
Antony Will Solsol Soplin
Elder Orlando Culqui Guzman
1. INTRODUCCIN

Este tema est dedicado al mtodo de anlisis sintctico descendente que es


un proceso dentro de la fase de anlisis sintctico de un compilador, se
utilizan, por lo general, en los compiladores. Primero presentaremos los
conceptos bsicos, despus las tcnicas adecuadas para la implementacin
manual y, por ltimo, los algoritmos que se han utilizado en las herramientas
automatizadas.Debido a que los programas pueden contener errores
sintcticos, hablaremos sobre las extensiones de los mtodos de anlisis
sintctico para recuperarse de los errores comunes. Por diseo, cada lenguaje
de programacin tiene reglas precisas, las cuales prescriben la estructura
sintctica de los programas bien formados. Por ejemplo, en C un programa
est compuesto de funciones, una funcin de declaraciones e instrucciones,
una instruccin de expresiones, y as sucesivamente.La sintaxis de las
construcciones de un lenguaje de programacin puede especificarse mediante
gramticas libres de contexto o la notacin B N F (Forma de Backus-Naur). Las
gramticas ofrecen beneficios considerables, tanto para los diseadores de
lenguajes como para los escritores d e compiladores.
a. Resea Histrica.

El formalismo de las gramticas libres de contexto se origin con Chomsky,


como parte de un estudio acerca del lenguaje natural. La idea tambin se
utiliz en la descripcin sintctica de dos de los primeros lenguajes: Fortran
por Backus y Algol 60 por Naur. El erudito Panini ide una notacin
sintctica equivalente para especificar las reglas de la gramtica Sanskrit
entre los aos 400 a.C . y 200 a.C. Cantor y Floyd fueron los primeros que
observaron el fenmeno de la ambigedad.
La Forma Normal de Chomsky proviene de la teora de las gramticas libres
de contexto se resume en el anlisis sintctico de descenso recursivo fue el
mtodo preferido para los primeros compiladores, como , y los sistemas para
escribir compiladores, como META y TMG. Lewis y Stearns introdujeron las
gramticas LL. Una de las primeras tcnicas de anlisis sintctico , que se
debe a Floyd , implica la precedencia de los operadores. Wirth y Weber
generalizaron la idea para las partes del lenguaje que no involucran
operadores. Estas tcnicas se utilizan raras veces hoy en da, pero podemos
verlas como lderes en una cadena de mejoras para el anlisis sintctico LR.
Knuth introdujo los analizadores sintcticos LR , y las tablas de anlisis
sintctico LR cannicas se originaron ah. Este mtodo no se consider
prctico, debido aquellas tablas de anlisis sintctico eran ms grandes que
las memorias principales de las computadoras tpicas de esa poca , hasta
que Korenjak proporcion un mtodo para producir tablas de anlisis
sintctico de un tamao razonable para los lenguajes de programacin
comunes. De Remer de-sarroll los mtodos LALR y SLR que se usan en la
actualidad. La construccin de las tablas de anlisis sintctico LR para las
gramticas ambiguas .
El generador Yacc de Johnson demostr con mucha rapidez la habilidad
prctica de generar analizadores sintcticos con un generador de
analizadores sintcticos LALR para los compila-dores de produccin. El
manual para el generador de analizadores sintcticos Yacc se encuentra en
la versin de cdigo-abierto, Bison . Hay un generador de analiza-dores
sintcticos similar llamado CUP , el cual se basa en LALR y soporta acciones
escritas en Java. Los generadores de analizadores sintcticos descendentes
incluyen a Antlr, un generador de analizadores sintcticos de descenso
recursivo que acepta acciones en C + + , Java o C # , y LLG en ,que es un
generador basado en LL .
b. Planteamiento situacional.

De manera equivalente, podemos considerar el anlisis sintctico


descendente como la bsqueda de una derivacin por la izquierda para una
cadena de entrada.
En cada paso de un anlisis sintctico descendente, el problema clave es el
de determinar la produccin que debe aplicarse para un no terminal, por decir
A . Una vez que se elige una produccin A , el resto del proceso d e anlisis
sintctico consiste en relacionar los smbolos terminales en el cuerpo de la
produccin con la cadena de entrada.

Intenta construir un rbol de anlisis sintctico, empezando desde las hojas


(la cadena) y ascendiendo hacia la raz. Lo que es lo mismo que intentar
obtener una reduccin desde una cadena hasta llegar al axioma.

ANLISIS SINTCTICO DESCENDENTE LL BASADO EN TABLA DE ANLISIS (TAS)


Intenta construir un rbol de anlisis sintctico,
empezando desde la raz y descendiendo hacia
las hojas.Lo que es lo mismo que intentar
obtener una derivacin por la izquierda para
una cadena de entrada,comenzando desde la
raz y creando los nodos del rbol en orden
previo.
L: left to right
t: lee la entrada de izquierda a derecha.
L: left derivation:
produce una derivacin por la izquierda.
2. AN
LISIS
SITUACIO
NAL.
Ventajas de
utilizar un
analizador
sintctico
La
gramtica
proporciona una
especificacin
precisa, fcil de
entender de un
lenguaje de programacin.
A partir de algunas clases de gramticas se puede construir automticamente un
analizador eficiente que determine si un programa fuente est sintcticamente bien
formado.
Los lenguajes evolucionan con el tiempo, adquiriendo nuevas construcciones y
realizando tareas adicionales. Estas nuevas construcciones se pueden aadir con
ms facilidad a un lenguaje cuando existe una aplicacin basada en una descripcin
gramatical.
Una gramtica imparte una estructura a un lenguaje de programacin til para la
traduccin de un programa fuente a cdigo objeto correcto y para la deteccin de
errores.
El proceso de construccin del analizador sintctico puede revelar ambigedades
sintcticas y otras construcciones difciles de analizar que podran pasar sin ser
detectadas en la fase inicial del diseo de un lenguaje y de su compilador..
Una implantacin de un analizador sintctico utilizando tabla requiere un trabajo de anlisis.
Primero tiene que eliminarse la recursin por la izquierda sifuera el caso. Luego tiene que
hallarse los conjuntos PRIMERO y SIGUIENTE. Finalmente tiene que construirse la tabla de
anlisis sintctico TAS.

3. UTILIZACIN DE FODA.
DEBILIDADES:
Problemas de indeterminismo cuando varias alternativas en una misma produccin
comparten el mismo prefijo. No sabramos cul elegir. Probaremos una y si se
produce un error haramos backtracking. Si queremos que el mtodo sea
determinista hay que evitarlas.
Podemos deducir que la coleccin de analizadores sintcticos LR es ms poderosa
que la de los analizadores LL, puesto que existen lenguajes libre del contexto que no
pueden ser analizados por un analizador sintctico LL, aunque s por un analizador
LR
Raras veces se necesita el rastreo hacia atrs para analizar las construcciones de
un lenguaje de programacin, por lo que los analizadores sintcticos con ste no se
ven con frecuencia. Incluso para situaciones como el anlisis sintctico de un
lenguaje natural, el rastreo hacia atrs no es muy eficiente, por lo cual se prefieren
mtodos tabulares como el algoritmo de programacin dinmico.
puede dar lugar a un aumento exponencial en el nmero de caminos a explorar.

FORTALEZA
Los generadores de analizadores sintcticos descendentes incluyen a Antlr , un
generador de analizadores sintcticos de descenso recursivo que acepta acciones
en C++ , Java o C # , y LL Gen , que es un generador basado en LL (1).
La recursividad a izquierdas da lugar a un bucle infinito de recursin
Un conjunto de lenguajes de programacin usaron/usan LL(1): LISP, PHYTON,
JAVASCRIPT.
LL(1) es sencillo:
Rapida implementacion con una tabla.
Es eficiente: parse en O(nf(G)).
Puede implementarse con Descendente Recursivo
una funcin para cada no terminal.
las funciones se llaman en base al token de lookahead
4. CONCLUSIONES.

Una gramtica diseada adecuadamente imparte una estructura a un lenguaje de


programacin til para la traduccin de programas fuente a cdigo objeto correcto y
para la deteccin de errores.
Una gramtica recursiva por la izquierda puede hacer que un analizador sintctico
de descenso recursivo, incluso uno con rastreo hacia atrs, entre en un ciclo infinito.
Los tipos de errores que se pueden encontrar son por una expresin aritmtica o
parntesis no equilibrados.

5. RECOMENDACIONES.

tomar en consideracin que no sirve para todos los casos que uno quiere
realizar.

utilizar el analizador segn para situaciones que lo ameriten porque


existen otros analizadores que poseen una mejor gama.

6. BIBLIOGRAFA
Compiladores(principios,tcnicas y herramientas)2da edicin

Wikipedia: analizador sintctico

anlisis sintctico cap 3

You might also like