Anda di halaman 1dari 15

Anlisis Lxico

Juan Carlos Huamn Olivera


Escuela Profesional en Informtica y Sistemas, Universidad Nacional Jorge Basadre Grohmann
Tacna, Per
@hotmail.com


Abstract This document is an article about the Memory that
expresses behavior of memory input an operating system, show
us the way how its can be manipulated. In order to become
more familiar with the scientific article, and to have better
sight about the competitive world in which we live and to be
competent, this article is based on the IEEE format, which
refers to the size and margins of page, size and style of font,
among others, and made in Latex, the programming language
made specifically for this class of documents

Palabras clave: Compilador, lenguaje, operation system, gramtica.

I. INTRODUCCIN

El analizador lxico, tambin conocido como
scanner, lee los caracteres uno a uno desde la
entrada y va formando grupos de caracteres con
alguna relacin entre s (tokens), que constituirn
la entrada para la siguiente etapa del compilador.
Cada token representa una secuencia de
caracteres que son tratados como una nica
entidad. Por ejemplo, en Pascal un token es la
palabra reservada BEGIN, en C: WHILE, etc.
Las tiras especficas slo tienen tipo (lo que
representan), mientras que las tiras no especficas
tienen tipo y valor. Por ejemplo, si Contador es
un identificador, el tipo de token ser
identificador y su valor ser la cadena
Contador.
El Analizador Lxico es la etapa del compilador
que va a permitir saber si es un lenguaje de
formato libre o no. Frecuentemente va unido al
analizador sintctico en la misma pasada,
funcionando entonces como una subrutina de
este ltimo. Ya que es el que va leyendo los
caracteres del programa, ignorar aquellos
elementos innecesarios para la siguiente fase,
como los tabuladores, comentarios, espacios en
blanco, etc.
3.1. EL PROCESO DEL ANLISIS LXICO

El proceso de anlisis lxico se refiere al trabajo
que realiza el scanner con relacin al proceso de
compilacin. El scanner representa una interfaz
entre el programa fuente y el analizador
sintctico o parser. El scanner, a travs del
examen carcter por carcter del texto, separa el
programa fuente en piezas llamadas tokens, los
cuales representan los nombres de las variables,
operadores, etiquetas, y todo lo que comprende
el programa fuente.
El parser, usualmente genera un rbol de sintaxis
del programa fuente como ha sido definido por
una gramtica. Las hojas del rbol son smbolos
terminales de la gramtica. Son esos smbolos
terminales o tokens los que el scanner extrae del
cdigo fuente y se los pasa al parser. Es posible
para el parser usar el conjunto de caracteres
terminales del lenguaje como el conjunto de
tokens, pero ya que los tokens pueden ser
definidos en trminos de gramticas regulares
ms simples que en las gramticas ms complejas
utilizadas por los parsers, es deseable usar
scanners. Usar solo parsers es costoso en
trminos de tiempo de ejecucin y
requerimientos de memoria, y la complejidad y el
tiempo de ejecucin puede reducirse con el uso
de un scanner.
QUE ES UN ANALIZADOR LXICO?
Se encarga de buscar los componentes lxicos
(tokens En ingles) o palabras que componen el
programa fuente, segn unas reglas o patrones.
La entrada del analizador lxico podemos
definirla como una secuencia de caracteres.

Grfico N 7: Analizador lxico
El analizador lxico tiene que dividir la secuencia
de caracteres en palabras con significado propio y
despus convertirlo a una secuencia de
terminales desde el punto de vista del analizador
sintctico, que es la entrada del analizador
sintctico.
El analizador lxico reconoce las palabras en
funcin de una gramtica regular de manera que
sus NO TERMINALES se convierten en los
elementos de entrada de fases posteriores. En
LEX, por ejemplo, esta gramtica se expresa
mediante expresiones regulares.

