You are on page 1of 27

2017

ANLISIS
LEXICOGRAFICO

TEORAS DE LENGUAJES Y
COMPILADORES
INGENIERA INFORMTICA Y DE SISTEMAS

INTEGRANTES:
CHAVARRIA URBANO NINIDIO JUAN
YEN JESS OSORIO PICON
LUIS RICARDO PINEDO LONZOY
UNIVESIDAD SAN PEDRO FILIAL BARRANCA
ANLISIS LEXICOGRAFICO

DEDICATORIA

Queremos dedicarle este trabajo


A Dios que nos ha dado la vida y fortaleza
para terminar esta monografa.
A nuestros Padres por estar ah cuando ms los necesit; en
especial a mi madre por su ayuda y constante cooperacin.,
A todos nuestros maestros ya que ellos me ensearon valorar los estudios y a
superarnos cada da.

INGENIERA INFORMTICA Y DE SISTEMAS 1


ANLISIS LEXICOGRAFICO

INTRODUCCIN
En 1946 se desarroll el primer ordenador digital. En un principio, estas
mquinas ejecutaban instrucciones consistentes en cdigos numricos que
sealan a los circuitos de la mquina los estados correspondientes a cada
operacin. Esta expresin mediante cdigos numricos se llam Lenguaje
Mquina, interpretado por un secuenciador cableado o por un microprograma.

Pero los cdigos numricos de las mquinas son engorrosos. Pronto los
primeros usuarios de estos ordenadores descubrieron la ventaja de escribir sus
programas mediante claves ms fciles de recordar que esos cdigos
numricos; al final, todas esas claves juntas se traducan manualmente a
Lenguaje Mquina. Estas claves constituyen los llamados lenguajes
ensambladores, que se generalizaron en cuanto se dio el paso decisivo de hacer
que las propias mquinas realizaran el proceso mecnico de la traduccin. A
este trabajo se le llama ensamblar el programa.

Dada su correspondencia estrecha con las operaciones elementales de las


mquinas, las instrucciones de los lenguajes ensambladores obligan a
programar cualquier funcin de una manera minuciosa e iterativa. De hecho,
normalmente, cuanto menor es el nivel de expresin de un lenguaje de
programacin, mayor rendimiento se obtiene en el uso de los recursos fsicos
(hardware). A pesar de todo, el lenguaje ensamblador segua siendo el de una
mquina, pero ms fcil de manejar. Los trabajos de investigacin se orientaron
entonces hacia la creacin de un lenguaje que expresara las distintas acciones
a realizar de una manera lo ms sencilla posible para el hombre. As, en 1950,
John Backus dirigi una investigacin en I.B.M. en un lenguaje algebraico. En
1954 se empez a desarrollar un lenguaje que permita escribir frmulas
matemticas de manera traducible por un ordenador. Le llamaron FORTRAN
(FORmulae TRANslator). Fue el primer lenguaje considerado de alto nivel. Se

INGENIERA INFORMTICA Y DE SISTEMAS 2


ANLISIS LEXICOGRAFICO

introdujo en 1957 para el uso de la computadora IBM modelo 704. Permita una
programacin ms cmoda y breve que lo existente hasta ese momento, lo que
supona un considerable ahorro de trabajo. Surgi as por primera vez el
concepto de un traductor, como un programa que traduca un lenguaje a otro
lenguaje.

En el caso particular de que el lenguaje a traducir es un lenguaje de alto nivel y


el lenguaje traducido de bajo nivel, se emplea el trmino compilador. La tarea de
realizar un compilador no fue fcil. El primer compilador de FORTRAN tard 18
aos-persona en realizarse y era muy sencillo. Este desarrollo del FORTRAN
estaba muy influenciado por la mquina objeto en la que iba a ser implementado.
Como un ejemplo de ello tenemos el hecho de que los espacios en blanco fuesen
ignorados, debido a que el perifrico que se utilizaba como entrada de programas
(una lectora de tarjetas perforadas) no contaba correctamente los espacios en
blanco. Paralelamente al desarrollo de FORTRAN en Amrica, en Europa surgi
una corriente ms universitaria, que pretenda que la definicin de un lenguaje
fuese independiente de la mquina y en De todas formas, y en contra de lo que
quiz pueda pensarse, todava se estn llevando a cabo varias vas de
investigacin en este fascinante campo de la compilacin. Por una parte, se
estn mejorando las diversas herramientas disponibles (por ejemplo, el
generador de analizadores lxicos Aardvark para el lenguaje PASCAL). Tambin
la aparicin de nuevas generaciones de lenguajes -ya se habla de la quinta
generacin, como de un lenguaje cercano al de los humanos-ha provocado la
revisin y optimizacin de cada una de las fases del compilador. El ltimo
lenguaje de programacin de amplia aceptacin que se ha diseado, el lenguaje
Java, establece que el compilador no genera cdigo para una mquina
determinada sino para una virtual, la Java Virtual Machine (JVM), que
posteriormente ser ejecutado por un intrprete, normalmente incluido en un
navegador de Internet. El gran objetivo de esta exigencia es conseguir la mxima
portabilidad de los programas escritos y compilados en Java, pues es
nicamente la segunda fase del proceso la que depende de la mquina concreta
en la que se ejecuta el intrprete.

