You are on page 1of 13

Instituto Tecnolgico de

Cancn

INGENIERA EN SISTEMAS COMPUTACIONALES

LENGUAJES Y AUTMATAS 1
UNIDAD V VI
ENSAYO
ANLISIS LXICO Y ANALISIS SINTACTICO.

PRESENTA:
Canche Tamay Alvin Antonio

Ing. Edwin Lpez Alvarez


SEXTO SEMESTRE

Introduccin:

En este tema se hablara antes que todo acerca del compilador ya que a base
de este elemento surgen los analizadores Se conocern los tipos de anlisis
lxicos y sintcticos tales como las funcionalidades que tienen cada uno de
ellos, sus errores tanto lxicos y sintcticos se hablaran la importancia que se
tiene uno con otro ya que va derivado, uno necesita del otro para poder tomar
el correcto funcionamiento del programa Se hablara de los componentes que
tienen y los lenguajes de programacin.
As como por ejemplo El lenguaje c++, java c#. En los Generadores Existen
varios para cada anlisis lxico conocido como scanner y el sintctico (parse)
ya que surge el ahorro de esfuerzo para los generadores Automticos ya que
estos. Generadores solo necesitan conocer la especificacin de tokens a
reconocer.

Un lenguaje de programacin, alguna expresin, comando o sentencia es el


medio por el cual el hombre interacta con una computadora. Pero el lenguaje
de programacin no entra directamente a ser ejecutado, es decir, necesita de
otro componente importante para completar ste tipo de entrada que se le a
propiciado, y es en este punto donde surge el tema de los analizadores.
Los analizadores son parte importante dentro de un compilador:
Un compilador es un programa que lee un cdigo escrito en un lenguaje (alto
nivel, cdigo fuente) y lo traduce a un programa equivalente en otro lenguaje
(lenguaje objeto)
Como parte importante de este proceso de traduccin, el compilador informa
as al usuario de la presencia de errores en el programa fuente.

Programa fuente
Compilador

Lenguaje Objeto

Mensaje Error

Dando a resaltar que en 1950 se desarroll el primer lenguaje de alto nivel que
permita escribir frmulas matemticas de manera traducible en el ordenador; a
la cual le llamaron FORTRAN
La traduccin de ste cdigo fuente al programa ejecutable es un proceso muy
complejo, cuando se ejecuta el cdigo mquina generado tiene que ser rpido
y consumir poca memoria Refirindonos a (Optimizar Recursos)
Para ello utiliza analizadores que le permiten separar y analizar
independientemente y con reglas diferentes las distintas partes del cdigo.
En un compilador, el anlisis lineal se le llama anlisis lxico o exploracin,El
analizador lxico entonces es el primero paso de un compilador, ste se
encarga de dividir todo el cdigo en palabras o mejor conocidas como tokens;
Los tokens son palabras reservadas de un lenguaje, secuencia de caracteres
que representa una unidad de informacin en el programa fuente.
Es importante mencionar que el analizador lxico y el compilador siempre van a
depender del tipo de lenguaje de programacin que se usa, puesto que son
diferentes las sentencias utilizadas en java que en c# o en pascal, pero los
pasos de su compilador son los mismos todos los lenguajes necesitan de
analizadores.

Un token finalmente es un componente lxico al cul se le debern de aplicar


ciertas reglas, cada una de stas reglas son en base al siguiente analizador

despus de lxico que es el sintctico. Los analizadores como se puede leer,


trabajan en equipo y uno no puede ser sin el otro ya que cada uno de stos
realiza una funcin especfica.
Tomando en cuenta lenguajes de programacin es importante mencionar que
un analizador lxico es ms amplio en cunto a la relacin de tokens, es por
eso que ocupa de un analizador sintctico para acortar las posibilidades y
corregir cualquier mnimo error que un programador introduzca en un cierto
lenguaje de programacin. Un analizador lxico se caracteriza entonces por el
uso de tokens, trabajando con varios tipos de stos como son: especficos y no
especficos.
Los tokens especficos son las palabras reservadas dentro del lenguaje de
programacin y los que definen el tipo de lenguaje,
Tabla de lenguajes de programacin con palabras reservadas.
Java
switch
do, while
Try, catch
boolean
break

C++
thread
class
private
return
new

C#
byte
case
char
else
Default

