Sie sind auf Seite 1von 12

Repblica Bolivariana de Venezuela

Ministerio de Educacin Superior


Seccin II Ingeniera en Informtica



















Autores






Guatire, 12 de Septiembre de 2014

Introduccin


Los rboles sintcticos en la prctica son realmente difciles de construir porque ocuparan
mucho espacio. Alternativamente se usan pilas.

En la Pila se guarda informacin sobre los nodos delrbol sintctico relevantes en cada fase
del proceso.Teora Lenguajesrbol sintctico relevantes en cada fase del proceso.Para el
caso descendente: en la pila se guardan losnodos no expandidos.

El analizador sintctico recibe una secuencia de tokens y decide si la secuencia est
correcta o no.Los analizadores ms usados estn basados en un anlisis que puede ser
descendente o ascendente. Para realizar este anlisis se deben construir los rboles
sintcticos (derivacin).rboles sintcticos (derivacin).Dificultad: Bsqueda de la regla a
aplicar, esto se efecta analizando la cadena de entrada de izquierda a derecha.Los
analizadores sintcticos ms eficientes se basan en gramticas LL y LR.











Anlisis Lexicogrfico
El analizador lexicogrfico, o explorador, es la parte del compilador que lee el programa
fuente, carcter a carcter, y construye a partir de ste unas entidades primarias llamadas
tokens. Es decir, el analizador lexicogrfico transforma el programa fuente en tiras de
tokens.

Funciones de analizador lexicogrfico
Funcin principal del analizador lxico
Leer los caracteres de entrada y elaborar como salida una secuencia de componentes
lxicos que utiliza el analizador sintctico para hacer el anlisis.
Funciones secundarias.
Eliminar del programa fuente comentarios y espacios en blanco (caracteres de
espacio en blanco, caracteres TAB, caracteres de nueva lnea).

Relacionar los mensajes de error con el lenguaje fuente.
En otras palabras, las funciones del analizador lxico-grfico son:
- Eliminacin de espacios en blanco
- Reconocimiento de identificadores y palabras clave
- Reconocimiento de constantes
- Mejorar la portabilidad del compilador

Fichas y lexemas:
El analizador lexicogrfico puede tener la siguiente estructura.
El analizador lxico opera bajo peticin del analizador sintctico con el fin de que este
pueda avanzar en la gramtica. Tiene como propsito agrupar las expresiones en fichas.
Estas fichas estn compuestas por 3 elementos: Componentes Lxicos (Token), Lexemas,
Patrones
Componente lxico (token): Son las unidades lgicas que genera el analizador lxico. Es el
conjunto de cadenas de entrada que produce como salida el mismo componente lxico.
Cada token es una secuencia de caracteres que representa una unidad de informacin en el
programa fuente.

Los componentes lxicos ms comunes son los siguientes:
- palabras clave o reservadas
- operadores aritmticos
- operadores relacionales
- operadores lgicos
- operador de asignacin
- identificadores
- constantes
- cadenas
- literales
- signos de puntuacin
- libreras

Lexema: Representan cadenas de caracteres en el programa fuente que se pueden tratar
juntos como una unidad lxica. Un lexema es una secuencia de caracteres en el programa
fuente con la que concuerda el patrn para un componente lxico.

Patrn: Regla que describe el conjunto de lexemas que pueden representar a un
determinado componente lxico en los programas fuente.

Atributos de los componentes lxicos: El analizador lxico recoge informacin sobre los
componentes lxicos en sus atributos asociados. Los componentes lxicos influyen en las
decisiones del anlisis sintctico y los atributos en la traduccin de los componentes
lxicos.

