Está en la página 1de 63

TECNOLOGICO DE ESTUDIOS SUPERIORES DE VILLA

GUERRERO

INGENIERA EN SISTEMAS COMPUTACIONALES

MATERIA:

LENGUAJES AUTOMATAS

tarea

DOCENTE:

ING. MARTIN MANCO TORO


INTRODUCCION

En este material se demuestra el avance visto en clase de la


materia de lenguajes autmatas en la cual se explica en esta
ocasin los proyectos realizados por el profesor y nosotros como
alumnos a lo largo de este primer parcial
OBJETIVOS

El objetivo principal es demuestra el contenido de nuestra materia


visto durante el primer parcial en la materia de lenguajes
autmatas con el fin de demostrar el avance que hemos llevado
como alumnos en dicha materia haciendo uso de diversos
recursos que van desde libros e informacin en la red
componente un nico segundo componente.
Por ejemplo, la relacin {(1, 2), (2, 3), (1, 3)} no es una funcin, pero
{(1, 2), (2, 3), (3, 3)} s lo es. Tomando como ejemplo las familias, la
relacin de hermanos no es una funcin, pero la relacin de cada quien
con su padre s lo es (cada quien tiene a lo ms un padre).
Repaso General
Adems de los conjuntos finitos ( con un nmero de elementos
determinado ) tambin puede haber conjuntos infinitos, cuyo
tamao no puede expresarse con un nmero; un ejemplo es el
conjunto de los nmeros naturales N = {1, 2, 3, . . .}. An a estos
conjuntos pueden aplicarse todas las operaciones antes descritas.
Repaso General
Conceptos
Alfabeto: Conjunto finito y no vaci cuyos elementos se denominan
smbolos. Se designa normalmente con las letras: o
Ejemplos:
{0,1}
{a,b,c...,x,y,z}
{0,1,2,3,4,5,6,7,8,9}
{a,b}
Conceptos
Palabra: es una secuencia finita de smbolos de un alfabeto, las
mismas se pueden crear especificando un alfabeto
determinado.
Ejemplos:
Si el alfabeto es {a,b}:

aba, bab, a, b, bbbbabababababababababababababbaba

Si el alfabeto {0,1}:
0,1,01,11,10,...
Existe una palabra especial que representa una secuencia vaca
de smbolos, y a menudo se llama la palabra vaca, y se
representa con la letra griega
Subpalabras, prefijos y sufijos
Subpalabras: subsecuencias de smbolos consecutivos de una
palabra, a menudo se usan las palabras factor o infijo.
Ejemplo:
La palabra bba contiene las siguientes subpalabras:
{,a,b,bb,ba,bba}
es importante las palabras en negritas son tambin consideradas subpalabras
impropias, las dems son subpalabras propias.
Prefijos: subpalabras al principio de una palabra.
Sufijos: subpalabras al final de una palabra.
Nota: La palabra vaca y entera se consideran sufijos y prefijos de cualquier
palabra.
Ejemplo:
Los prefijos de la palabra bbaab son {,b,bb,bba,bbaa,bbaab} se observan
los prefijos propios en azul
Los sufijos son {,b,ab,aab,baab,bbaab} se observan los sufijos propios en
azul
Lenguaje
Se considera un lenguaje como un conjunto de palabras sobre un
alfabeto determinado.
Para designarlo normalmente se usa la letra L, con subndices, si
es necesario, y otras letras maysculas del alfabeto latino.
Ejemplos sobre el alfabeto ={a,b}:

L1={a,aa,aaa,aaaa}
L2={a,b,aa,ab,ba,bb}
L3={aabb} con una sola palabra
L4={}
L5={}=
Pueden ser infinitos como:
El lenguaje sobre ={a,b} de todas las palabras que tengan tantas
letras a como letras b.
El lenguaje de todas las palabras sobre ={a,b,c}
Concatenacin: construir una palabra nueva aadindole los smbolos de la
segunda tras los smbolos de la primera. Se representa con un punto ()
normalmente, a veces si no es necesario se omite. Ejemplo:
aaa bbb = aaabbb
aba = aba
Propiedades:
No es conmutativa w1 w2 w2 w1
Es asociativa (w1 w2) w3 = w1 (w2 w3)
Tiene como elemento neutro la palabra vaca ().
Se puede representar la concatenacin de una palabra consigo misma
usando la representacin exponencial, ejemplo:
www = w3
ww = w2
w0 =
Operaciones sobre palabras
La longitud: de una palabra se denota con |w| y representa el nmero
de smbolos de la misma. Ejemplo |101| = 3 | | = 0
El numero de ocurrencias: de una palabra se denota con |w|x