INGENIERA INFORMTICA Y DE SISTEMAS 3


ANLISIS LEXICOGRAFICO

NDICE
DEDICATORIA ................................................................................................................... 1
INTRODUCCIN ................................................................................................................ 2
COMPILADORES ............................................................................................................... 6
CLASIFICACIN DE COMPILADORES ......................................................................... 8
FUNCIONES DE UN COMPILADOR .............................................................................. 9
FASE DE ANLISIS ........................................................................................................ 11
FASE DE SNTESIS ........................................................................................................ 12
ANLISIS LXICO .......................................................................................................... 13
SINTAXIS ANLISIS ....................................................................................................... 13
ANLISIS SEMNTICO ................................................................................................. 13
GENERACIN DE CDIGO INTERMEDIO ................................................................ 13
GENERACIN DE CDIGO .......................................................................................... 14
TABLA DE SMBOLOS .................................................................................................. 14
Preprocesador ................................................................................................................... 14
Intrprete ............................................................................................................................ 14
Ensamblador ..................................................................................................................... 15
Vinculador .......................................................................................................................... 15
Pala cargadora .................................................................................................................. 15
Compilador cruzado ......................................................................................................... 15
Fuente de compilador de cdigo .................................................................................... 15
ANLISIS LXICO .......................................................................................................... 16
FICHAS .............................................................................................................................. 16
LAS ESPECIFICACIONES DE TOKENS .................................................................... 17
Smbolos especiales ...................................................................................................... 17
Idioma ................................................................................................................................ 17
REGLA DE COINCIDENCIA MS LARGA ................................................................. 17
Operaciones ..................................................................................................................... 19
Anotaciones ..................................................................................................................... 19
Precedencia y asociatividad ............................................................................................... 19
AUTMATAS FINITOS ................................................................................................... 20

INGENIERA INFORMTICA Y DE SISTEMAS 4


ANLISIS LEXICOGRAFICO

Autmatas Finitos Construccin .................................................................................... 21


APLICACIN....................................................................................................................... 23
OPERACIONES .................................................................................................................. 24
Insert() ................................................................................................................................ 24
Lookup() ............................................................................................................................. 24
MBITO GESTIN .............................................................................................................. 25

INGENIERA INFORMTICA Y DE SISTEMAS 5


ANLISIS LEXICOGRAFICO

COMPILADORES

Un traductor es cualquier programa que toma como entrada un texto escrito en


un lenguaje, llamado fuente y da como salida otro texto en un lenguaje,
denominado objeto.

En el caso de que el lenguaje fuente sea un lenguaje de programacin de


alto nivel y el objeto sea un lenguaje de bajo nivel (ensamblador o cdigo de
mquina), a dicho traductor se le denomina compilador. Un ensamblador es
un compilador cuyo lenguaje fuente es el lenguaje ensamblador. Un
intrprete no genera un programa equivalente, sino que toma una sentencia
del programa fuente en un lenguaje de alto nivel y la traduce al cdigo
equivalente y al mismo tiempo lo ejecuta. Histricamente, con la escasez de
memoria de los primeros ordenadores, se puso de moda el uso de intrpretes
frente a los compiladores, pues el programa fuente sin traducir y el intrprete
juntos daban una ocupacin de memoria menor que la resultante de los
compiladores. Por ello los primeros ordenadores personales iban siempre
acompaados de un intrprete de BASIC (Spectrum, Commodore VIC-20,
PC XT de IBM, etc.). La mejor informacin sobre los errores por parte del
compilador as como una mayor velocidad de ejecucin del cdigo
resultante hizo que poco a poco se impusieran los compiladores. Hoy en
da, y con el problema de la memoria prcticamente resuelto, se puede
hablar de un gran predominio de los compiladores frente a los intrpretes,
aunque intrpretes como los incluidos en los navegadores de Internet para
interpretar el cdigo JVM de Java son la gran excepcin.

INGENIERA INFORMTICA Y DE SISTEMAS 6


ANLISIS LEXICOGRAFICO

Ventajas de compilar frente a

interpretar: Se compila una vez,

se ejecuta n veces.

En bucles, la compilacin genera cdigo equivalente al bucle, pero


interpretndolo se traduce tantas veces una lnea como veces se repite el
bucle.

El compilador tiene una visin global del programa, por lo que la informacin
de mensajes de error es mas detallada.

Ventajas del intrprete frente al compilador:

Un intrprete necesita menos memoria que un compilador. En principio eran


ms abundantes dado que los ordenadores tenan poca memoria.