II. DESARROLLO
2.1 FUNCIONES DEL ANALIZADOR LXICO
El analizador lxico es la primera fase de un
compilador. Su principal funcin consiste en leer
los caracteres de entrada y elaborar como salida
una secuencia de componentes lxicos que utiliza
el analizador sintctico para hacer el anlisis. Esta
interaccin, suele aplicarse convirtiendo al
analizador lxico en una subrutina o corrutina del
analizador sintctico. Recibida la orden Dame el
siguiente componente lxico del analizador
sintctico, el analizador lxico lee los caracteres
de entrada hasta que pueda identificar el
siguiente componente lxico.
Estos componentes lxicos representan:
palabras reservadas: if, while, do, . . .
identicadores: asociados a variables,
nombres de funciones, tipos definidos por el
usuario, etiquetas,... Por ejemplo:
Forma: una letra seguida de letras o
nmeros. Ej. a, b1, c3D
Atributo nombre: string con la secuencia
de caracteres que forma el identificador
en maysculas. Ej. A, B1, C3D
operadores: = * + - / == > < &! = . . .
smbolos especiales: ; ( ) [ ] f g ...
constantes numricas: literales que
representan valores enteros, en coma
flotante, etc, 982, 0xF678, -83.2E+2,...
Forma: secuencia de dgitos que puede
empezar con el signo menos y puede
contener un punto. Ej. 10, -3, 15.4, -
54.276, .10
Atributo valor: Double con el valor
numrico.
Precisin: entero o real.
constantes de caracteres: literales que
representan cadenas concretas de caracteres,
\hola mundo",...

Grfico N 8: Interaccin de un analizador lxico con el
analizador sintctico
Otras funciones que realiza:
Eliminar los comentarios del programa.
Eliminar espacios en blanco, tabuladores,
retorno de carro, etc, y en general, todo
aquello que carezca de significado segn la
sintaxis del lenguaje.
Reconocer los identificadores de usuario,
nmeros, palabras reservadas del lenguaje,...,
y tratarlos correctamente con respecto a la
tabla de smbolos (solo en los casos que debe
de tratar con la tabla de smbolos).
Llevar la cuenta del nmero de lnea por la
que va leyendo, por si se produce algn error,
dar informacin sobre donde se ha
producido.
Avisar de errores lxicos. Por ejemplo, si @
no pertenece al lenguaje, avisar de un error.
Puede hacer funciones de preprocesador.

2.2 NECESIDAD DEL ANALIZADOR LXICO

Un tema importante es el porqu se separan los
dos anlisis lexicogrfico y sintctico, en vez de
realizar slo el anlisis sintctico, del programa
fuente, cosa perfectamente posible aunque no
plausible. Algunas razones de esta separacin
son:
Un diseo sencillo es quizs la consideracin
ms importante. Separar el anlisis lxico del
anlisis sintctico a menudo permite
simplificar una u otra de dichas fases. El
analizador lxico nos permite simplificar el
analizador sintctico.


Grfico N 9: Necesidad del analizador lxico
Si el sintctico tuviera la gramtica de la
Opcin 1 , el lexicogrfico sera:
Opcin 1: ( 0 | 1 | 2 | ... | 9) +
NUM
(+ | - | * | /)
OPARIT
Si en cambio el sintctico toma la Opcin 2, el
lexicogrfico sera:
Opcin 2: ( 0 | 1 | 2 | ... | 9) + NUM
+
MAS
-
MENOS
*
MULT
/
DIV

Es ms, si ni siquiera hubiera anlisis lxico, el
propio anlisis sintctico vera incrementado
su nmero de reglas:
NUM 0
| 1
| 2
| 3
....
| NUM NUM
2.3 VENTAJAS DE SEPARAR EL ANLISIS LXICO Y EL
ANLISIS SINTCTICO:

Facilita transportabilidad del traductor (por
ejemplo, si decidimos en un momento dado
cambiar las palabras reservadas begin y end
de inicio y en de bloque, por f y g, solo hay
que cambiar este modulo.
Se simplifica el diseo: el analizador es un
objeto con el que se interacta mediante
ciertos mtodos. Se localiza en un nico
modulo la lectura fsica de los caracteres, por
lo que facilita tratamientos especializados de
E/S.
Se mejora la eficiencia del compilador. Un
analizador lxico independiente permite
construir un procesador especializado y
potencialmente ms eficiente para esa
funcin.
Gran parte del tiempo se consume en leer el
programa fuente y dividirlo en componentes
lxicos. Con tcnicas especializadas de
manejo de buffers para la lectura de
caracteres de entrada y procesamiento de
componentes lxicos se puede mejorar
significativamente el rendimiento de un
compilador.
Otra razn por la que se separan los dos
anlisis es para que el analizador lxico se
centre en el reconocimiento de componentes
bsicos complejos.

2.4 COMPONENTES LXICOS, PATRONES, LEXEMAS
2.4.1 COMPONENTE LXICO O TOKEN
El valor asociado a una categora o unidad de
lxico. Se representa como un nmero entero
o una constante de un byte. Ejemplo: el token
de un identificador puede ser 1 id (si id fue
definida como 1).
Los tokens son las unidades lxicas bsicas de
igual forma que las palabras y signos de
puntuacin son las unidades bsicas de un
enunciado. Los tokens varan del lenguaje al
lenguaje e incluso de compilador a
compilador para el mismo lenguaje, la
eleccin de los tokens es tarea del diseador
del compilador.
En la mayora de lenguajes tendremos tokens
para :
palabras clave: IF THEN THEN THEN =
ELSE; ELSE ELSE = THEN;
operadores
identificadores
constantes (reales, enteras y de tipo
carcter), strings de caracteres y signos
de puntuacin
1. Tipos de tokens:
tiras especficas, tales como palabras
reservadas (if, while, begin, etc.), el
punto y coma, la asignacin, los
operadores aritmticos o lgicos, etc.
tiras no especficas, como
identificadores, constantes o
etiquetas.
2. Prioridad de los tokens
Se da prioridad al token con el
lexema ms largo:
Si se lee >= y > se reconoce el
primero.
Si el mismo lexema se puede asociar
a dos tokens, estos patrones estarn
definidos en un orden determinado.
Ejemplo:
While palabra reservada while
letra (letra | digito)* identificador
Si en la entrada aparece while, se
elegir la palabra reservada por estar
primero.
Si estas especificaciones iniciales
aparecieran en orden inverso, se
reconocera un token identificador.

2.4.2 PATRN O EXPRESIN REGULAR
Definen las reglas que permiten identificar los
componentes lxicos o tokens.
2.4.3 LEXEMA
Es cada secuencia de caracteres concreta que
encaja con un patrn, es decir, es como una
instancia de un patrn.
Ejm: 8, 23, 50 (son lexemas que encajan con
el patrn ( 0 | 1 | 2 | ... | 9) + )
Una vez detectado que un grupo de
caracteres coincide con un patrn, se ha
detectado un lexema. A continuacin se le
asocia un nmero, que se le pasar al
sintctico, y, si es necesario, informacin
adicional, como puede ser una entrada en la
tabla de smbolos.
La tabla de smbolos suelen ser listas
encadenadas de registros con parte variable:
listas ordenadas, rboles binarios de
bsqueda, tablas hash, etc.
Ejm: Hacer un analizador lxico que nos
reconozca los nmeros enteros, los nmeros
reales y los identificadores de usuario. Vamos
a hacer este ejemplo en C.
Terminales
Expresin Regular
( 0 ... 9) +
NUM_ENT
(0 ... 9)*. (0 ... 9) +
NUM_REAL
(a ... z) (a ... z 0 ... 9) *
ID

Asociado a la categora gramatical de nmero
entero tendremos el token NUM_ENT que
puede equivaler por ejemplo al nmero 280;
asociado a la categora gramatical nmero
real tendremos el token NUM_REAL que
equivale al nmero 281; asociado a la
categora gramatical identificador de usuario
tendremos el token ID que equivale al
nmero 282.
( 0 ... 9) + { return
280;}
(0 ... 9)*. (0 ... 9) +
{ return 281;}
(a ...z) (a ...z 0...9) *
{ return 282;}
Si tuviramos como texto de entrada el
siguiente:
95.7 99 hola
El analizador lxico intenta leer el lexema ms
grande; el 95 encaja con el primer patrn,
pero sigue, al encontrarse el punto, se da
cuenta de que tambin encaja con el segundo
patrn, entonces como este es ms grande,
toma la accin del segundo patrn, return
NUM_REAL. El 99 coincide con el patrn
NUM_ENT, y la palabra con ID. Los espacios
en blanco no coinciden con ningn patrn.
En vez de trabajar con los nmeros 280, 281,
282, se definen mnemotcnicos.
# define NUM_ENT
280
# define NUM_REAL
281
# define NUM_ID 282
( \t \n)
(0 ... 9) + {return
NUM_ENT;}
(0 ... 9) *. (0 ... 9) +
{return NUM_REAL;}
(a ... z) (a ... z 0 ... 9)*
{return ID;}

Las palabras que entran por el patrn ( \t
\n) no tienen accin asociada, por lo que , por
defecto, se consideran solo espaciadores.
Ejemplo:
Programa UNO;
Inicio
Escribe (Hola);
Fin.
Cuya tabla de tokens es la siguiente:

Programa Palabra reservada
UNO Identificador
; Delimitador
Inicio Palabra reservada
Escribe Palabra reservada
( Smbolo
Hola Identificador
compuesto
) Smbolo
; Delimitador
Fin. Palabra reservada

2.5 DESCRIPCIN DE UN ANALIZADOR LXICO

El anlisis lxico es un anlisis de los caracteres:
Parte de stos y por medio de patrones
reconoce los lexemas
Enva al analizador sintctico el componente
lxico y sus atributos
Puede hacer tareas adicionales: eliminar
blancos, control lneas.


Grfico N 10: Descripcin del analizador lxico
El analizador lxico y el sintctico forman un par
productor-consumidor.
En algunas situaciones, el analizador lxico tiene
que leer Algunos caracteres por adelantado para
decidir de qu token se trata.


Grfico N 11: Par Productor-Consumidor

2.6 UNIDADES DE LXICO
Categoras en que se clasifican las cadenas de
caracteres vlidos en un lenguaje. Los caracteres
vlidos reciben el nombre de alfabeto. Por
ejemplo, el alfabeto de Pascal es:
A-Z, a-z, 0-9, _, =, :, ;, ,, , -, ', ", *, /, (, ), [, ], ., <, > y
las unidades de lxico para pascal son:
identificadores
literales numricas
operadores aritmticos
cadenas de caracteres
separadores
operadores relacionales
operadores lgicos
comentarios
Con respecto al lenguaje para controlar al
ROBOT, tenemos que su alfabeto es:
n,o,r,t,e,s, ,u,i,c y las unidades de lxico son:
rdenes
(norte, sur, este, oeste, inicio)
y espacios en blanco.

2.7 EL ROL DEL ANALIZADOR LXICO

Aunque el analizador de lxico es la primera
etapa del proceso de compilacin, no es quien lo
inicia. Pudiera considerarse que el analizador de
lxico hace su procesamiento y enva sus
resultados al analizador gramatical, como
secuencialmente se aprecia en el proceso de
compilacin; no es as: La compilacin empieza
con el analizador gramatical quien solicita un
token para realizar su trabajo; el analizador de
lxico reune smbolos y enva el token
correspondiente a la unidad de lxico que
conform al analizador gramatical y espera una
nueva solicitud de token. Como se aprecia en la
figura siguiente, el analizador de lxico est
supeditado por el analizador gramatical.


Grfico N 12: Rol del analizador lxico
Durante estas etapas se tiene comunicacin con
la tabla de smbolos que concentra informacin
de las entidades empleadas en el programa.

2.8 TRATAMIENTO DE LOS ERRORES
Un traductor debe adoptar alguna estrategia para
detectar, informar y recuperarse para seguir
analizando hasta el final.
Las respuestas ante el error pueden ser:
Inaceptables: Provocadas por fallos del
traductor, entrada en lazos infinitos, producir
resultados errneos, y detectar slo el primer
error y detenerse.
Aceptables: Evitar la avalancha de errores
(mala recuperacin) y, aunque ms complejo,
informar y reparar el error de forma
automtica.
La conducta de un Analizador de Lxico es el
de un Autmata finito o scanner.
Deteccin del error: El analizador de Lxico
detecta un error cuando no existe transicin
desde el estado que se encuentra con el
smbolo de la entrada. El smbolo en la
entrada no es el esperado.
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 esta 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 while 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. En general, la recuperacin de
errores lxicos es sencilla y siempre se traduce en
la generacin de un error de sintaxis que ser
detectado mas tarde por el analizador sintctico
cuando el analizador lxico devuelve un
componente lxico que el analizador sintctico no
espera en esa posicin.
Los mtodos de recuperacin de errores lxicos
se basan bien en
saltarse caracteres en la entrada hasta que un
patrn se ha podido reconocer; o bien usar otros
mtodos ms sofisticados que incluyen la
insercin, borrado, sustitucin de un carcter en
la entrada o intercambio de dos caracteres
consecutivos. Una buena estrategia para la
recuperacin de errores lxicos:
si en el momento de detectar el error ya
hemos pasado por algn estado final
ejecutamos la accin correspondiente al
ultimo estado final visitado con el lexema
formado hasta que salimos de el; el resto de
caracteres ledos se devuelven al flujo de
entrada y se vuelve al estado inicial;
Si no hemos pasado por ningn estado final,
advertimos que el carcter encontrado no se
esperaba, lo eliminamos y proseguimos con el
anlisis.
2.9 TRATAMIENTO DE PALABRAS RESERVADAS
Son aquellas que los lenguajes de programacin
reservan para usos particulares.
Cmo diferenciarlas de los identificadores?
Resolucin implcita: reconocerlas todas
como identificadores, utilizando una tabla
adicional con las palabras reservadas que se
consulta para ver si el lexema reconocido es
un identificador o una palabra reservada.
Resolucin explcita: se indican todas las
expresiones regulares de todas las palabras
reservadas y se integran los diagramas de
transiciones resultantes de sus
especificaciones lxicas en la mquina
reconocedora.

2.10 CONSTRUCCIN DE UN ANALIZADOR LXICO
Los analizadores lxicos pueden construirse:
Usando generadores de analizadores lxicos:
Es la forma ms sencilla pero el cdigo
generado por el analizador lxico es ms
difcil de mantener y puede resultar menos
eficiente.
Escribiendo el analizador lxico en un
lenguaje de alto nivel: permite obtener
analizadores lxicos con ms esfuerzo que
con el mtodo anterior pero ms eficientes y
sencillos de mantener.
Escribiendo el analizador lxico en un
lenguaje ensamblador: Slo se utiliza en
casos especficos debido a su alto coste y baja
portabilidad.

2.11 CONCEPTO DE EXPRESIN REGULAR

El objetivo de las expresiones regulares es
representar todos los posibles lenguajes definidos
sobre un alfabeto , basndose en una serie de
lenguajes primitivos, y unos operadores de
composicin. Lenguajes primitivos serian el
lenguaje vaci, el lenguaje formado por la palabra
vaca, y los lenguajes correspondientes a los
distintos smbolos del alfabeto. Los operadores
de composicin son la unin, la concatenacin, el
cierre y los parntesis.
2.12 DEFINICIN DE EXPRESIN REGULAR
Dado un alfabeto finito , las expresiones
regulares sobre se definen de forma recursiva
por las siguientes reglas:
1. Las siguientes expresiones son expresiones
regulares primitivas:
o

o, con o e
2. Sean o y | expresiones regulares, entonces
son expresiones regulares derivadas:
o + | (union)
o . | (o simplemente o|)
(concatenacion)
o* (cierre) (A* repeticin
l|A|AA|AAA..)
(o)
3. No hay ms expresiones regulares sobre
que las construidas mediante estas reglas.

Observacin: La precedencia de los operadores
es la siguiente (de mayor a menor):
1. ( )
2. * cierre
3. . concatenacin
4. + unin

Ejemplo: Algunos ejemplos de expresin regular
son:
(0 + 1)*01
(aa + ab + ba + bb)*
a*(a + b)
(aa)*(bb)*b

2.13 OPERACIONES DE EXPRESIONES REGULARES
Seleccin entre alternativas. la cual se
indica mediante el metacaracter |
Concatenacin. La concatenacion entre dos
expresiones regulares R y S se expresa por
RS.
Repeticin. Se indica mediante el
metacaracter *

2.14 LENGUAJE DESCRITO POR UNA EXPRESIN
REGULAR

Sea r una expresin regular sobre . El lenguaje
descrito por r, L(r), se define recursivamente de la
siguiente forma:


Ejemplo:
L(a*(a+b)) = L(a*)L((a+b)) = L(a)*L(a+b) =
L(a)*(L(a) L(b)) = {a}*({a}{b})
= {, a, aa, aaa,...}{a,b}
= {a, aa, ..., b, ab, aab, ...} = {a
n
| n >
1}{ a
n
b | n > 0}.
L((aa)*(bb)*b)= {a
2n
b
2m+1
| n,m > 0}.
Si = {a,b,c},entonces L(( a + b + c) )= *
L(a*(b + c))
L(0*10*)

2.15 TEOREMAS DE EQUIVALENCIA
Tal como indica su nombre, mediante
expresiones regulares se pueden representar
lenguajes regulares. De hecho, la clase de
lenguajes que se pueden representar mediante
una expresin regular, es equivalente a la clase
de lenguajes regulares.
Hasta ahora hemos visto que los lenguajes
regulares pueden describirse mediante:
Gramticas lineales por la izquierda,
Gramticas lineales por la derecha,
Autmatas finitos deterministas,
Autmatas finitos no deterministas.

Por tanto, deben existir algoritmos que permitan
obtener un autmata o una gramtica regular a
partir de una expresin regular y viceversa.
2.16 MATRICES DE TRANSICIN
Una matriz o tabla de transiciones es un arreglo
bidimensional cuyos elementos proporcionan el
resumen de un diagrama de transiciones. Para
elaborar una tabla de transiciones, debe
colocarse cada estado del diagrama de
transiciones en una fila del arreglo y cada smbolo
o categora de smbolos con posibilidades de
ocurrencia en la cadena de entrada, en una
columna. El elemento que se encuentra en la fila
m columna n es el estado que se alcanzara en el
diagrama de transiciones al dejar al estado m a
travs de un arco de etiqueta n. Al no existir
algn arco que salga del estado m, entonces la
casilla correspondiente de la tabla se marca como
un estado de error. En la siguiente figura se
presenta un ejemplo de un diagrama de
transiciones que representa la sintaxis para un
nmero de punto flotante, seguido de la tabla de
transiciones correspondiente.

Estado Dgito . E + - FDC
1 2 Error Error Error Error Error
2 2 3 5 Error Error Error
3 4 Error Error Error Error Error
4 4 Error 5 Error Error Aceptar
5 7 Error Error 6 6 Error
6 7 Error Error Error Error Error
7 7 Error Error Error Error Aceptar

Existe tambin La matriz de transicin de estados
se cre dando valores de estado a cada uno de
los tipos de palabra y utilizando las reglas de la
gramtica respecto a la relacin que existe entre
cada tipo de palabra
2.17 REPRESENTACIN DE LOS AUTMATAS

Grfico N 13: representacin de un autmata

Acepta las secuencias: abc(dc)*
Ej. abc, abcdc, abcdcdc, abcdcdc...
2.18 AUTMATA FINITO DETERMINISTA
Un autmata finito determinista consiste en un
dispositivo que puede estar en un estado de
entre un nmero finito de los mismos; uno de
ellos ser el estado inicial y por lo menos uno ser
estado de aceptacin. Tiene un flujo de entrada
por el cual llegan los smbolos de una cadena que
pertenecen a un alfabeto determinado. Se
detecta el smbolo y dependiendo de este y del
estado en que se encuentre har una transicin a
otro estado o permanece en el mismo. El
mecanismo de control (programa) es que
determina cual es la transicin a realizar. La
palabra finito se refiere a que hay un nmero
finito de estados.
La palabra determinista es porque el mecanismo
de control (programa) no debe tener
ambigedades, es decir, en cada estado solo se
puede dar una y solo una (ni dos ni ninguna)
transicin para cada smbolo posible (en el
ejemplo anterior, la tabla de transiciones era
determinista en ese caso, no as el diagrama,
aunque podra serlo como veremos mas tarde).
El autmata acepta la cadena de entrada si la
mquina cambia a un estado de aceptacin
despus de leer el ltimo smbolo de la cadena. Si
despus del ltimo smbolo la mquina no queda
en estado de aceptacin, se ha rechazado la
cadena.
Si la mquina llega al final de su entrada antes de
leer algn smbolo la entrada es una cadena vaca
(cadena que no contiene smbolos) y la
representaremos con . Solo aceptar si su
estado inicial es de aceptacin.

Un autmata finito determinista (AFD) consiste
en una quntupla (Q, , o, q
0
, F) donde:
Q es un conjunto finito de estados
es el alfabeto de la mquina
o :Q x ,Q (es la funcin total de
transicin)
q
0
e Q es el estado inicial
F _ Q es el conjunto de los estados de
aceptacin (estados finales).

Lee los caracteres de derecha a izquierda
Para cada carcter ledo, si para un a e y q, p e
S se tiene que o(q, a) = p, significa que siempre
que el automata este en el estado q y le llega el
carcter a pasar al estado p
Ejemplo:
Automata que acepta cadenas con un nmero par
de ceros y un numero par de unos:
AFD = {S, A, B, C}, {0,1},o, Q, {Q}

M se puede definir extensivamente con:

Representacin grfica:




2.19 AUTMATA FINITO NO DETERMINISTA
La nica diferencia con los AFD est en que en la
transicin en un estado determinado puede
haber, para un mismo smbolo, ms de un arco o
no haber ninguno.
Decimos que un autmata finito no determinista
acepta una cadena si es posible que su anlisis
deje a la mquina en un estado de aceptacin.
Decimos si es posible, pues si se toma el camino
equivocado no se aceptara una cadena que
podra ser vlida (una cadena del lenguaje
aceptado por este autmata, designado por L(M).
Un autmata finito no determinista (AFN o AFND)
consiste en una quntupla:
(Q, , o, q
0
, F) donde:
Q es un conjunto finito de estados posibles
del automata
es el alfabeto de la mquina
o :Q x ,2
Q
(es la funcin total de
transicin)
q
0
e Q es el estado inicial
F _ Q es el conjunto de los estados de
aceptacin (estados finales).

Ejemplo:
AFND que reconoce en {a, b, c}* tales que el
ultimp smbolo en la caden de entrada apareca
tambin anteriormente en la cadena. En este
AFND, seria
F = {q
0
, q
1
, q
2
, q
3
, q
4
}, {a, ,b, c}, o, q
0
, { q
4
}


Sea la entrada aca:

Concluyendo:

o(q
0
, aca) = { q
0
, q
1
, q
3
} { q
1
, q
4
}
= { q
0
, q
1
, q
3,
q
4
}
Y como o(q
0
, aca) F = {q
4
}, la cadena se acepta.



III. BIBLIOGRAFA

http://juanfc.lcc.uma.es/EDU/EP/trabajos/T201.Cla
sificaciondelostiposdelenguajes.pdf
http://www.esimez.ipn.mx/acadcompu/apuntes_n
otas%20breves/programacion_orientada_objetos.p
df
http://www.monografias.com/trabajos20/paradig
mas-de-programacion/paradigmas-de-
programacion.shtml
http://static.scribd.com/docs/7a6vhoquhqs22.pdf
http://www.scribd.com/doc/9762/Programacion-
Orientada-a-Objetos
http://platea.cnice.mecd.es/~jmarti2/materiales/re
sumenLePr.pdf
http://horustealth.tripod.com/pascal.htm
http://decsai.ugr.es/~dpelta/ProgOrdenadores/tem
a5.pdf
http://ar.geocities.com/luis_pirir/cursos/procedimi
ento.htm
http://www.inf.udec.cl/~mvaras/estprog/cap41.ht
ml
http://www.monografias.com/trabajos/objetos/obj
etos.shtml
http://www.gnacademy.org/text/cc/Tutorial/Spanis
h/node5.html
http://www.gnacademy.org/text/cc/Tutorial/Spanis
h/node6.html
-
http://www.desarrolloweb.com/articulos/2358.php
http://www.desarrolloweb.com/articulos/2387.php
http://es.wikipedia.org/wiki/Compilador
http://www.investigacion.frc.utn.edu.ar/labsis/Publ
icaciones/InvesDes/Compiladores/rxc.htm
http://arantxa.ii.uam.es/~alfonsec/docs/compila1.h
tm
http://www.monografias.com/trabajos11/compil/c
ompil.shtml
http://mx.geocities.com/alfonsoaraujocardenas/co
mpiladores.html
http://platon.escet.urjc.es/grupo/docencia/automa
tas/
http://kataix.umag.cl/~jaguila/Iec/Compiladores/A
utomatas/ta_cap1_2.html
http://arantxa.ii.uam.es/~alfonsec/docs/compila4.h
tm

Anda mungkin juga menyukai