Los tokens no especficos son identificadores, variables o etiquetas que tal vez
puedan tener un parecido con otros lenguajes de programacin.
Operadores: =, >, =, <=, +, *, - , /.
Smbolos especiales: ;, [ ] ,( ), { },
Constantes numricas: Literales que representan valores enteros y flotantes.
982, 0xF678, -83.2E+2,...
Constantes de carcter: literales que representan cadenas de caracteres.
Cadenas de caracteres, hola mundo,... Comentarios: /** abcde **/

Todo esto lo supervisa el analizador lxico para envirselo al analizador


sintctico, realizando en resumen las siguientes actividades en conjunto:
1. Con ayuda de los patrones, reglas y normas analiza los caracteres y
reconoce lexemas
2. Enva al analizador sintctico los componentes (ahora lxicos) analizados
Dando a resaltar que Una de las funciones Secundarias que tiene el analizador
lxico tiende a Eliminar comentarios, espacios en blanco, tabuladores y saltos
de lnea (caracteres no vlidos para formar un tokens)

El anlisis lxico tiende inicialmente a leer los lexemas y le asigna un


significado propio.
Los componentes lxicos que se utilizan en los compiladores son:
*
Palabras clave o reservadas, Operadores aritmticos, Operadores
relacionales, Operadores lgicos, Operador de asignacin, Identificadores,
Constantes, Cadenas, Literales, signos de puntuacin, Libreras.
Tambin existe un Patrn donde genera bsicamente reglas que genera la
secuencia de caracteres que puede presentar un determinado componente
lxico.
El Lexema es una cadena de caracteres que concuerda con un patrn que
describe un componente lxico en (valor de cadena).Como se mencion
anteriormente Cuando se empiece a traducir el cdigo fuente el compilador
empieza a reconocer e informa al usuario de un posible error de cdigo fuente
Es all, donde surgen los errores lxicos, Los errores lxicos se detectan
cuando el analizador lxico intenta reconocer componentes lxicos y la cadena
de caracteres de la entrada no encaja con ningn patrn.
Son situaciones en las que usa un carcter invalido (@,$,,,...), que no
pertenece al vocabulario del lenguaje de programacin, al escribir mal un
identificador, palabra reservada u operador. Errores lxicos tpicos son:
1. nombre ilegales de identificadores: un nombre contiene caracteres invlidos.
2. nmeros incorrectos: un numero contiene caracteres invlidos o no est
formado correctamente, por ejemplo 3,14 en vez de 3.14 o 0.3.14.
3. errores de ortografa en palabras reservadas: caracteres omitidos,
adicionales o cambiados de sitio, por ejemplo la palabra hwile en vez de while.
4. fin de archivo: se detecta un fin de archivo a la mitad de un componente
lxico.
Los errores lxicos se deben a descuidos del programador.
La mejor manera de escribir el cdigo fuente es que el programador pueda
Identificar los patrones las variables y las palabras reservadas y si llegara a
confundirse pueda visualizarlo y pueda recuperar ese error lxico como:
El Borrar un carcter extrao o Insertar un carcter que falta el Reemplazar un
carcter incorrecto por otro correcto Intercambiar dos caracteres adyacentes
Evidentemente el compilador tiene que realizar su funcin y poder detectar y
reportar de forma clara y precisa la presencia de errores y poder Recuperarse
de cada error lo suficiente rpido para poder detectar errores subsiguientes:

Tratar de evitar mensajes falsos de error y que produce un token errneo


Errores lxicos posibles

Todos los analizadores lxicos realizan la misma funcin (se implementan de


igual forma) excepto en los tokens que reconocen, las expresiones regulares
que los definen. Es una forma de ahorrar esfuerzo, utilizar generadores
automticos de analizadores lxicos. Estos generadores solo necesitan
conocer la especificacin de tokens a reconocer.
El generador Lex es el principal programa para generar analizadores lxicos,
se utiliza comnmente con el programa yacc que se utiliza para generar
anlisis sintcticos Lex genera cdigo fuente en c, a partir de una serie de
especificaciones escritas en lenguaje lex.
El cdigo C generado tiene una funcin
Llamada yylex(), que localiza cadenas en la entrada (lexemas) que se ajusten
a uno de los patrones lxicos especificados en el cdigo fuente lex.
Por otro lado tenemos al analizador sintctico, tambin llamado parser, recibe
como entrada los tokens que le pasa el Analizador Lxico (el analizador
sintctico no maneja directamente caracteres) y comprueba si esos tokens van
llegando en el orden correcto (orden permitido por el lenguaje).
La salida "terica" de la fase de anlisis sintctico sera
Cadena
De tokens