Permiten una mayor interactividad con el cdigo en tiempo de desarrollo.

Un compilador no es un programa que funciona de manera aislada, sino que


necesita de otros programas para conseguir su objetivo: obtener un
programa ejecutable a partir de un programa fuente en un lenguaje de alto
nivel. Algunos de esos programas son el preprocesador, el linker, el
depurador y el ensamblador. El preprocesador se ocupa (dependiendo del
lenguaje) de incluir ficheros, expandir macros, eliminar comentarios, y otras
tareas similares. El linker se encarga de construir el fichero ejecutable
aadiendo al fichero objeto generado por el compilador las cabeceras
necesarias y las funciones de librera utilizadas por el programa fuente. El
depurador permite, si el compilador ha generado adecuadamente el
programa objeto, seguir paso a paso la ejecucin de un programa.
Finalmente, muchos compiladores, en vez de generar cdigo objeto,
generan un programa en lenguaje ensamblador que debe despus
convertirse en un ejecutable mediante un programa ensamblador.

INGENIERA INFORMTICA Y DE SISTEMAS 7


ANLISIS LEXICOGRAFICO

CLASIFICACIN DE COMPILADORES
El programa compilador traduce las instrucciones en un lenguaje de alto
nivel a instrucciones que la computadora puede interpretar y ejecutar. Para
cada lenguaje de programacin se requiere un compilador separado. El
compilador traduce todo el programa antes de ejecutarlo. Los compiladores
son, pues, programas de traduccin insertados en la memoria por el sistema
operativo para convertir programas de cmputo en pulsaciones electrnicas
ejecutables (lenguaje de mquina). Los compiladores pueden ser de:

Una sola pasada: examina el cdigo fuente una vez, generando el


cdigo o programa objeto.

Pasadas mltiples: requieren pasos intermedios para producir un


cdigo en otro lenguaje, y una pasada final para producir y optimizar
el cdigo producido durante los pasos anteriores.

Optimacin: lee un cdigo fuente, lo analiza y descubre errores


potenciales sin ejecutar el programa.

Compiladores incrementales: generan un cdigo objeto instruccin


por instruccin (en vez de hacerlo para todo el programa) cuando el
usuario teclea cada orden individual. El otro tipo de compiladores
requiere que todos los enunciados o instrucciones se compilen
conjuntamente.

Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee


una estructura sencilla.

Compilador cruzado: se genera cdigo en lenguaje objeto para una


mquina diferente de la que se est utilizando para compilar. Es
perfectamente normal construir un compilador de Pascal que genere
cdigo para MS-DOS y que el compilador funcione en Linux y se haya
escrito en C++.

Compilador con montador: compilador que compila distintos


mdulos de forma independiente y despus es capaz de enlazarlos.

INGENIERA INFORMTICA Y DE SISTEMAS 8


ANLISIS LEXICOGRAFICO

Autocompilador: compilador que est escrito en el mismo lenguaje


que va a compilar. Evidentemente, no se puede ejecutar la primera
vez. Sirve para hacer ampliaciones al lenguaje, mejorar el cdigo
generado, etc.

Metacompilador: es sinnimo de compilador de compiladores y se


refiere a un programa que recibe como entrada las especificaciones
del lenguaje para el que se desea obtener un compilador y genera
como salida el compilador para ese lenguaje. El desarrollo de los
metacompiladores se encuentra con la dificultad de unir la
generacin de cdigo con la parte de anlisis. Lo que s se han
desarrollado son generadores de analizadores lxicos y sintcticos.
Por ejemplo, los conocidos:

LEX: generador de analizadores lxicos


YACC: generador de analizadores sintcticos
desarrollados para UNIX. Los inconvenientes que tienen
son que los analizadores que generan no son muy
eficientes.
Descompilador: es un programa que acepta como
entrada cdigo mquina y lo traduce a un lenguaje de
alto nivel, realizando el proceso inverso a la compilacin.

FUNCIONES DE UN COMPILADOR
A grandes rasgos un compilador es un programa que lee un programa
escrito es un lenguaje, el lenguaje fuente, y lo traduce a un programa
equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de
este proceso de traduccin, el compilador informa a su usuario de la
presencia de errores en el programa fuente.

A primera vista, la diversidad de compiladores puede parecer abrumadora.


Hay miles de lenguajes fuente, desde los lenguajes de programacin
tradicionales, como FORTRAN o Pascal, hasta los lenguajes especializados
que han surgido virtualmente en todas las reas de aplicacin de la

INGENIERA INFORMTICA Y DE SISTEMAS 9


ANLISIS LEXICOGRAFICO

informtica. Los lenguajes objeto son igualmente variados; un lenguaje


