Está en la página 1de 14

1.

CONCEPTOS BSICOS



Los computadores ejecutan instrucciones escritas en un lenguaje de bajo nivel
entendible por la mquina, sin embargo este tipo de lenguajes es difcilmente
comprensible por el programador de la misma, por ello existen lenguajes de
programacin de alto nivel, significativos y de mayor similitud al lenguaje natural,
gracias a los cuales el programador puede escribir las instrucciones que
constituyen a los programas y que posteriormente, mediante un proceso de
Traduccin o Interpretacin sern convertidas al lenguaje de bajo nivel entendibles
por la mquina.

Para efectuar el proceso anteriormente descrito se hacen uso de Traductores o
Intrpretes. Los primeros son programas que toman como entrada un texto escrito
en un lenguaje fuente y generan como salida otro texto en un lenguaje objeto, es
importante resaltar que los traductores leen y traducen la totalidad de
instrucciones. Los intrpretes efectan la operacin de conversin de las
instrucciones contenidas en el lenguaje fuente hacia el lenguaje objeto, paso a
paso, por cada sentencia que constituye el texto de entrada.

Surgen entonces una serie de diferencias entre la funcionalidad de los traductores
e intrpretes, los programas se ejecutan ms rpidamente una vez traducidos, por
su parte, para el programador es ms cmodo construir un programa mediante un
intrprete, que va mostrando los errores que se generan, paso a paso, por ello se
dice que es ms sencilla la correccin de errores en los intrpretes que en los
traductores, debido a que el cdigo fuente est presente durante la ejecucin.

Para el proceso de traduccin se usa una variada gama de programas, cada uno
de los cuales tiene delimitadas funcionalidades. A continuacin se describen cada
uno de ellos.

Compilador: Es el encargado de efectuar la traduccin del cdigo fuente a
lenguaje ensamblador.

Ensamblador: Toma las instrucciones traducidas por el compilador a lenguaje
ensamblador y las traduce a cdigo mquina reubicable.

Montador: Se encarga de montar las diferentes unidades de cdigo reubicable en
una nica unidad.

Cargador: Es el encargado de cargar a memoria principal el programa entero
como cdigo mquina ejecutable.

Los traductores efectan el proceso en una serie de fases que en algunos casos
se traslapan entre s, estas son: anlisis, sntesis, generacin de cdigo
intermedio y optimizacin de cdigo. La fase de anlisis implica la evaluacin
lxica, sintctica y semntica del cdigo fuente.

Anlisis lxico: Durante esta primera subfase se lee el programa fuente de
izquierda a derecha y agrupndose los caracteres (componentes lxicos o tokens)
en secuencias que adquieren significado y se eliminan los espacios y lneas en
blanco, comentarios y todos los datos innecesarios contenidos en el programa
fuente, se verifica adems que smbolos del lenguaje tales como palabras
reservadas y operadores estn correctamente escritos. Para este proceso de
reconocimiento de patrones se hace uso de expresiones regulares y autmatas
finitos, temticas que posteriormente sern abordadas en este libro.

Anlisis sintctico: En esta subfase, componentes lxicos o tokens son
agrupados en frases gramaticales que el traductor utiliza para sintetizar la salida,
comprobndose si el resultado obtenido del anlisis lxico es sintcticamente
correcto, de acuerdo a los patrones establecidos por la gramtica (tema que se
abordar posteriormente en este libro). Se genera en esta subfase un rbol de
anlisis sintctico que representan las frases gramaticales del programa fuente.

Anlisis semntico: En esta subfase se revisa el programa fuente, con el
propsito de identificar errores semnticos, para ello se utiliza la estructura de
datos (rbol de anlisis sintctico), generada en la subfase anterior, con el objeto
de identificar los operadores y los operandos de las expresiones y proposiciones.

De acuerdo a lo anterior, los procesos de traduccin e interpretacin implican el
uso de smbolos y las secuencias que stos constituyen, teniendo en cuenta que
el procesamiento de los smbolos y secuencias debe efectuarse en un tiempo
finito, razn por la cual la coleccin de smbolos que son procesados debe
tambin ser finita.

Con el propsito de comprender en detalle los fundamentos teoricos concernientes
a los lenguajes y gramticas formales, se hace necesario abordar las temticas
referidas a los componentes lxicos, patrones y lexemas, los cuales se precisan a
continuacin.

1.1 COMPONENTES LXICOS O TOKENS