Errores de Patrones
Si los compiladores tuvieran que procesar solamente programas correctos, su diseo e
implementacin se simplificara en buena medida. Pero los programadores escriben
programas incorrectos frecuentemente, y un buen compilador debe ayudar al programador a
localizar e identificar los errores. Los errores en un programa pueden clasificarse en 4
grandes grupos:
- lexicolgicos (escribir mal un nmero, un smbolo no permitido, etc.)
- sintcticos (expresin aritmtica con parntesis no balanceados)
- semnticos (aplicar un operador a un operando incompatible)
- lgicos o de programacin (ciclo infinito)
El analizador lxico detecta errores cuando los caracteres que restan de la entrada no
forman ningn token vlido en el lenguaje. Los errores referentes a que los tokens no
cumplan con las reglas estructurales (sintaxis) del lenguaje se detectan en la fase de anlisis
sintctico. Durante el anlisis semntico el compilador trata de detectar estructuras que
tengan una sintaxis correcta pero incorrecta semnticamente de acuerdo a las operaciones
involucradas.
Ejemplo si tratamos de sumar dos identificadores, uno el nombre de un arreglo y el
otro el nombre de un procedimiento. Las fases de anlisis sintctico y semntico
manejan usualmente la mayor parte de los errores detectables por el compilador.
Como podemos apreciar en cada fase del proceso de compilacin se pueden
encontrar errores. Sin embargo, despus de detectado el error, la fase puede tratar el
error, de manera que el compilador pueda continuar, permitiendo as que se puedan
detectar errores posteriores.
Un compilador que se detenga cuando encuentre el primer error no es muy eficaz. El
tratamiento de los errores durante el proceso de compilacin (en cualquiera de sus fases)
debe cumplir al menos los requisitos siguientes:
- reportar la presencia de los errores clara y precisamente
- recuperarse de los errores lo suficientemente rpido como para ser capaz
de detectar los errores siguientes
- no demorar significativamente el procesamiento de los programas
correctos.

Expresiones regulares
Las expresiones regulares son una serie de caracteres que forman un patrn, normalmente
representativo de otro grupo de carcter mayor, de tal forma que podemos comparar el
patrn con otro conjunto de caracteres para ver las coincidencias.

Las expresiones regulares estn disponibles en casi cualquier lenguaje de programacin,
aunque su sintaxis es relativamente uniforme, cada lenguaje usa su propio dialecto.

El poder de las expresiones regulares radica precisamente en la flexibilidad de los patrones,
que pueden ser confrontados con cualquier palabra o cadena de texto que tenga una
estructura conocida.

De hecho normalmente no es necesario usar funciones de expresiones regulares si vamos a
usar patrones literales. Existen otras funciones (las funciones de cadena) que trabajan ms
eficaz y rpidamente con literales.
Mtodo de Thompson
El mismo se crea en honor a Kenneth Lane Thompson, pionero en el desarrollo de sistemas
operativos y procesadores. Diseador y colaborador del Sistema Operativo Unix, Lenguaje Bon,B,C.
El algoritmo se construye a partir de expresiones regulares un diagrama de AFN, para luego
poder generar un AFD mnimo equivalente. Utiliza una notacin estndar para generar un AFN

Para la representacin de una cadena vaca se utiliza el smbolo






Para representar un smbolo, se utilizan dos estados y una transicin para el movimiento con el
smbolo rs




Para la eleccin de alternativas, crear transicionespara launin de las transiciones




Eleccin de Alternativa
Para la cerradura Positiva, se agregan transicionespararetornar al estado previo, permitiendo
agregar 1 oms veces el smbolo




Cerradura de Kleene
Para la cerradura de Kleene, se agregan transiciones para retornar a estado previo. Y otra
transicinparasaltar la transicin con r

r*



UNIDAD V: 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)).

Gramticas LL (k): Es un mtodo predictivo, no recursivo. Suele dar buenos
resultados en aplicaciones pequeas (shells, compiladores de pequeos lenguajes, etc.)
donde precedencia simple no resulta suficiente.

El mtodo de funcionamiento es independiente del lenguaje. Al variar este solo variarla la
tabla. Como ya hemos comentado alguna vez, las casillas en blanco de la tabla suponen
acciones semnticas, errores. Veremos en seguida su estructura y como se construye.