representa el numero de ocurrencias del smbolo x en la palabra w.


Ejemplo:

| ababb |a = 2

| aaab |c = 0

La inversin de una palabra: consiste en escribir al revs una palabra

dada, y WR denota su inversa. Ejemplo (ab)R = ba

Cuando una palabra es igual a su inversa se dice es un palndromo.

Operaciones sobre palabras

Operaciones sobre lenguajes

Las operaciones conjuntistas:

La unin (U).

La interseccin ().

La complementacin (c

).

La diferencia (-).

Propiedades bsicas:
(L

=L

(L1 U L2

c = L1

c L2

(L1 L2

c = L1

c U L2

c
L1
- L2 = L1 L2
c
Operaciones sobre lenguajes
La Concatenacin: la concatenacin de dos lenguajes L1
y L2
, es otro
lenguaje formado por todas las palabras que se pueden construir
concatenando una palabra de L1
con L2
L1 L2 = { x y | x L1 ^

y L2

Propiedades:

No es conmutativa.

Es Asociativa.

El elemento neutro es la palabra vaca .

No es distributiva, L1

(L2 L3

) L1

L2
L1

L3

Se puede representar la concatenacin de un lenguaje consigo mismo usando


la

notacin exponencial.

Se pueden concatenar lenguajes con palabras.

La inversin: no es mas que el lenguajes formado por los inversos de las

palabras de L, y se denota con LR

Operaciones sobre lenguajes

Clausura, Cierre o Estrella de Kleene:

Su concepto es simple: El mismo es la unin de {} con el conjunto de

todas las palabras que se pueden formar concatenando entre s palabras

de este mismo lenguaje.

Por ejemplo si L={a,ba} entonces

L
0={}

1=L={a,ba}

2={aa, aba, baa, baba}

...

As L*=L0 U L1 U L2 U ...

Si fuese L={b} o L={aa} como quedara la clausura?

Operaciones sobre lenguajes

Clausura, Cierre Positivo de Kleene:

Su concepto es simple: Es similar a L*, solo difiere en que no posee L0

, a diferencia de L*

que si lo posee.

Por ejemplo si L={a,ba} entonces

L
0={}

1=L={a,ba}

2={aa, aba, baa, baba}

...

As L+=L1 U L2 U ...

Si fuese L={b} o L={aa} como quedara la clausura?

Cierres de un alfabeto: *

Dado que un alfabeto puede ser considerado un lenguaje

formado por palabras de un solo smbolo (longitud 1), las

operaciones de cierre de Kleene y cierre positivo de Kleene

tambin son aplicables a los alfabetos.

* : Conjunto de todas las palabras sobre .


: Conjunto de todas las palabras sobre de longitud no nula.


Definicin de Lenguaje
Para definir un lenguaje lo podemos hacer de dos maneras:
formal e informal.
Ejemplos definicin de Lenguaje
Que es un autmata finito?
Es un modelo matemtico de los sistemas que posee las siguientes
caractersticas:
I. En cada momento el sistema se encuentra en un estado y el conjunto
total de estados en los que se puede encontrar un sistema es finito.
II. Pueden responder a un nmero finito de acontecimientos diferentes.
III. El estado en el que se encuentra el sistema resume toda la informacin
referente a todos los acontecimientos pasados.
IV. La respuesta a un acontecimiento solo se determina en funcin del
acontecimiento y del estado en que se encuentra el sistema.
Por ejemplo: Un interruptor mecnico biestable, un ascensor, etc.
PARCIAL 2
1: AUTOMATAS FINITOS
Este ejemplo reconocer toda cadena que tenga un impar de unos.
Comenzamos eligiendo la siguiente opcin

Ahora continuamos haciendo el diseo donde creamos una transicin del


estado q0 al estado q1

ESTADO INICIAL ESTADO FINAL

TRANSACCION
De esta manera se crea otra transaccin de q1 a q0 que es de no aceptacin
con esto se tiene el primer ciclo en el cundo se lea el primer uno se pase a
estado final y luego el segundo uno ase la cantidad par y se pasa a estado
inicial el siguiente uno se vuelve a regresar a estado final y da tres

Ahora damos clic en imput, luego elegimos Multiple Run para poder checar el
resultado de nmeros impares

Ahora colocaremos unos ejemplos para checar que funciona correctamente


El autmata funciono correctamente aceptando nicamente los nmeros
impares.

2: EXPRECIONES REGULARES

Como primer caso contamos con una expresin regular

Ahora para ver que la expresin regular funcione damos clic en las siguientes
opciones
Para continuar colocamos una cadena que ser aceptada y veremos como
funciona

cadena

Como se muestra comienza con a y es marcado q0, ahora daremos clic en


Step para que contine en el siguiente estado as continuara si es aceptada la
cadena
En la siguiente imagen nos muestra que la cadena no es aceptada por que no
cuenta con la transicin D

Si corregimos y colocamos la transaccin faltante debe aceptar la expresin


regular
3: Conversin AFND a AFD
Convertiremos el siguiente autmata finito no determinstico (una de sus
caractersticas es que posee transacciones vacas) en su equivalente autmata
finito determinstico

Ahora iremos a las siguientes opciones


Y nos aparecer de la siguiente forma para continuar damos clic en Done? Y le
damos clic en aceptar para abrir la siguiente ventana

Obtendremos otra venta nueva


Ahora continuamos con los siguientes pasos

Se obtendr la siguiente forma


Ahora damos clic en la siguiente opcin

Y tendremos la siguiente forma


Para continuar le daremos finalizar y nos mostrara otra ventana

ahora le daremos clic en complete para continuar


Como siguiente paso da clic en Done y damos clic en aceptar

Y tendremos el resultado final donde ya est convertido a AFD


AUTOMATA FINITO POR CODIGO

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace toro_pro
{

public partial class Form1 : Form


{
abstract class AbstractAutomata
{
protected int _s;
protected int[] _f;
protected int[,] _stateTable;

///<sumary>
///</sumary>
///<param name="f">
///<param name="stateTable"></param>
///<returns></returns>
public AbstractAutomata(int[] F, int[,] stateTable)
{
_s = 0;
_f = F;
_stateTable = stateTable;
}
///<sumary>
///</sumary>
///<param name="s"></param>
///<param name="c"></param>
///<returns></returns>
public abstract int GetState(int s, char c);
///<sumary>
///</sumary>
///<param name="inputString"></param>
//<returns></returns>
public abstract bool RecognizeToken(string inputString);

///<sumary>
///</sumary>
///<param name="inputString"></param>
//<returns></returns>
protected bool RecognizeBase(string inputString)
{
int n = 0;
char c = inputString[n++];
while (n <= inputString.Length)
{
_s = GetState(_s, c);
if (_s != -1 && n < inputString.Length)
c = inputString[n++];
else
break;
}
for (int i = 0; i < _f.Length; i++)
if (_f[i] == _s)
{
_s = 0;
return true;
}
_s = 0;
return false;
}

}
List<AbstractAutomata> _automatas;

class NumDec : AbstractAutomata


{
public NumDec(int[] F, int[,] stateTable)
: base(F, stateTable)
{
}

public override int GetState(int s, char c)


{

switch (c)
{
case '0':
return _stateTable[s, 0];

case '1':
return _stateTable[s, 1];

case '2':
return _stateTable[s, 2];

case '3':
return _stateTable[s, 3];

case '4':
return _stateTable[s, 4];

case '5':
return _stateTable[s, 5];

case '6':
return _stateTable[s, 6];

case '7':
return _stateTable[s, 7];

case '8':
return _stateTable[s, 8];

case '9':
return _stateTable[s, 9];
case '.':
return _stateTable[s, 10];
default:
return -1;
}
}

public override bool RecognizeToken(string inputString)


{
return RecognizeBase(inputString);
}
}

class Digito : AbstractAutomata


{

public Digito(int[] F, int[,] stateTable)


: base(F, stateTable)
{
}
public override bool RecognizeToken(string inputString)
{
return RecognizeBase(inputString);
}
public override int GetState(int s, char c)
{
switch (c)
{
case '0':
return _stateTable[s, 0];

case '1':
return _stateTable[s, 1];

case '2':
return _stateTable[s, 2];

case '3':
return _stateTable[s, 3];

case '4':
return _stateTable[s, 4];

case '5':
return _stateTable[s, 5];

case '6':
return _stateTable[s, 6];

case '7':
return _stateTable[s, 7];

case '8':
return _stateTable[s, 8];

case '9':
return _stateTable[s, 9];

default:
return -1;
}

public Form1()
{
InitializeComponent();
_automatas = new List<AbstractAutomata>();

int[] F_Digito = new int[] { 1 };


int[,] Tabla_Digito = new int[,] { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, },
{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } };
_automatas.Add(new Digito(F_Digito, Tabla_Digito));
int[] F_NumDec = new[] { 3 };
int[,] Tabla_NumDec = new int[,] { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1
}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -1 },{ 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, -1 } };
_automatas.Add(new NumDec(F_NumDec, Tabla_NumDec));
}

private void btn_analizar_Click(object sender, EventArgs e)


{
if (cmbtoken.SelectedIndex < 0)
MessageBox.Show("SELECCIONE EL TOKEN A RECONOSER ", "AFD
lybrari[HxC]", MessageBoxButtons.OK, MessageBoxIcon.Error);
else
{
AbstractAutomata automata = null;
try
{
automata = _automatas[cmbtoken.SelectedIndex];

bool valida = automata.RecognizeToken(entrada_de_texto.Text);


if (valida)
MessageBox.Show(this, "LA CADENA DE ENTRADA \"" +
entrada_de_texto.Text + "\" ES VALIDA", "AFD library [HxC]",
MessageBoxButtons.OK, MessageBoxIcon.Information);
else
MessageBox.Show(this, "LA CADENA DE ENTRADA \"" +
entrada_de_texto.Text + "\" ES INVALIDA", "AFD library [HxC]",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (ArgumentException)
{
MessageBox.Show(this, "EL AUTOMATA FINITO NO ES ENCONTRADO EN
LA LISTA \"" , "AFD library [HxC]", MessageBoxButtons.OK, MessageBoxIcon.Error);

}
}
}

private void cmbtoken_SelectedIndexChanged(object sender, EventArgs e)


{

private void label1_Click(object sender, EventArgs e)


{

}
}
}
CONCEPTOS BASICOS
1.1 Alfabeto
Un alfabeto es un conjunto finito no vaco cuyos elementos se llaman smbolos.
Denotamos un alfabeto arbitrario con la letra .
Smbolos:
Es una entidad abstracta que no se puede definir, ya que se dejara como una
axioma. Igual que se define un punto en la geometra. La cual normalmente los
smbolos son letras (a, b, c,. z), dgitos (0,1,9, caracteres (+, -, *, /,>,< ..).
los smbolos pueden estar formados por varias letras o caracteres.
Alfabeto:
El alfabeto o abecedario es un conjunto de letras, con un determinado orden.
Podramos precisamente decir que el alfabeto es un conjunto de letras
(caracteres o grafemas) de un sistema de escritura, cada una representa
aproximadamente un fonema (consonante o vocal).

1.2 Cadenas.
Una cadena o palabra sobre un alfabeto . admitimos la existencia de una nica
cadena que no tiene smbolos, la cual se denomina cadena vaca y se denota
con . la cadena vaca desempea, en la teora de lenguajes formales, un papel
similar al que desempea el conjunto vaco en la teora de conjuntos.
Longitud de cadena.
La longitud de cadena es el nmero de smbolos que contiene. La notacin
empleada es la que es la que se indica en el ejemplo:
Utilizamos las cadenas de los ejemplos:
I abcb I = 4,
I a + 2*b I = 5
I 000111 I = 6
I if a > b then a = b; I = 9
Cadena Vaca.
Una cadena vaca es la nica cadena de caracteres de tamao cero. Y la
podemos denotar usualmente con letras o (Griegas).
Concatenacin de cadenas.
La concatenacin de dos cadenas u y v, escrita uv, es "pegar" las dos cadenas
para formar una nueva.
Ejemplo:
Sea u = ab
v = ca
w = bb. Entonces
uv = abca
uw = cabb
(uv) w = abcabb
u(vw) = abcabb

El resultado de la concatenacin de u, v y w es independiente del orden en que


las operaciones son ejecutadas. Matemticamente esta propiedad es conocida
como asociatividad.
Universo del discurso.
Es un conjunto de todas las cadenas donde podemos formar con smbolos del
alfabeto V le denominamos universo del discurso de V y la representamos de la
siguiente manera W (V). Es evidente que W(V) es un conjunto infinito y que la
cadena vaca pertenece a W(V).
Ejemplo:
Un afabeto con una sola letra V = { a }, podemos decir que el universo del
discurso es: W(V) = { , a, aa, aaa, aaaa,....} y asi contiene una cadenas infinitas.

1.3 Herramientas computacionales ligadas con lenguajes


TRADUCTOR:

Un traductor es un programa que tiene como entrada un texto escrito en un


lenguaje (lenguaje fuente) y como salida produce un texto escrito en un lenguaje
(lenguaje objeto) que preserva el significado de origen.

Ejemplos de traductores son los ensambladores y los compiladores.

COMPILADOR:

El compilador es un programa informtico que traduce un programa escrito en


lenguaje de programacin y lo pasa a lenguaje de programacin, podemos decir
que este programa nos permite traducir un cdigo fuente de un programa en
lenguaje de nivel alto, y lo pasmos a otro nivel inferior (lenguaje maquina).
INTERPRETES:

Traducen el cdigo fuente a un formato interno.


Ejecuta o interpretan el programa traducido al formato interno.

Donde la primera pertenece al interprete el cual llama a veces al compilador, as se


genera el cdigo interno, pero no es el lenguaje de mquina, ni lenguaje de smbolos,
ni mucho menos un lenguaje de nivel alto.

ENSAMBLADORES:

El ensamblador es el programa en que se realiza la traccin de un programa


escrito en ensamblador y lo pasa a lenguaje mquina. Directa o no directa la
traduccin en que las instrucciones no son ms que instrucciones que ejecuta la
computadora.

1.4. Estructura de un traductor

ESTRUCTURA DE UN TRADUCTOR:
Un traductor es un programa que tiene como entrada un texto escrito en un lenguaje
(lenguaje fuente) y como salida produce un texto escrito en un lenguaje
(Lenguaje objeto) que preserva el significado de origen.
1.
Ejemplos de traductores son los ensambladores y los compiladores.
2.
En el proceso de traduccin se identifican dos fases principales:

3.
Fase de anlisis

4.
Fase de Sntesis
1.5 Fases de un compilador
FASES DE UN COMPILADOR:
Los compiladores son programas de computadora que traducen de un lenguaje
a otro. Un compilador toma como su entrada un programa escrito en lenguaje
fuente y produce un programa equivalente escrito en lenguaje objeto.

Un compilador se compone internamente de varias etapas, o fases, que


realizan operaciones lgicas.

1.-Analizador lxico:
Lee la secuencia de caracteres de izquierda a derecha del programa fuente y
agrupa las secuencias de caracteres en unidades con significado propio
(componentes lxicos o tokens en ingles).
Las palabras clave, identificadores, operadores, constantes numricas, signos
de puntuacin como separadores de sentencias, llaves, parntesis, etc. , son
diversas clasificaciones de componentes lxicos.

2.-Anlisis sintctico:
Determina si la secuencia de componentes lxicos sigue la sintaxis del
lenguaje y obtiene la estructura jerrquica del programa en forma de rbol,
donde los nodos son las construcciones de alto nivel del lenguaje.
Se determinan las relaciones estructurales entre los componentes lxicos,
esto es semejante a realizar el anlisis gramatical sobre una frase en lenguaje
natural. La estructura sintctica la definiremos mediante las gramticas
independientes del contexto.

3.-Anlisis semntico:
Realiza las comprobaciones necesarias sobre el rbol sintctico para determinar
el correcto significado del programa.
Las tareas bsicas a realizar son: La verificacin e inferencia de tipos en
asignaciones y expresiones, la declaracin del tipo de variables y funciones
antes de su uso, el correcto uso de operadores, el mbito de las variables y la
correcta llamada a funciones.
Nos limitaremos al anlisis semntico esttico (en tiempo de compilacin),
donde es necesario hacer uso de la Tabla de smbolos, como estructura de datos
para almacenar informacin sobre los identificadores que van surgiendo a lo
largo del programa. El anlisis semntico suele agregar atributos (como tipos de
datos) a la estructura del rbol semntico.

4.-Generacin y optimizacin de cdigo intermedio:


La optimizacin consiste en la calibracin del rbol sintctico donde ya no
aparecen construcciones de alto nivel. Generando un cdigo mejorado, ya no
estructurado, ms fcil de traducir directamente a cdigo ensamblador o
mquina, compuesto de un cdigo de tres direcciones (cada instruccin tiene un
operador, y la direccin de dos operndoos y un lugar donde guardar el
resultado), tambin conocida como cdigo intermedio.
5.-Generador de cdigo objeto:
Toma como entrada la representacin intermedia y genera el cdigo objeto. La
optimizacin depende de la mquina, es necesario conocer el conjunto de
instrucciones, la representacin de los datos (nmero de bytes), modos de
direccionamiento, nmero y propsito de registros, jerarqua de memoria,
encauzamientos, etc.
Suelen implementarse a mano, y son complejos porque la generacin de un
buen cdigo objeto requiere la consideracin de muchos casos particulares.

6.-Tabla de Smbolos:
Es una estructura tipo diccionario con operaciones de insercin, borrado y
bsqueda, que almacena informacin sobre los smbolos que van apareciendo
a lo largo del programa como son: los identificadores (variables y funciones)
Etiquetas tipos definidos por el usuario (arreglos, registros, etc.)
Adems almacena el tipo de dato, mtodo de paso de parmetros, tipo de retorno
y de argumentos de una funcin, el mbito de referencia de identificadores y la
direccin de memoria. Interacciona tanto con el analizador lxico, sintctico y
semntico que introducen informacin conforme se procesa la entrada. La fase
de generacin de cdigo y optimizacin tambin la usan.

7.-Gestor de errores:
Detecta e informa de errores que se produzcan durante la fase de anlisis. Debe
generar mensajes significativos y reanudar la traduccin.

Encuentra errores: En tiempo de compilacin: errores lxicos (ortogrficos),


sintcticos (construcciones incorrectas) y semnticos (p.ej. errores de tipo) En
tiempo de ejecucin: direccionamiento de vectores fuera de rango, divisiones por
cero, etc. De especificacin/diseo: compilan correctamente pero no realizan
lo que el programador desea.
Se trataran slo errores estticos (en tiempo de compilacin). Respecto a los
errores en tiempo de ejecucin, es necesario que el traductor genere cdigo para
la comprobacin de errores especficos, su adecuado tratamiento y los
mecanismos de tratamiento de excepciones para que el programa se contine
ejecutando.

1.6 Definicin formal de una Expresin Regular.


Es un equivalente algebraico para un autmata.
Utilizado en muchos lugares como un lenguaje para describir patrones en texto
que son sencillos pero muy tiles.
Pueden definir exactamente los mismos lenguajes que los autmatas pueden
describir: Lenguajes regulares.
Ofrecen algo que los autmatas no: Manera declarativa de expresar las cadenas
que queremos aceptar.
Dado un alfabeto Dado un alfabeto , una , expresin regular sobre expresin
regular sobre se define de forma recursiva:
ER primitivas: , , {a | a }
Si y son ER, entonces son tambin ER: + (unin), (concatenacin),
* (cierre), ().
No existen otras reglas para la construccin de ER sobre .
Ejemplos de usos.
Comandos de bsqueda, e.g., grep de UNIX.
Sistema de formato de texto: Usan notacin de tipo expresin regular para
describir patrones.
Convierte la expresin regular a un DFA o un NFA y simula el autmata en el
archivo de bsqueda.
Generadores de analizadores - Lxicos. Como Lex o Flex.
Los analizadores lxicos son parte de un compilador. Dividen el programa fuente
en unidades lgicas (tokens) divide el programa fuente en unidades.
Produce un DFA que reconoce el token.
Las expresiones regulares denotan lenguajes.
Por ejemplo, la expresin regular: 01* + 10* denota todas las cadenas que son o
un 0 seguido de cualquier cantidad 1's o un 1 seguida de cualquier cantidad de
0's.
Operaciones de los lenguajes:
Unin: Si L y M son dos lenguajes, su unin se denota por L U M.
Concatenacin: La concatenacin es: LM o L.M.
Cerradura (o cerradura de Kleene): Si L es un lenguaje su cerradura se denota
por L *.
Si E es una expresin regular, entonces L(E) denota el lenguaje que define E.
Las expresiones se construyen de la manera siguiente:
Las contantes y son expresiones regulares que representan a los lenguajes L
(Q) = {Q} y L () L = respectivamente.
Si a es un smbolo, entonces es una expresin regular que representan al
lenguaje: L (a) = {a}.

1.7 Operaciones
Unin o Alternativa: Consideremos dos lenguajes diferentes definidos sobre el
mismo alfabeto L1 W() y L2 W(). Se denomina unin de ambos lenguajes
al lenguaje formado por las palabras de ambos lenguajes:
L1 U L2={ x | x L1 x L2}
Concatenacin: Consideremos dos lenguajes definidos sobre el mismo alfabeto,
L1 y L2. La concatenacin o producto de estos lenguajes es el lenguaje L1 L2=
{ xy / x L1 y x L2} Las palabras de este lenguaje estarn formadas al
concatenar cada una palabra del primero de los lenguajes con otra del segundo.
La concatenacin de lenguajes con el lenguaje vaci es L = L =
Potencia de un lenguaje: Se define la potencia i-sima de un lenguaje a la
operacin de concatenarlo consigo mismo i veces.
Li= LLL ....L
|------------|
i
Clausura positiva de un lenguaje: Se define la clausura positiva de un lenguaje
L:

L + = U L i
i=1
Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles excepto
L. Si L no contiene la palabra vaca, la clausura positiva tampoco
Cierre o Clausura de un lenguaje: Se define el cierre o clausura de un lenguaje
L como:

L* = U Li
i=0
Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles, incluso
L. Todas las clausuras contienen la palabra vaca.
Existen tres operaciones bsicas que se pueden realizar sobre las ER:
Seleccin de alternativas: Se indica con el operador |(barra vertical). Si r y s son
ER, entonces r | s es una ER que define a cualquier cadena que concuerde con
una r o una s, tambin se dice que r | s , es la unin de los lenguajes de r y s y
lo podemos definir: L( r | s ) = L( r ) U L( s ). Esta operacin se puede extender a
ms de dos ER.
Concatenacin: Se indica con la yuxtaposicin de las ER. Si r y s son ER,
entonces rs es una ER que define a cualquier cadena que concuerde con la
concatenacin de r y s , esta operacin la podemos definir: L(rs) = L(r)L(s).Esta
operacin se puede extender a ms de dos ER.
Repeticin o Cerradura: Tambin se conoce con el nombre de cerradura de
Kleene. Se indica con el operador *. Si r es una ER, entonces r* es una ER que
define a las cadenas de caracteres representadas por la concatenacin repetida
de r en n veces, o sea que lo podemos definir como: L(r*) = L(r)*o tambin lo
podemos definir como la unin infinita de conjuntos r :r* n = r 0 r 1 r 2...r n.

1.8 Aplicaciones en problemas reales.


Una de las principales aplicaciones de los hermanos Deitel, son las expresiones
regulares que facilitan la construccin de un compilador. A menudo se utiliza una
expresin regular larga y compleja para validar la sintaxis de un programa. Si el
cdigo del programa no concuerda con la expresin regular, el compilador sabe
que hay un error de sintaxis dentro del cdigo.
Generalmente convierten la expresin regular a un autmata finito no
determinista y despus construyen el autmata finito determinista.
Otra aplicacin del mismo libro es en los editores de texto. Tambin encontramos
a las expresiones regulares en la biologa molecular. Tambin hay esfuerzos
importantes para tratar de representar cadenas como generadas por
expresiones regulares o por lenguajes regulares.
Ejercicios:
1.- Alfabeto:

2.-Cadena:

3.-Concatenacion:
4.- Expresiones Regulares:

5.- Estrella de Kleene y Union:

Dado

se define recursivamente
donde

La definicin de Kleene estrella en V es

Union de Kleene:

6.-Interseccin:
1.- Encuentra la palabra ms larga introducida desde la entrada standard

2.- Interpreta Num Romanos:

3.- Nmeros Reales

4.- Cifrado de Cesar: Remplaza la primer letra por 3 letras despus del abecedario
ejemplo: a=d por a,b1,c2,d3.

5.- /* L2 es el conjunto de palabras en el alfabeto {a, ..., z} */ /* conteniendo un numero par de


a's y de b's. */ /* Saca por pantalla las palabras en L2 y reemplaza por */ /* puntos las dems.

6.- Conteo de Palabras, frases y la longitud:

7.- Elimina espacios en Blanco y deja un espacio entre palabras (n


PRACTICAS