Los componentes lxicos son como las palabras de un lenguaje natural, Cada
componentes lxico es un carcter o secuencia de caracteres que representan
una unidad de informacin dentro del programa fuente, stos pueden ser un signo
de puntuacin, un operador aritmtico, una palabra reservada, una constante o
una variable, entre otras.

Los nombres de los tokens son los smbolos de entrada que procesa el analizador
sintctico.

Para la determinacin de un anlisis lxico se tienen en cuenta las siguientes
categoras.

Categora 1. Palabras reservadas: Son palabras predefinidas, por ejemplo: for,
while, if, etc los cuales son cadenas predefinidas que no cambian.

Categora 2. Smbolos especiales: Elementos que son nicos, por ejemplo: +, -,
*, (,), etc. Algunos smbolos pueden ser compuestos por mltiples caracteres, tales
como >=, ==,<>, etc. En cualquier caso el analizador lxico debe reconocer ese
componente.

Categora 3. Variables o identificadores: Es una de las categoras ms
importantes por que son definidas por el usuario y por lo tanto la cantidad de
variables que se pueden definir son infinitas. Estas poseen una varias reglas
asociadas que determinan la formacin de dicho identificador, por ejemplo, una
variable para un determinado lenguaje puede tener la siguiente regla: empieza en
letra y puede ir seguida de letras y/o dgitos. Con esta regla se pueden formar
cualquier cantidad de variables que son validas y reconocidas por el analizador
lxico.

Categora 4. Constantes numricas: Pueden ser nmeros en todas sus
presentaciones, es decir enteros, decimales o flotantes, estas tambin deben tener
una varias reglas asociadas.

Los componentes lxicos o tokens se basan en una serie de reglas, denominadas
Patrones y se estructuran en secuencias de caracteres, denominados Lexemas. A
continuacin una definicin de cada uno de ellos.

Patrn: Es una regla que describe el conjunto de cadenas de la entrada que
corresponden a un componente lxico. Ejemplo: Una variable comienza en letras
seguidas de letras y/ dgitos.

Lexema: Es una secuencia de caracteres del programa fuente que concuerdan
con un patrn. Ejemplo: Para el patrn anterior un lexema puede ser CONT1 pero
CONT$ no es un lexema por que no concuerda con ese patrn.

Pregunta: Todo componente lxico puede ser un Lexema?
Respuesta: No. No todo componente lxico es un lexema, pero todo lexema es un
componente lxico, por ejemplo: if es una palabra reservada (recurdese que las
palabras reservadas son componentes lxicos) y no es un lexema por que no
depende de ninguna regla.
Tabla No 1. Componentes Lxicos y Lexemas

1.2 ALFABETOS

Es un conjunto no vaco y finito de smbolos. Se denota con el smbolo .

Cuando se requiere definir ms de un alfabeto, se le coloca un subndice al
smbolo que representa el alfabeto, ejemplo:

=
1
} 1 , 0 {

=
2
} 9 ,....., 3 , 2 , 1 , 0 {

=
3
} ,...., , , , , , { z f e d c b a


En un solo alfabeto se pueden definir los tres alfabetos, puesto que un alfabeto es
un conjunto y por lo tanto se le aplica todas las operaciones de conjunto. Se
sugiere que de acuerdo a la caracterstica de los smbolos estos se puedan
diferenciar por clase de caracteres, as:



=
4 2 3



Por tanto se concluye que un alfabeto se puede formar de la unin de varios
alfabetos.

1.3 CADENA

Las cadenas se forman a partir de un alfabeto. Una cadena es cualquier sucesin
secuencia finita de elementos del alfabeto . Existe una nica cadena que no
tiene smbolos, la cual se denomina cadena vaca y se denota
, esta cadena
representa el mdulo de la concatenacin.

Dado los alfabetos:

=
1
} 1 , 0 {
,

=
2
} 9 ,....., 3 , 2 , 1 , 0 {
y

=
3
} ,...., , , , , , { z f e d c b a


010001 es una cadena tomada del alfabeto

1
del alfabeto

2

01834, es evidente que es una cadena tomada del alfabeto

2
, puesto que
todos sus elementos hacen parte solo de ese alfabeto.

Es importante notar que las cadenas 010 y 100 son diferentes porque a pesar de
tener los mismos smbolos no tienen el mismo orden o secuencia.

El alfabeto utilizado por los lenguajes de programacin es el conjunto de
caracteres ASCII (American Standard Code for Information Interchange Cdigo
Estadounidense Estndar para el Intercambio de Informacin).




1.4 LENGUAJE

Un lenguaje L, sobre un alfabeto, es un conjunto finito o infinito de cadenas,
construidos a partir de los smbolos del alfabeto. Los lenguajes se pueden denotar
con letras maysculas como un conjunto, sin embargo por conveniencia se
denotan con el smbolo L y en caso de que se utilicen varios lenguajes se
diferencia con subndices, de la siguiente forma: L
1
,L
2
, L
3
,.

Ejemplo:

L
1
= {010, 0110, 11100}
L
2
= {ab, abbc, cajk}

1.5 OPERACIONES CON CADENAS

Existe una variedad de operaciones ha definir sobre cadenas, tales como:
concatenacin de cadenas, potencia y longitud de una cadena, inverso,
subcadenas, sufijos y prefijos, cada una de las cuales se describe a continuacin.

1.5.1. Concatenacin de cadenas

Si u y v son cadenas, entonces la concatenacin se denota u.v o uv (sin el punto)
y se define formalmente de la siguiente forma:

1. Si u= y v = , entonces u.v=v.u=v. Es decir, la concatenacin de
cualquier cadena no vaca con una cadena vaca, siempre ser la cadena
no vaca.
2. Si u= y v =

, entonces u.v = v.u. Es decir, la propiedad conmutativa no
es valida para la concatenacin de cadenas.
3. Si u= a
1
a
2
a
3.
a
n
y v= b
1
b
2
b
3.
b
m
, entonces u.v= a
1
a
2
a
3..
a
n
b
1
b
2...
b
m


La concatenacin de cadenas es una operacin asociativa. Es decir, si u,v,w
pertenecen a un alfabeto, entonces (uv)w=u(vw).


Ejemplo: Si u=ab y v=cd, entonces uv = abcd.

1.5.2. Potencia de una cadena

Si u es una cadena y n

N, entonces la potencia se denota como u
n
y se define
de la siguiente forma:

>
=
=
0 ) ( ....
0
n si veces n u uuu
n si
u
n


Ejemplo: si u=ab, entonces u
2
=(ab)
2
=(ab)(ab).

1.5.3. Longitud de una Cadena

Si u es una cadena, entonces la longitud se denota como || y se define de la
siguiente forma:

=
=
=
n
a a a a u si n
u si
u
...
0
3 2 1



Ejemplo: si u=abcd, entonces ||

1.5.4. Inverso de una cadena

Si u es una cadena su inverso se denota u
-1
y se define de la siguiente forma:

=
=
=

n n n n
a a a a a u si a a a a
u si
u
1 3 2 1 1 2 1
1
... .....



Ejemplo: si u = casa, entonces u
-1
= asac


1.5.5. Subcadenas, sufijos y prefijos

Si v es una subcadena de u, entonces u=xvy donde x e y son cadenas que
pueden ser vacas.
-
v u entonces v x y si = = . = . =
, luego se puede
concluir que Toda cadena es subcadena de ella misma.
-
xy u entonces v x y si = = . = . =
, luego se puede
concluir que El vaco es una subcadena de cualquier cadena.
-
vy u entonces v x y si = = . = . =
, luego v es prefijo
de u.
-
xv u entonces v x y si = = . = . =
, luego v es sufijo de
u

1.6 OPERACIONES CON LENGUAJES

Existe una variedad de operaciones ha definir sobre lenguajes, tales como:
concatenacin de lenguajes, potencia de un Lenguaje, cerradura de Kleene,
cerradura positiva y cerradura de 0 1 caso, cada una de las cuales se describe a
continuacin.

1.6.1. Concatenacin de Lenguajes

Si L
1
y L
2
son lenguajes, entonces su concatenacin se denota L
1
.L
2
L
1
L
2
y se
define de la siguiente forma:

L
1
L
2 =
{ xy | x

L
1 .
y

L
2
}
Si L
1=
{

}
.
L
2 =
{

} L
1
L
2 =
L
2
L
1 =
L
2

Ejemplo:

Si L
1=
{a,b} y L
2=
{c,d}
L
1
L
2
= {a,b}{c,d} ={ac, ad, bc, bd}
Si u= a
1
a
2
a
3.
a
n
y v= b
1
b
2
b
3.
b
m
, entonces u.v= a
1
a
2
a
3..
a
n
b
1
b
2...
b
m

En las operaciones de concatenacin se debe tener en cuenta que ac no es lo
mismos que ca porque la concatenacin no es una operacin conmutativa.



1.6.2. Potencia de un Lenguaje

Sea L un Lenguaje, entonces su potencia se denota como L
n
y se define de la
siguiente forma:

>
=
=

0
0 } {
1
n LL
n
L
n
n



Ejemplo:

L={a,b}
L
0
={

}
L
1
=L . L
0
=L={a,b}
L
2
=L .L={a,b} {a,b}= {aa, ab, ba, bb}
L
3
=L . L
2
={a,b} {aa, ab, ba, bb}
= {aaa, aab, aba, abb, baa, bab, bba, bbb}

1.6.3. Cerradura de Kleene ( ms Casos)

Sea L un lenguaje, la cerradura de de Kleene se denota como L* y se define de la
siguiente forma:

. ..........
2 1 0
0
*
UL UL L L L
i
i
= =

=



Ejemplo:

L={a,b}
L*={

} U {a,b} U {aa, ab, ba, bb}
L*={

, a, b, aa, ab, ba, bb,}

Esta cerradura genera TODAS las posibles combinaciones entres los elementos
del lenguaje incluyendo el vaco ( ).

1.6.4. Cerradura Positiva (1 o ms Casos)

Sea L un lenguaje, la cerradura positiva se denota:
. ..........
3 2 1
1
UL UL L L L
i
i
= =

=
+



Ejemplo:

L
+
={a, b, aa, ab, ba, bb,}

Esta cerradura genera TODAS las posibles combinaciones entres los elementos
del lenguaje pero la diferencia con la cerradura de Kleene, es que en este NO se
incluye el vaco ( ). Es decir:

*
L L _
+


1.6.5. Cerradura de 0 1 caso

Se denota como L
?
y se define de la siguiente forma:
1 0
1
0
?
UL L L L
i
i
= =
=


Ejemplo:

L={a,b}, L
0
={


}, L
1
=L . L
0
=L={a,b} por tanto,
L
?
= L
0
U L
1
= { } U {a, b} = { , a, b}

1.7 PROPIEDADES DE LAS CERRADURAS DE LOS LENGUAJES REGULARES

Los lenguajes regulares tienen una serie de propiedades aplicadas a las
cerraduras anteriormente definidas, a continuacin se enuncian cada una de stas
propiedades.

1. L
+
= LL
*
= L
*
L
2. L
*
= L
+
U L
0
= L
0
U L
+
3.(L
*
)
n
= L
*
4.(L
*
)
*
= L
*
5.(L
*
)
+
= L
*
6. (L
+
)
*
= L
*
7. (L
+
)
+
= L
+
8. (L
1
U L
2
)
*
= (L
1
*
L
2
*
)
*



1.8 EJERCICIOS RESUELTOS

Ejercicio No 1. Demostrar las siguientes igualdades

a) L
+
L
*
=L
+


