Вы находитесь на странице: 1из 8

Tarea final

Anlisis lxico y componentes


El anlisis lxico tambin llamado Scanner. El anlisis lxico es la primera fase del
compilador donde el cual el analizador recibe como entrada el cdigo fuente de otro
programa o archivo y produce una salida de tokens es decir componentes lxicos
significativos para el programa. Estos se guardan para ser luego usado por el analizador
sintctico el cual mira si est bien la estructura del cdigo fuente. El analizador lxico lee
todo el cdigo fuente carcter por carcter y dependiendo de la secuencia de caracteres
seguido de algn delimitador que este guarda la secuencia de caracteres como un token
en una tabla de smbolos vlidos.

Componentes

Lexema: es la secuencia de caracteres analizados que pertenece al lenguaje y que


se les asigna un token dependiendo de su secuencia de caracteres.
Token: es el nombre que identifica a un grupo de lexemas que pertenezcan al
lenguaje, adems de eso se utiliza un identificador numrico para que cuando el
analizador sintctico reciba la tabla se smbolos este compare la secuencia de
identificadores numricos en vez de los nombres de los identificadores.
Patron: El patrn describe el cual debe ser la secuencia de caracteres la cual forma de un
lexema para que este se pueda ser considerando un token aceptado en el lenguaje

Anlisis
Los procesos que el analizador lxico realiza es describir a cada token y guardarlo en un
tabla de smbolo con ayuda de una maquina adems de realizar el escaneo de cada token
el analizador realiza la tarea de la eliminacin de caracteres o secuencia de caracteres no
significativos para el anlisis posterior tales como los espacios, los saltos de lnea,
comentarios, tabulaciones entre otros. Esta etapa est basada usualmente en
una mquina de estados finitos, conocida tambin como autmatas finitos, los cuales
pueden ser autmatas finitos determinista o no deterministas. Esta mquina contiene la
informacin de las posibles secuencias de caracteres que puede conformar cualquier
token que sea parte del lenguaje. Por ejemplo, un token de naturaleza entero puede
contener cualquier secuencia de caracteres numricos, pero al hablar de un decimal
puede contener un secuencia de caracteres numricos seguido de un punto seguido de
otra secuencia de caracteres numricos.

Anlisis sintctico y componentes


Tambin llamado Parser, es una parte del compilador que transforma su entrada en un
rbol de derivacin. El anlisis sintctico convierte el texto de entrada en otras estructuras
(comnmente rboles), que son ms tiles para el posterior anlisis y capturan la
jerarqua implcita de la entrada. Un analizador lxico da una secuencia de caracteres de
entrada y son estos tokens los que son procesados por el analizador sintctico para
construir la estructura de datos, por ejemplo un rbol de anlisis o rboles de sintaxis
abstracta. Para los analizadores sintcticos son usados las gramticas de tipo 2 que son
las gramticas libres de contexto estas gramticas no son las mismas que son utilizadas
por los autmatas finitos que son usados para el anlisis lxico sino que estas son
gramticas que ayudan al para poder subdividir el proceso de reconocimiento de la
variedad de secuencias de tokens los cuales sern validadas si es una estructura valida de
tokens o no.

Componentes

Secuencia de Tokens: Dependiendo de analizador sintctico que se est utilizando

necesitamos una secuencia de tokens para reconocer la estructura del lenguaje y


dependiendo de cmo sea la estructura se ejecutan las instrucciones.
Arbol de derivacin: el rbol de derivacin son las posibles ramas que se remplazan por
valores de entrada y asi se consigue verificar si la estructura del programa corresponde o
no a la definida por el lenguaje.

Tareas
La tarea esencial de un analizador es determinar si una determinada entrada puede ser
derivada desde el smbolo inicial, usando las reglas de una gramtica formal, y como hacer
esto, existen esencialmente dos formas:

Analizador sintctico descendente (Top-Down-Parser): ..un analizador puede empezar con


el smbolo inicial e intentar transformarlo en la entrada, intuitivamente esto sera ir
dividiendo la entrada progresivamente en partes cada vez ms pequeas, de esta forma
funcionan los analizadores LL, un ejemplo es el javaCC.
Analizador sintctico ascendente (Bottom-Up-Parser): un analizador puede empezar con la
entrada e intentar llegar hasta el smbolo inicial, intuitivamente el analizador intenta
encontrar los smbolos ms pequeos y progresivamente construir la jerarqua de
smbolos hasta el inicial, los analizadores LR funcionan as y un ejemplo es el Yacc.

rboles sintcticos
La estructura sintctica de los lenguajes de programacin se especifica mediante
Gramticas Libres de Contexto (GLC). Analizar sintcticamente una cadena de tokens es
encontrar para ella un rbol sintctico, que tenga como raz el smbolo inicial de la GLC y
mediante la aplicacin sucesiva de sus reglas de derivacin se puede alcanzar dicha
cadena como hojas del rbol sintctico.

En principio podemos considerar la estructura de rbol de manera intuitiva como una