Conjuntos First (k): Definicin de firstkpara unagramtica gsea una cfg g = <n, ,
s, p >, k n (n)*se define first k: ( n ) * kfirstk() = {w */ |w <= k
*w }dnde:es alguna forma sentencia generada por g. El resultado es el conjunto de
terminales de longitud, a lo sumo k, con que pueden comenzar las cadenas derivadas de
Propiedades de los conjuntos firstk()sicomienza con un terminalx,entonces:zfirst1() =
{x} .zsi*, entoncesfirst k () z firstk() = {}


Condicin LL (k):Smbolos directores, ayudan a decidir qu regla utilizar en cada paso
Condiciones necesarias para ser LL(1)

- No ambigua

- Factorizada por la izquierda

- No recursiva a izquierdas

Se dice que una gramtica cumple la condicin LL(1)si para cada par de reglas de la
gramtica que tengan el mismo antecedente la interseccin de sus smbolos directores es
vaca. Es decir, Si se tienen las producciones del no terminal A:
A o1|o2|.....|o
Nse debe cumplir que 1.
PRIM(oi) PRIM(oj)=Ci =j oieE*2.Si e
PIM(oj)entoncesPRIM(oi) SIG(A)=Ci =j


Eliminacin de la Recursin a la Izquierda
Para eliminar la recursividad por la izquierda lo que haremos ser:
Si tenemos A->Aa1|Aa2|...|Aap|b1|b2|...|bq podemos escribirlo como

A->Aai 1<=i<=p
A->bj 1<=j<=q
Para quitar la recursividad por la izquierda escribimos
A->biA' 1<=i<=q, A' nuevo smbolo e Te
A'->ajA'|l 1<=j<=p


Anlisis recursivo descendente: Esta es la fase en la construccin del analizador
donde la fase de anlisis es sintctico. Esta toma como entrada el flujo de terminales y
construye como salida el rbol de anlisis sintctico abstracto.
El rbol de anlisis sintctico abstracto es una representacin compactada del rbol de
anlisis sintctico concreto que contiene la misma informacin que ste.
Existen diferentes mtodos de anlisis sintctico. La mayora caen en una de dos categoras:
ascendentes y descendentes. Los ascendentes construyen el rbol desde las hojas hacia la
raz. Los descendentes lo hacen en modo inverso. El que describiremos aqu es uno de los
ms sencillos: se denomina mtodo de anlisis predictivo descendente recursivo.

Analizador predictivo no recursivo:Es posible construir un analizador sintctico
predictivo no recursivo (APNR) manteniendo una pilapara no usar la recursividad.Estos
analizadores buscan la produccin a usar dentro de una tabla de anlisis sintctico. Dentro
de una tabla de anlisis sintctico.Tambin se conocen como analizadores sintcticos
dirigidos por tablas.Un mtodo descendente dirigido por tablas es el mtodo que se basa en
gramticas LL(1)

Algoritmos de Anlisis predictivo:Anlisis descendente recursivo (ARD)Mtodo
descendente en el que se ejecuta un conjunto de mtodos recursivos para procesar la
entrada.A cada no terminal de la gramtica se asocia un mtodo.La secuencia de mtodos
llamados durante elprocesamiento de la entrada define implcitamente unTeora
Lenguajesprocesamiento de la entrada define implcitamente unrbol de anlisis sintctico.
Adicionalmente se tiene:Un mtodo de tratamiento de error Un mtodo de lectura de un
smbolo de entrada (lxico)
Una forma eficiente de un analizador sintctico descendente sin retroceso es el denominado
Analizador sintctico predictivo.Preliminar:
Dado un smbolo de entrada ay el no terminal A con Teora Lenguajes6Dado un smbolo de
entrada ay el no terminal A con la siguiente produccin:A 1
2 3 . . . nes necesario conocer la nica alternativa que
comienzacon el smbolo a

UNIDAD VI: Anlisis Descendente
El anlisis sintctico descendente es una tcnica de anlisis sintctico que intenta
comprobar si una cadena x pertenece al lenguaje definido por una gramtica L(G)
aplicando los siguientes criterios:
Partir del axioma de la gramtica
Escoger reglas gramaticales estratgicamente
Hacer derivaciones por la izquierda (LeftMostDerivation)
Procesar la entrada de izquierda a derecha
Obtener el rbol de anlisis sintctico o error