objeto puede ser otro lenguaje de programacin o el lenguaje de mquina
de cualquier computador entre un microprocesador y un supercomputador.
A pesar de existir una aparente complejidad por la clasificacin de los
compiladores, las tareas bsicas que debe realizar cualquier compilador son
esencialmente las mismas. Al comprender tales tareas, se pueden construir
compiladores para una gran diversidad de lenguajes fuente y mquinas
objeto utilizando las mismas tcnicas bsicas.

Nuestro conocimiento sobre cmo organizar y escribir compiladores ha


aumentado mucho desde que comenzaron a aparecer los primeros
compiladores a principios de los aos cincuenta. Es difcil dar una fecha
exacta de la aparicin del primer compilador, porque en un principio gran
parte del trabajo de experimentacin y aplicacin se realiz de manera
independiente por varios grupos. Gran parte de los primeros trabajos de
compilacin estaba relacionada con la traduccin de frmulas aritmticas a
cdigo de mquina.

En la dcada de 1950, se consider a los compiladores como programas


notablemente difciles de escribir. EL primer compilador de FORTRAN, por
ejemplo, necesit para su implantacin de 18 aos de trabajo en grupo
(Backus y otros [1975]). Desde entonces, se han descubierto tcnicas
sistemticas para manejar muchas de las importantes tareas que surgen en
la compilacin. Tambin se han desarrollado buenos lenguajes de
implantacin, entornos de programacin y herramientas de software. Con
estos avances, puede hacerse un compilador real incluso como proyecto de
estudio en un curso de un semestre sobre diseo sobre de compiladores

INGENIERA INFORMTICA Y DE SISTEMAS 10


ANLISIS LEXICOGRAFICO

El compilador traduce el cdigo escrito en un idioma a otro idioma sin cambiar el


sentido del programa. Tambin est previsto que un compilador debe hacer el
cdigo de destino eficaz y optimizada en trminos de tiempo y espacio.

Compilador principios de diseo proporcionan una visin en profundidad de la


traduccin y optimizacin de los procesos. Compilador cubiertas de diseo
mecanismo traduccin bsica y la deteccin de errores y recuperacin. Incluye
lxico, la sintaxis y anlisis semntico como front end y generacin de cdigo y
optimizacin de extremo.

En trminos generales un compilador puede dividirse en dos fases en


funcin de la forma en que se compila.

FASE DE ANLISIS

Conocido como el extremo frontal del compilador, el anlisis fase del compilador
lee el programa fuente, lo divide en partes fundamentales y, a continuacin,
verifica la existencia de lxico, gramtica y errores de sintaxis. La fase de anlisis
genera una representacin intermedia del programa fuente y tabla de smbolos,
que deberan ser alimentados a la fase de sntesis como entrada.

INGENIERA INFORMTICA Y DE SISTEMAS 11


ANLISIS LEXICOGRAFICO

FASE DE SNTESIS

Conocido como el back-end del compilador, la fase de sntesis genera al


programa de destino con la ayuda de cdigo fuente representacin intermedia y
tabla de smbolos.
Un compilador puede tener muchas fases y pasa.
Pass: un pase se refiere a la travesa de un compilador a travs de todo
el programa.

Fase: una fase de un compilador es una etapa distinguible, que toma la


entrada de la etapa anterior, los procesos y los rendimientos de salida que
puede ser utilizado como entrada para la siguiente etapa. Un pase puede
tener ms de una fase.
El proceso de compilacin es una secuencia de varias fases. Cada fase dura
entrada de su etapa anterior, tiene su propia representacin del programa de
origen, y alimenta su resultado a la siguiente fase del compilador. Nos permiten
entender las fases de un compilador.

INGENIERA INFORMTICA Y DE SISTEMAS 12


ANLISIS LEXICOGRAFICO

ANLISIS LXICO

La primera fase de escner funciona como un texto escner. Esta fase busca en
el cdigo fuente como una secuencia de caracteres y la convierte en un lexema
resultante.
Analizador Lxico representa estos lexemas resultantes en forma de fichas:

<token-name, attribute-value>

SINTAXIS ANLISIS

La siguiente fase se denomina la sintaxis anlisis o anlisis. Toma el token de


anlisis lxico como entrada y genera un rbol analizar (o rbol de sintaxis). En
esta fase, token arreglos se contrastan con el cdigo fuente gramtica, es decir,
el analizador comprueba si la expresin de los tokens es sintcticamente
correcto.

ANLISIS SEMNTICO

Anlisis semntico comprueba si el anlisis rbol construido sigue las reglas del
idioma. Por ejemplo, la asignacin de valores es entre tipos de datos
compatibles, y aadiendo cadena en un nmero entero. Adems, el analizador
semntico realiza un seguimiento de los identificadores, sus tipos y
expresiones; si los identificadores se declaran antes de su uso, o no, etc. El
analizador semntico produce un rbol de sintaxis anotado como una salida.

GENERACIN DE CDIGO INTERMEDIO

Tras anlisis semntico el compilador genera un cdigo intermedio del cdigo