Analizad
or
Sintctic

rbol Sintctico

En el diseo del analizador sintctico, este no ha de preocuparse de leer el


archivo de entrada, ni de saltar blancos, ni comentarios, ni de recibir
caracteres inesperados, puesto que todo ello ha sido filtrado previamente por el
analizador lexicogrfico.
El anlisis sintctico utiliza los primeros componentes de los tokens producidos
por el analizador lxico para crear una representacin intermedia en forma de
rbol que describa la estructura gramatical del flujo de tokens
Una representacin tpica es el rbol sintctico, en el cul cada nodo interior
representa una operacin y los hijos del nodo representan los argumentos de la
operacin.
Si en todo caso de no existir este rbol sintctico, la cadena no
pertenecer al lenguaje y el analizador sintctico debe emitir el correspondiente
mensaje de error.
Existen dos formas de analizar sintactimente una cadena
Anlisis descendente, parte del axioma inicial de la gramtica se va
descendiendo utilizando las derivaciones izquierdas hasta llegar a construir la
cadena analizada

Por otro lado el anlisis ascendente se va construyendo el rbol desde sus


nodos terminales, es decir se va construyendo desde los smbolos de la
cadena hasta llegar al axioma dela gramtica.
Si hacemos una breve Anlisis de comparacin de los analizadores lxicos y
sintcticos.
Nos damos cuenta que en el lxico Cuenta con cada secuencia de carcter
para que su salida sea la secuencia de tokens, de lo contrario en el sintctico
se basa en el inicio de secuencia de tokens para sacar un rbol sintctico
Lexer
Paser

Secuencia
de Secuencia de tokens
caracteres
Secuencia de tokens
rbol Sintetico

Lo que realiza el analizador sintctico es que:


No todas las secuencias de tokens son programas, El Analizador sintctico
debe distinguir entre secuencias de tokens vlidos y no vlidos, Necesitamos
Un lenguaje para describir secuencias de tokens vlidas., Un mtodo para
distinguir entre secuencias de tokens vlidas y no vlidas
Entrada: Secuencia de tokens de un analizador lxico
Salida: El rbol sintctico de un programa
Para entender ms acerca de este analizador se tocara el tema de los GLC o
tambin Las gramticas libres de contexto permiten describir la mayora de los
lenguajes de programacin, de hecho, la sintaxis de la mayora de lenguajes de
programacin est definida mediante gramticas libres de contexto
Una gramtica libre de contexto consiste de:
Un conjunto de no terminales N Un conjunto de terminales T Un smbolo
inicial S (no terminal) Un conjunto de producciones de la forma
Un rbol de anlisis sintctico se puede considerar como una representacin
grfica de una derivacin.
Un rbol de derivacin tiene las siguientes propiedades: El nodo raz est
rotulado con el smbolo distinguido (inicial) de la Gramtica. Cada
nodo corresponde a un smbolo terminal o un smbolo no-terminal. Cada nodo
corresponde a un smbolo no-terminal.
Un rbol de derivacin muestra grficamente las derivaciones (substituciones
de smbolos no terminales) que hay que llevar a cabo para llegar a una Forma
Sentencial a partir del smbolo inicial.
Un recorrido de izquierda a derecha de las hojas da como resultado la entrada
original

Debemos tener en cuenta que si existe una derivacin ms ala izquierda


tambin tendremos un equivalente llamada derivacin ms a la derecha.
En el analizador tambin Maneja errores de tal forma que los programas no son
siempre concretos para el analizador sintctico un error de sintaxis se detecta a
partir de la espera de un smbolo que no corresponde al que acaba de leer,De
tal forma que los analizadores ascendente y descendente tienen la ventaja de
que puedan detectar error sintctico lo ms pronto posible, es decir se genera
un mensaje de error cuando el smbolo analizado no sigues la secuencia del
smbolo analizados hasta ese momento.
Las herramientas sirven para disminuir el nmero de errores sintcticos Una de
las formas ms precisas tanto el programador poder usar algn editor basado
en sintaxis (colores) permite mostrar el error presentado sin ningn problema
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. Poder Recuperarse del error, para poder seguir
examinando la entrada. 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 y Mejorar la respuesta ante los
errores.
Tenemos varias estrategias para corregir errores, una vez detectados:
Ignorar el problema Consiste en ignorar el resto de la entrada hasta llegar a
una condicin de seguridad. Una condicin tal se produce cuando nos
encontramos un token especial (por ejemplo un ; o un END). A partir de este
punto se sigue analizando normalmente. Esta es la ms comn usada tanto la
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 token ;. 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:
sent_errne a sent_sin_acabar sentencia_acabada ; sentencia_acabada
sentencia ;
sent_sin_acabar sentencia Lo cual nos da mayor control en ciertas
circunstancias a Teniendo en cuenta el lenguaje de programacin que se
utiliza.
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.