estructura jerrquica. Por tanto, para estructurar un conjunto de elementos en rbol,
deberemos escoger uno de ellos
al que llamaremos raz del rbol. Del resto de los
elementos se selecciona un subconjunto ,...,
estableciendo una relacin padre-hijo
entre la raz y cada uno de dichos elementos de manera que es llamado el padre de ,
de ,... y cada uno de ellos es llamado un hijo de .Iterativamente podemos realizar la
misma operacin para cada uno de estos elementos asignando a cada uno de ellos un
nmero de 0 o ms hijos hasta que no tengamos ms elementos que insertar. El nico
elemento que no tiene padre es , la raz del rbol.Por otro lado hay un conjunto de
elementos que no tienen hijos aunque s padre que son llamados hojas. Como hemos visto
la relacin de paternidad es una relacin uno a muchos. El caso bsico es un rbol con un
nico nodo. Lgicamente este nodo es a la vez raz y hoja del rbol.

Operaciones de rboles sintcticos


En una estructura lineal resulta trivial establecer un criterio
de movimiento por la misma para acceder a los elementos,
pero en un rbol esa tarea no resulta tan simple. No
obstante, existen distintos mtodos tiles en que podemos
sistemticamente recorrer todos los nodos de un rbol. Los
tres recorridos ms importantes se denominan preorden,
inorden y postorden aunque hay otros recorridos como es
el recorrido por niveles.
El listado en preorden es:

Si el rbol tiene un nico elemento, dicho elemento es el listado en preorden.


Si el rbol tiene ms de un elemento, es decir, una estructura como muestra la
figura 2, el listado en preorden es listar el nodo raz seguido del listado en
preorden de cada uno de los subrboles hijos de izquierda a derecha.

El listado en inorden es:

Si el rbol tiene un nico elemento, dicho elemento es el listado en inorden.


Si el rbol tiene una estructura como muestra la figura 2,el listado en inorden es
listar el subrbol A1 en inorden, y listar el nodo raz seguido del listado en inorden
de cada uno de los subrboles hijos de izquierda a derecha restantes.

El listado en postorden es:

Si el rbol tiene un nico elemento, dicho elemento es el listado en postorden.


Si el rbol tiene una estructura como muestra la figura 2,el listado en postorden es
listar en postorden cada uno de los subrboles hijos de izquierda a derecha
seguidos por el nodo raz.

El listado por niveles es:


Desde i=0 hasta la altura h del rbol,listar de izquierda a derecha los elementos de
profundidad i.Como podemos observar,un nodo n1 aparece antes que n2 en el listado por
niveles si la profundidad de n1 es menor que la profundidad de n2 usando el orden de los
nodos definido anteriormente para el caso en que tengan la misma profundidad.

Analizadores ascendentes y descendentes


ANLISIS SINTCTICO DESCENDENTE
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:

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
El trabajo del analizador sobre una cadena de gramtica particular. El anlisis consiste de:
Una bfer de entrada, una cadena de gramtica
Una pila sobre la cual se almacenan los smbolos terminales y no-terminales de la
gramtica an sin analizar
Una tabla de anlisis (Bottom-Up-Parser ): un analizador puede empezar con la entrada e
intentar llegar hasta el smbolo inicial, intuitivamente el analizador intenta encontrar los
smbolos ms pequeos y progresivamente construir la jerarqua de smbolos hasta el
inicial, los analizadores LR funcionan as y un ejemplo es el Yacc. Los analizadores
sintcticos LR, tambin conocidos como Parser LR, son un tipo de analizador espara
algunas gramticas libres de contexto. Pertenece a la familia de losanalizadores
ascendentes, ya que construyen el rbol sintctico de las hojas hacia la raz. Utilizan la
tcnica de anlisis por desplazamiento reduccin. Existen tres tipos de parsers LR: SLR (K),
LALR(K) y LR (K) cannico. Un analizador LR consta de:

Un programa conductor
Una entrada
Una salida
Una tabla de anlisis sintctico, compuesta de 2 partes (ACCIN Y GOTO)

Eliminacin de ambigedad, recursividad y factorizacin por la


izquierda.
La recursividad va a implicar:

Algoritmos de reconocimiento ms complejos, que hagan uso de llamadas recursivas o


usen explcitamente una pila, la pila de anlisis sintctico.
La estructura de datos usada para representar la sintaxis del lenguaje ha de ser tambin
recursiva (el rbol de anlisis sintctico), en vez de lineal (caso de un vector de caracteres
para almacenar los lexemas en el analizador lxico)

Ambigedad
Una gramtica es ambigua cuando genera ms de un rbol de derivacin. Para eliminar la
ambigedad se debe reescribir la gramtica.

Recursividad por la Izquierda


Una gramtica es recursiva por la izquierda si tiene un no Terminal A tal que existe una derivacin
A->A para alguna cadena. Es decir por simple observacin podemos identificar.

Factorizacin
La factorizacin si existe una no terminal con unas producciones con el mismo smbolo inicial es
decir un terminal tales como producciones se les agrega una nueva produccin donde el smbolo
repetido es el primero y se pone otro terminal para que este tome la decisin de por cual
produccin ir.

Bibliografa

http://es.wikipedia.org/wiki/Analizador_l%C3%A9xico
http://es.wikipedia.org/wiki/Analizador_sint%C3%A1ctico
http://gramaticas.galeon.com/derivaciones.html#1.
http://sycg.wordpress.com/2010/12/14/analizador-sintactico-ascendente-y-descendente/
http://users.dsic.upv.es/~jsilva/uned/compiladores/Apuntes04.pdf
http://es.scribd.com/doc/45278943/El-analisis-sintactico-descendente-y-ascendente

Вам также может понравиться