fuente para el equipo de destino. Es un programa para algunos la mquina
abstracta. , Est entre el lenguaje de alto nivel y el lenguaje de mquina. Este
cdigo intermedio debe ser generado de tal manera que hace que sea ms fcil
de traducir en la mquina de destino.

OPTIMIZACIN DE CDIGO

INGENIERA INFORMTICA Y DE SISTEMAS 13


ANLISIS LEXICOGRAFICO

La siguiente fase de optimizacin de cdigo es el cdigo intermedio. La


optimizacin puede ser asumida como algo que elimina cdigo innecesario, y
organiza la secuencia de declaraciones con el fin de acelerar la ejecucin del
programa sin desperdicio de recursos (CPU, memoria).

GENERACIN DE CDIGO
En esta fase, el generador de cdigo optimizado la representacin del cdigo
intermedio y la asigna a la mquina de destino. El generador de cdigo se
traduce el cdigo intermedio en una secuencia de (generalmente) reubicables
cdigo mquina. Secuencia de instrucciones de cdigo mquina realiza la tarea
como el cdigo intermedio.

TABLA DE SMBOLOS
Es una estructura de datos mantendr en todas las fases de un compilador.
Todos los nombres de identificador junto con sus tipos se almacenan aqu. La
tabla de smbolos hace que sea ms fcil para que el compilador pueda buscar
con rapidez el registro de cdigo y recuperarla. La tabla de smbolos se utiliza
tambin para el campo.

ALGUNAS HERRAMIENTAS QUE TRABAJAN DE CERCA CON LOS


COMPILADORES.

Preprocesador
UN preprocesador, que generalmente se considera como una parte del
compilador, es una herramienta que produce entradas para compiladores. Se
trata de macro-transformacin, ampliacin, inclusin de archivos, extensin del
lenguaje, etc.

Intrprete
Un intrprete, como un compilador, se traduce lenguaje de alto nivel a bajo nivel
de lenguaje mquina. La diferencia radica en la manera en que leen el cdigo
fuente o a la entrada. Un compilador lee todo el cdigo fuente a la vez, crea los
tokens, cheques semntica, genera cdigo intermedio, ejecuta el programa en
su totalidad y puede implicar muchos pases. Por el contrario, un intrprete lee
en un comunicado desde la entrada, se convierte en un cdigo intermedio,
ejecuta, luego toma la siguiente declaracin en secuencia. Si se produce un
error, un intrprete se detiene la ejecucin y de los informes que, mientras que
un compilador lee todo el programa, incluso si se encuentra con varios errores.

INGENIERA INFORMTICA Y DE SISTEMAS 14


ANLISIS LEXICOGRAFICO

Ensamblador
Un ensamblador traduce los programas en lenguaje ensamblador a cdigo
mquina.La salida de un ensamblador se denomina un archivo objeto que
contiene una combinacin de instrucciones de mquina, as como los datos
necesarios para realizar estas instrucciones en la memoria.

Vinculador
Linker es un programa de ordenador que los enlaces y combina varios archivos
objeto junto con el fin de hacer un archivo ejecutable. Todos estos archivos
podran haber sido compilados por separado los ensambladores. La tarea
principal de un linker es buscar y localizar/rutinas mdulo al que se hace
referencia en el programa y para determinar la ubicacin de la memoria en estos
cdigos se ha cargado, con lo que el programa de instruccin referencias
absolutas.

Pala cargadora
Loader es una parte del sistema operativo y es el responsable de cargar
archivos ejecutables en la memoria y las ejecutan. Calcula el tamao de un
programa (instrucciones y datos) y crea espacio de memoria. Inicializa distintos
registros para iniciar ejecucin.

Compilador cruzado
Un compilador que se ejecuta en la plataforma (A) y es capaz de generar cdigo
ejecutable de la plataforma (B) se llama un compilador cruzado.

Fuente de compilador de cdigo


Un compilador que tiene el cdigo fuente de un lenguaje de programacin y se
traduce en el cdigo fuente de otro lenguaje de programacin se llama una
fuente de fuente compilador.

INGENIERA INFORMTICA Y DE SISTEMAS 15


ANLISIS LEXICOGRAFICO

ANLISIS LXICO
Es la primera fase de un compilador. Toma el cdigo fuente modificado
preprocesadores de idioma que se escriben en la forma de las sentencias. El
analizador lxico se rompe estas sintaxis en una serie de fichas, quitando
cualquier espacio en blanco o los comentarios en el cdigo fuente.

Si el analizador lxico encuentra un token no vlido, se genera un error. El


analizador lxico trabaja en estrecha colaboracin con la sintaxis analizador.
Lee caracteres corrientes desde el cdigo fuente, comprueba de tokens, y pasa
los datos a la sintaxis analizador cuando que exige.

FICHAS

Lexema resultante, se dice que son una secuencia de caracteres (alfanumrico)