Los generadores del anlisis sintctico de acuerdo al tipo de analizador


descendente o ascendente (LL O LR)Algunos de ellos se utilizan comnmente
en la programacin esto hace ms fcil y ahorra esfuerzo para generar anlisis
sintctico
Existe diferentes generadores en la cual es muy difcil escoger uno, ya que
ahora tienen a ser mucho ms Sencillo y ahorro de tiempo veremos cules hay
estos son un poco de todos los generadores que tiene el analizador sintactico
Yacc,bison, grammatical, Sid, Yayacc, gold coo/rTP lex/yacc, Aflex/ayacc
Javacc,Sablecc ,Cup,Spirit,Parseview,Beaver
Este generador es ms compacto utiliza un analizador ascendente y un
multilenguaje de programacion e incluye en el anlisis lxico
Se le conoce como GOLD Es el Tipo de analizador ascendente LR con Cdigo
generado Con Multilenguaje (java,c# ansi c,dephi, python VB,VB.NET,VC+
+,WXWINGESTS todos los lenjuages .net y Lo que lo Caracteriza es que
Incluye anlisis lxico.

Conclusin:

Finalmente es importante saber que aunque el analizador lxico es la primera


etapa del proceso de compilacin, no es quien lo inicia. El proceso o la
compilacin empiezan con el analizador gramatical quien solicita un token; es
cuando el analizador de lxico rene stos smbolos contenidos en el token, lo
analiza y posteriormente lo enva al sintctico para esperar del gramatical otro
token.
Para finalizar es importante conocer como programador los procedimientos,
pasos y formas en que se ejecuta y compila el cdigo de programacin que
utiliza diariamente, puesto que gracias a esto es posible desde el mensaje de
errores hasta el mismo lenguaje de programacin, si ste tipo de analizadores
no existieran, cada programador tendra la tarea de verificar, analizar y ejecutar
correctamente su cdigo sin ayuda de ninguna herramienta. Adems de que se
debe de conocer cmo es que trabajan estos analizadores, es decir, que es la
lxica, sintctica, y tambin la semnticapara poder saber aplicarlos
correctamente. Una ventaja ms acerca de conocer un compilador es que se
reconoce e identifica ms fcilmente un tipo de lenguaje de programacin, esto
gracias a su sintctica, lxico y semntica.

Anexos:
En esta hoja se mostrara la ejecucin de un programa en java Neetbeans
donde podremos ver los la deteccin de las palabras reservadas las variables
y operadores y funciones del anlisis lxicos a partir de los tokens

Ejemplo: 23 : 12 : 58

Horas = [00 23]


Minutos = [00 60]
Segundos = [00 60]
Separador = :
Anlisis lexico
TOKEN
Horas
Separador
Minutos
Separador
Segundos

LEXEM
A
23
:
12
:
58

Anlisis sintctico
G = {Vn, Vt, R, S}
Vn = {exp, Horas, minutos, segundos, separador }
Vt = {[00 23][00 59] :}
Reglas
Exp = horas separador minutos separador segundos
horas: val1
val 1= [00 23]
val 2= [00 59]
minutos: val2
segundos: val2
separador: :

ARBOL SINTACTICO
EXP

Horas

Segundos
Separador
Minutos

Separador

Var1
:
*

:
Val2

Val2

23
12
58

Bibliografas:

Aho, Sethi, Ullman, Compiladores Principios, tcnicas y herramientas, Ed.


Addison Wesley
Martin John, Lenguajes formales y teora de la computacin, Ed. Mc Graw Hill.
Hopcroft John E., Introduccin a la Teora de Autmatas, Lenguajes y
Computacin, 2da ed, Ed. Addison Wesley, 2004.
http://www.lcc.uma.es/~galvez/ftp/libros/Compiladores.pdf

You might also like