Professional Documents
Culture Documents
GUERRERO
MATERIA:
LENGUAJES AUTOMATAS
tarea
DOCENTE:
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
| ababb |a = 2
| aaab |c = 0
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.
No es distributiva, L1
(L2 L3
) L1
L2
L1
L3
notacin exponencial.
L
0={}
1=L={a,ba}
...
As L*=L0 U L1 U L2 U ...
, a diferencia de L*
que si lo posee.
L
0={}
1=L={a,ba}
...
As L+=L1 U L2 U ...
Cierres de un alfabeto: *
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
2: EXPRECIONES REGULARES
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
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
{
///<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;
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;
}
}
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>();
}
}
}
}
}
}
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
COMPILADOR:
ENSAMBLADORES:
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.
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.
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.
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.
2.-Cadena:
3.-Concatenacion:
4.- Expresiones Regulares:
Dado
se define recursivamente
donde
Union de Kleene:
6.-Interseccin:
1.- Encuentra la palabra ms larga introducida desde la entrada standard
4.- Cifrado de Cesar: Remplaza la primer letra por 3 letras despus del abecedario
ejemplo: a=d por a,b1,c2,d3.