en un token. Hay algunas reglas predefinidas para cada lexema a ser identificado
como un token vlido. Estas reglas se definen las reglas de gramtica, por medio
de un patrn. Un patrn se explica lo que puede ser un testigo, y estos patrones
se definen por medio de expresiones regulares.
En lenguaje de programacin, palabras clave, constantes, identificadoras,
cadenas, nmeros, operadores y puntuaciones los smbolos pueden ser
considerados como testigos.
Por ejemplo, en lenguaje C, la declaracin de variable lnea

int value = 100;


Contiene las fichas:

INGENIERA INFORMTICA Y DE SISTEMAS 16


ANLISIS LEXICOGRAFICO

int (keyword), value (identifier), = (operator), 100 (constant) and ; (symbol).

LAS ESPECIFICACIONES DE TOKENS


Nos permiten comprender de qu modo la teora del lenguaje se compromete los
siguientes trminos:
Alfabetos
Cualquier conjunto finito de smbolos {0,1 } es un conjunto de caracteres binarios,
{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} es un conjunto de valores hexadecimales
alfabetos, {a-z, A-Z} es un conjunto de idioma Ingls alfabetos.
Cadenas
Cualquier secuencia finita de alfabetos se llama una cadena. Longitud de la
cadena es el nmero total de ocurrencia de los alfabetos, p. ej:
La longitud de la cadena tutorialspoint es 14 y se denota por: |tutorialspoint| =
14.
Una cadena que no alfabetos, es decir, una cadena de longitud cero se conoce
como una cadena vaca, y se denota por (psilon).

Smbolos especiales
EL tpico lenguaje de alto nivel contiene los siguientes smbolos:
Smbolos aritmticos Adems (+), resta (-), mdulo (%), Multiplication(*), divisin (/)
Puntuacin Comas (,), punto y coma (;), punto (.), la flecha(->)
Asignacin =
Asignacin especial +=, /=, *=, -=
Comparacin ==, !=, <, <=, >, >=
Preprocesador #
Especificador de ubicacin &
Lgico &, &&, |, ||, !
Operador de turno >>, >>>, <<, <<<
Idioma
Un idioma es considerado como un conjunto finito de cadenas en algunos
conjuntos finitos de los alfabetos. Lenguajes de programacin son considerados
como conjuntos finitos, y matemticamente conjunto de operaciones que se
pueden llevar a cabo en ellos. Lenguajes finitos se pueden describir por medio
de expresiones regulares.

REGLA DE COINCIDENCIA MS LARGA

INGENIERA INFORMTICA Y DE SISTEMAS 17


ANLISIS LEXICOGRAFICO

Cuando el analizador lxico leer el cdigo fuente, explora el cdigo letra por
letra; y cuando se encuentra un espacio en blanco, smbolo de operador, o
smbolos especiales, decide que una palabra se ha completado.

Por ejemplo:
int intvalue;

Mientras se realiza la exploracin tanto lexema resultante- hasta 'int', el


analizador lxico no puede determinar si se trata de una palabra clave int o las
iniciales del identificador valor int.

La regla de coincidencia ms larga que el capturado lexema debe ser


determinado sobre la base de la mayor coincidencia entre todas las fichas
disponibles.

El analizador lxico tambin sigue prioridad de regla donde una palabra


reservada, por ejemplo, una palabra clave, de un idioma se da prioridad a
entrada de usuario. Es decir, si el analizador lxico encuentra un lexeme que
coincide con cualquier palabra reservada, deber generar un error.

El analizador lxico debe analizar e identificar slo un conjunto finito de cadena


vlida/token/lexeme que pertenecen al lenguaje de la mano. Busca el modelo
definido por las normas del lenguaje.

Las expresiones regulares tienen la capacidad de expresar finito idiomas


definiendo un modelo finito de cadenas de smbolos. La gramtica definida por
las expresiones regulares es conocida como gramtica regular. El idioma
definido por gramtica regular se conoce como idioma habitual.

Expresin regular es una notacin para importante especificacin de patrones.


Cada patrn coincide con un conjunto de cadenas, de modo que las expresiones
regulares como nombres para un conjunto de cadenas. Fichas lenguaje de
programacin puede ser descrita por los idiomas. La especificacin de las
expresiones regulares es un ejemplo de una definicin recursiva. Lenguajes
regulares son fciles de comprender y tener eficacia en su aplicacin.

INGENIERA INFORMTICA Y DE SISTEMAS 18


ANLISIS LEXICOGRAFICO

Hay una serie de leyes algebraicas que son obedecidas por las expresiones
regulares, que puede ser usado para manipular las expresiones regulares en
formas equivalentes.

Operaciones

Las diferentes operaciones sobre los idiomas disponibles son:

Unin de dos idiomas L y M se escribe como


L U M = {s | s en L o s es en M}

La concatenacin de dos lenguajes L y M se escribe como


LM = {st | s es en L y t se encuentra en M}

La clausura de Kleene un lenguaje L es escrito como