Solucin:
L
+
L
*
=LL
*
L
*
=L(L
*
)
2
= LL
*
= L
+



b) L
+
L
+=
LL
+


Solucin:
LL
*
LL
*
= LLL
*
L
*
=LL(L
*
)
2
= LL
*
=L
+

c) [L
+
L
*
U (LUL)
?
] [(L
*
L
*
)
+
L
?
]=L
*


Solucin:
[L L
*
L
*
U (LU L)
?
] [((L
*
)
2
)
+
L
?
]=L
*

[L(L
*
)
2
U (LU L)
?
] [(L
*
)
+
L
?
]=L
*
[LL
*
U(LU LU L)][L
*
L
?
] =L
*

[L
+
U(LU L)][L
*
(LU L)] =L
*
[L
+
ULU L][L
*
LUL
*
] =L
*
[L
+
U LUL][L
+
UL
*
] =L
*
[L
*
UL][L
+
U LUL
+
] =L
*
[L
*
][L
+
U L] =L
*

[L
*
][L
*
] =L
*
[L
*
]
2
=L
*
L
*
= L
*

Ejercicio No 2. Dado el lenguaje L={0,1,2}, calcular lo siguiente:

a) L
2


Solucin:
L
2
=
{00,01,02,10,11,12,20,21,22}

b) L
*


Solucin:
L*
=
{e,0,1,2,00,01,02,10,11,12,20,21,22}

c) L
+


Solucin:
L
+
=
{0,1,2,00,01,02,10,11,12,20,21,22}

d) L
?


Solucin:
L
?
=
{ ,0,1,2}

También podría gustarte