Implementacin por pila de un analizador corrimientos-reduccin: En el rea
de los lenguajes formales, un analizador de sintaxis por precedencia simple es un tipo de
analizador sintcticoascendente para gramticas libres de contexto que pueden ser
utilizados para reconocer gramticas de precedencia simple.
La implementacin del parser es bastante similar al analizador sintctico ascendente
genrico. Una pila es utilizada para almacenar el prefijo viable de una forma sentencial de
una derivacin ms a la derecha. Los smbolos , y son utilizados para identificar el
pivote, por lo tanto sabremos cuando Desplazar o cuando Reducir.

Prefijos viables:Son los posibles contenidos de la pilapara cada regla de la
gramtica:Hemos de decidir cundo convieneusarla para reducir m, es decir, y sabiendolo
que hay en la pila",y sabiendo cual es el prximo smbolo de la entrada,saber si hemos de
reducir por esa regla o no.Consideramos un paso intermedio de la derivacin derecha: que
esnecesario conocer para saber cul fue el paso anterior

Gramticas LR (k):Este tipo de analizadores recibe este nombre por lo siguiente: la
L hace referencia a qu el examen de la entrada se realiza de izquierda a derecha; la R se
debe a que las reconstrucciones en orden inverso nos llevan a derivaciones por la derecha y
la K, como ya imaginamos, es por el nmero de smbolos de anticipacin que se necesitan
para una correcta toma de decisiones.

Mtodo SLR: La condicin que impone el anlisis LR(0), como ya hemos dicho, es
muy restrictiva, ya que los tems completos han de aparecer en conjuntos separados. Esto
no se cumple en la mayora de las gramticas que describen lenguajes de programacin. Sin
embargo existe una forma sencilla de ampliar la aplicacin de sta a una gama ms amplia
de gramticas, mediante la lectura de un smbolo en la entrada para determinar la funcin a
realizar.
Cuando una mquina de reconocimiento LR est en un determinado estado, el conjunto de
tems vlidos para la subcadena que se encuentra en la pila en ese momento es
precisamente el conjunto de la coleccin asociado a dicho estado. Si en este conjunto
aparece un tem completo y otro tem ms (ya sea completo o no), se produce un conflicto
en el anlisis LR(0), ya que no podemos decidir qu accin realizar.
El caso del anlisis de la cadena tas. (t,a,s pertenecen a T, que en un momento
determinado del anlisis, y tras leer la subcadena t, tendremos en la pila una subcadena
viable , quedando por leer an la subcadena as. Esto nos indica que as es una forma
sentencial del lenguaje. Supongamos tambin que existe un tem completo vlido asociado
a esta subcadena viable, de la forma [A -> ]. Tras efectuar la reduccin correspondiente
obtendramos la tira Aas, que debe ser una forma sentencial de nuestro lenguaje. Es
evidente que una condicin necesaria para que esto suceda es que el smbolo a pueda
aparecer a la derecha de A en alguna forma sentencial. Es decir, que a pertenezca al
conjunto SIGUIENTE(A), tal y como se defini en el apartado dedicado al anlisis LL(1).
Bibliografa:
http://www.google.co.ve/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB0QFj
AA&url=http%3A%2F%2Fwww.dirinfo.unsl.edu.ar%2Fcompi%2Forganizacion%2Fproco
m02.doc&ei=cMkRVK6vFYHLgwTNhYG4Dg&usg=AFQjCNERfazPR6QnMdnx0Px9V
QV4HtUYQg

http://www.dirinfo.unsl.edu.ar/compi/teorias/as-2010.pdf

http://ocw.unican.es/ensenanzas-tecnicas/teoria-de-automatas-y-lenguajes-
formales/material-de-clase-nuevo/nuevo/4-6LL%28K%29_II.pdf

http://nereida.deioc.ull.es/~pl/perlexamples/node84.html
http://www.educaunica.galeon.com/cursos/silabo_diapositiva/SintacI.pdf

http://es.wikipedia.org/wiki/Analizador_sint%C3%A1ctico_de_precedencia_simple

Das könnte Ihnen auch gefallen