L* = cero o ms apariciones del lenguaje L.

Anotaciones
Si r y s son expresiones regulares denotando las lenguas L(r) y L(s), a
continuacin,

Unin: (r) | (s) es una expresin regular que denota L(r) U L(s)

Concatenacin: (r)(s) es una expresin regular que denota L(r)L(s)

Cierre Kleene : (R)* es una expresin regular que denota (L(r))*

(R) es una expresin regular que denota L(r)

Precedencia y asociatividad

*, La concatenacin (.), y | (pipe) son asociativo

* Tiene la mayor prioridad

La concatenacin (.) tiene la segunda mayor prioridad.

| (Pipe) tiene la menor prioridad de todos.

INGENIERA INFORMTICA Y DE SISTEMAS 19


ANLISIS LEXICOGRAFICO

Tokens vlidos representan una lengua en expresiones regulares


Si x es una expresin regular, entonces:

X * significa cero o ms apariciones de x.

Es decir, puede generar { e, x, xx, xxx, xxxx, ... }

X+ significa una o ms apariciones de x.

Es decir, puede generar { x, xx, xxx, xxxx ... } o x.x*

X? Medios de una ocurrencia ms de x

Es decir, se puede generar un {x} o {e}.

[A-z] es todo en maysculas y minsculas del alfabeto ingls.

[A-Z] maysculas alfabetos de idioma ingls.

[ 0-9] es natural dgitos utilizados en matemticas.

De aparicin de smbolos mediante expresiones regulares

Letra = [a - z] o [A - Z]

Dgito = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 o [ 0-9]

Signo = [ + | - ]

Fichas de idioma usando expresiones regulares


Decimal = (signo)?(dgito)+
Identificador = (carta) (letra | digit) *

El nico problema con el analizador lxico es la forma de verificar la validez de


una expresin regular que se utiliza para especificar los patrones de palabras
clave de un lenguaje. Una solucin es utilizar autmatas finitos para verificacin.

AUTMATAS FINITOS

INGENIERA INFORMTICA Y DE SISTEMAS 20


ANLISIS LEXICOGRAFICO

Es una mquina de estado que toma una cadena de smbolos en la entrada y


su estado cambia en consecuencia. Autmatas finitos es un reconocedor de
expresiones regulares. Cuando una expresin regular cadena se alimenta en
autmatas finitos, cambia su estado para cada literal. Si la cadena de entrada
es procesado correctamente y los autmatas alcanza su estado final, es un
hecho aceptado, es decir, la cadena slo alimenta se dijo que era un token
vlido de la lengua en la mano.

El modelo matemtico de autmatas finitos consta de:

Conjunto finito de estados (Q)

Conjunto finito de smbolos de entrada ()

Un estado de inicio (q0)

Conjunto de estados (qf)

Funcin Transicin ()

La funcin transicin () asigna el conjunto finito de estado (Q) de un conjunto


finito de smbolos de entrada ((), Q Q

Autmatas Finitos Construccin


Sea L(r) es un idioma reconocido por regular algunos autmatas finitos (FA).

Estados: Estados de FA estn representados por crculos. De los


nombres se escriben dentro de los crculos.

Estado de inicio: El estado desde donde los autmatas se inicia, se


conoce como el estado de inicio. Estado de inicio tiene una flecha
apuntando hacia ella.

Los estados intermedios: Todos los estados intermedios tienen al


menos dos flechas, una apuntando a y otro que salen de ellos.

Estado final: Si la cadena de entrada se analiza correctamente, el


autmata se espera que est en este estado. Estado final est
representado por dos crculos. Puede haber cualquier nmero impar de
flechas apuntando a ella e, incluso, nmero de flechas que apuntan hacia

INGENIERA INFORMTICA Y DE SISTEMAS 21


ANLISIS LEXICOGRAFICO

fuera de ella. El nmero impar de flechas son incluso ms quees


decir,extrao = incluso+1.

Transicin: La transicin de un estado a otro estado ocurre cuando un


smbolo deseado en la entrada se encuentra. Autmatas de la transicin,
puede pasar al siguiente estado o permanecer en el mismo estado.
Movimiento de un estado a otro se muestra como una flecha dirigida, en
donde las flechas puntos para el estado de destino. Si autmatas
permanece en el mismo estado, una flecha que apunta a un estado que
se dibuja.

Ejemplo: suponemos FA tres dgitos acepta cualquier valor binario que termina
en dgito 1. FA = {Q(q0, qf), (0,1), q0, qf, }

Tabla de smbolos es una importante estructura de datos creada y mantenida


por los compiladores con el fin de almacenar informacin acerca de la
ocurrencia de diversas entidades, tales como nombres de variables, nombres
de funciones, objetos, clases, interfaces, etc. tabla de smbolos se utiliza en el
anlisis y la sntesis de un compilador.

Una tabla de smbolos pueden servir los fines siguientes en funcin del idioma
de la mano:

Para almacenar los nombres de todas las entidades de forma


estructurada en un solo lugar.

Para verificar si se ha declarado una variable.

INGENIERA INFORMTICA Y DE SISTEMAS 22


ANLISIS LEXICOGRAFICO

Comprobacin del tipo de implemento, comprobando las cesiones y las


expresiones en el cdigo fuente son semnticamente correcto.

Para determinar el alcance de un nombre (alcance de la resolucin).

Una tabla de smbolos es simplemente una tabla que puede ser lineal o una
tabla hash. Mantiene una entrada para cada uno de los nombres con el formato
siguiente:

<symbol name, type, attribute>

Por ejemplo, si tiene una tabla de smbolos para almacenar informacin acerca
de la siguiente declaracin de variables:

static int interest;

A continuacin, debe almacenar la entrada como la siguiente:

<interest, int, static>

El atributo clusula contiene las entradas relacionadas con el nombre.

APLICACIN
Si un compilador es manejar una pequea cantidad de datos, a continuacin, la
tabla de smbolos puede ser implementado como una lista desordenada, que
es muy fcil de cdigo, sino que slo es adecuado para pequeas mesas. Una
tabla de smbolos se puede implementar en una de las siguientes formas:

Lineal (ordenadas o desordenadas) lista

rbol de bsqueda binaria

Tabla Hash

Entre todos, tablas de smbolos son en su mayora implementadas como tablas


hash, en el que el cdigo fuente propio smbolo es tratada como un elemento
clave para la funcin de hash y el valor de retorno es la informacin sobre el
smbolo.

INGENIERA INFORMTICA Y DE SISTEMAS 23


ANLISIS LEXICOGRAFICO

OPERACIONES
Una tabla de smbolos, ya sea lineal o hash, debe proporcionar las siguientes
operaciones.

Insert()
Esta operacin es el que se utiliza con ms frecuencia en fase de anlisis, es
decir, la primera mitad del compilador en donde los testigos son identificados y
los nombres se almacenan en la tabla. Esta operacin se utiliza para aadir
informacin en la tabla de smbolos de nombres nicos que ocurren en el cdigo
fuente. El formato o estructura en la que los nombres se almacenan depende
del compilador en mano.

Un atributo de un smbolo en el cdigo fuente es la informacin asociada con


ese smbolo. Esta informacin contiene el valor, el estado, el alcance y el tipo
sobre el smbolo. El insertar() toma el smbolo y sus atributos como argumentos
y almacena la informacin en la tabla de smbolos.

Por ejemplo:

int a;

Debe ser procesada por el compilador como:

insert(a, int);
Lookup()
Lookup() es utilizado para buscar un nombre en la tabla de smbolos para
determinar:

Si el smbolo existe en la tabla.

Si se declara antes de que se utilice.

Si el nombre se usa en el mbito de aplicacin.

Si el smbolo est inicializado.

Si el smbolo declarado varias veces.

El formato de bsqueda () vara segn el lenguaje de programacin. El formato


bsico debe coincidir con el siguiente:

INGENIERA INFORMTICA Y DE SISTEMAS 24


ANLISIS LEXICOGRAFICO

Lookup(smbolo)

Este mtodo devuelve el valor 0 (cero) si el smbolo no existe en la tabla de


smbolos. Si el smbolo existe en la tabla de smbolos, se devuelve sus atributos
almacenados en la tabla.

MBITO GESTIN
Un compilador mantiene dos tipos de tablas de smbolos: a global tabla de
smbolos que puede ser accedida por todos los procedimientos y el alcance
tablas de smbolos que se crean para cada mbito en el programa.

A fin de determinar el alcance de un nombre, smbolo mesas estn dispuestas


en estructura jerrquica que se muestra en el ejemplo siguiente:

El programa anterior se puede representar en una estructura jerrquica de


tablas de smbolos:

INGENIERA INFORMTICA Y DE SISTEMAS 25


ANLISIS LEXICOGRAFICO

La tabla de smbolos global contiene los nombres de una variable global (int
valor) y dos nombres de procedimiento, que debe estar disponible para todos
los nodos secundarios se muestra arriba. Los nombres mencionados en la tabla
de smbolos pro_one (y todos sus nios tablas) no estn disponibles para
smbolos pro_two tablas y su hijo.

Este smbolo jerarqua en la estructura los datos de la tabla se almacena en el


analizador semntico y cada vez que un nombre se debe buscar en una tabla
de smbolos, se busca mediante el siguiente algoritmo:

En primer lugar, un smbolo se buscar en el mbito actual, es decir tabla


de smbolos.

Si un nombre se encuentra, entonces, otra cosa que se buscar en la


tabla de smbolos hasta que padre,

O bien se encuentra el nombre o smbolo mundial tabla se ha buscado


para el nombre.

INGENIERA INFORMTICA Y DE SISTEMAS 26

You might also like