Vous êtes sur la page 1sur 7

1.

ANALISIS LEXICO

1.1.

FUNCIONES DEL ANALIZADOR LXICO

Las principales funciones del anlisis lxicos son:


1. Leer el programa fuente como un archivo de caracteres y dividirlo en unidades
lgicas denominada componentes lxicos o tokens
2. Eliminar comentarios o espacios en blanco realizados con las teclas espaciadora,
tabuladora o fin de lneas.
3. Reportar errores si existen
Si el analizador lxico no puede continuar por que ninguno de los patrones concuerda con
un prefijo, entonces es necesario recuperar los errores de entrada as:
1. Borrando el carcter extrao
2. Reemplazando un carcter incorrecto por uno correcto
3. Intercambiando los caracteres adyacentes
4. Borrando caracteres sucesivos de la entrada hasta encontrar un componente bien
formado.

En la fase de anlisis lxico se revisa o se examina el programa fuente como una


cadena de izquierda a derecha y se generan los componentes lxicos o token a partir de
una secuencia de caracteres que tenga un significado vlido.

Constantes numricas: No son solamente enteras, pueden ser decimales o flotantes,


estas tambin deben tener una varias reglas asociadas.
1.2.2 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.
1.2.3 Lexema:
Es una secuencia de caracteres del programa fuente que concuerdan con un patrn.
Ejemplo:
Una variable comienza en letras seguidas de letras y/ dgitos.
CONT1
CONT$

Todo componente lxico puede ser un Lexema?


No. todo componente lxico no es un lexema, porque por ejemplo: if es una palabra
reservada (recurdese que las palabras reservadas son componentes lxicos) y no es un
lexema.
1.2.4 Alfabeto:
Es un conjunto no vaco y finito de smbolos. Se denota con el smbolo

Componentes Lxicos o Tokens

Es un carcter o secuencia de caracteres que representan una unidad de informacin


dentro del programa fuente, estos pueden ser un signo de puntuacin, un operador
aritmtico, una palabra reservada, una constante, etc.
Para la determinacin de un anlisis lxico se tienen en cuenta las siguientes categoras.
Palabras reservadas: Son palabras predefinidas, por ejemplo: for, while, if, etc ...
Smbolos especiales: Elementos que son nicos, por ejemplo: +, -, *, (,), etc.
Variables o identificadores: Es una de las categoras ms
importantes por que son diseadas por nosotros mismos. Estas poseen una varias
reglas asociadas.

Nota: Cuando necesitamos mas de un alfabeto le colocamos un subndice,

1.2. CONCEPTOS BSICOS


1.2.1.

Es un lexema que concuerda con el patrn anterior.


No es un lexema, por que no concuerda con ese patrn.

ejemplo:

{0,1}
{0,1,2,3,.....,9}
{a, b, c, d , e, f ,...., z}
1

Nota: En un solo alfabeto puedo colocar los tres, pero es mejor diferenciarlos por
clase de caracteres

1.2.5 Cadena
Es una sucesin secuencia de caracteres tomados a partir de un alfabeto.
Ejemplos:

010001 es una cadena que pudo ser tomado del alfabeto (


01834 fue tomado del alfabeto (
este alfabeto.

) del alfabeto (

), puesto que sus elementos hacen parte solo de

Nota: La Cadena vaca se representa con el smbolo ( )

=
1.3.1.4.

Inverso de una cadena

Si u es una cadena su inverso se denota u-1 y se define:

1.2.6 Lenguaje:
Es un conjunto finito infinito de cadenas construidos a partir de los smbolos del
alfabeto. Se denota con la letra L. Ejemplo:
1.3.1.5.

L1= {010, 0110, 11100}


L2= {ab, abbc, cajk}

Si v es una subcadena de u, entonces u=xvy donde x e y son cadenas que


pueden ser vacas.

1.3. OPERACIONES BASICAS

Toda cadena es subcadena de ella misma

Concatenacin

y v , entonces u.v=v.u=v
Si u y v
, entonces u.v v.u

, entonces,

v es sufijo de u
1.3.2. Operaciones con Lenguajes

Potencia de una cadena


Z+ entonces la potencia se denota

1.3.2.1. Concatenacin
Si L1 y L2 son lenguajes, entonces su concatenacin se denota L1.L2 L1L2 y se
define:

un y se define

L1L2={ xy| x

=
1.3.1.3.

, entonces,

v es prefijo de u

2. Si u= a1a2 a3. an y v= b1b 2b 3.bm, entonces


u.v= a1a2 a3.an b1b 2b 3.bm

{0}

El vaco es una subcadena de cualquier cadena

1. Si u=

Si u es una cadena y n

, entonces,

Si u y v son cadenas, entonces la concatenacin se denota u.v uv


Se define:

1.3.1.2.

, entonces,

1.3.1. Operaciones con cadenas


1.3.1.1.

Subcadenas, sufijos y prefijos

y L2}

Si L1={ } L2 { } L1L2 = L2L1 = L2

Longitud de una cadena

Si u es una cadena entonces la longitud se denota

y se define:

Ejemplo
L1={a,b}

L2={c,d}

U L = L U L U L U

L+ =

i 1

L1L2= {a,b} {c,d} ={ac, ad, bc, bd}

Ejemplo:

Nota: en las operaciones de concatenacin se debe tener en cuenta que ac no


es lo mismos de ca .
La concatenacin no es conmutativa!!!
1.3.2.2. Potencia de un Lenguaje

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

Sea L un Lenguaje, entonces su potencia se denota Ln y se define:

Nota: 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 ( ).

1.3.2.5. Cerradura de 1 o 2
Ln=

Se denota como L? y se define:


L?=

Ejemplo:
L={a,b}

Ejemplo:

L0={ }
L1=L . L0 =L={a,b}
L2=L .L={a,b} {a,b}= {aa, ab, ba, bb}
L3=L . L2={a,b} {aa, ab, ba, bb}
= {aaa, aab, aba, abb, baa, bab, bba, bbb}
1.3.2.3. Cerradura de Kleene ( ms Casos)
Sea L un lenguaje, la cerradura de de Kleene se denota L* y se define:

U L = L U L U L U

L =

L={a,b}

L0={ }
L1=L . L0 =L={a,b} por tanto,
L?= L0 U L1
= { ,a,b}
1.3.2.5. Propiedades de las cerraduras
1. L+= LL*

i 0

2. L*= L+ u L0= L0 u L+

Ejemplo:

3.(L*)n= L*

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

4.(L*)*= L*

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

i
0
1
U
i=0 L = L u L

5.(L*)+= L*

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

6. (L+)*= L*
7. (L+)+= L+

1.3.2.4. Cerradura Positiva (1 o ms Casos)

8. (L1uL2)*= (L1*L2*)*

Sea L un lenguaje, la cerradura positiva se denota:

1.4. TIPOS DE LENGUAJES

Tipos de lenguaje

Lenguajes
regulares

3. Si r y s son expresiones regulares entonces su lenguaje regular es respectivamente L(r)


y L(s).
a. r es una expresin regular y se representa L (r) = {r}

Lenguajes no
regulares

Especificar

b. (r | s) es una expresin regular y se representa,


L(r) U (s) = {r} U {s} = {r, s}.

Especificar

Expresiones
regulares

c. r . s es una expresin regular y se representa


L(r) L(s) = {r}{s} = {rs}.

GIC

d. r* es una expresin regular y se representa


L*(r) = {r}* = {r, rr, rrr, rrrr}.

1.4.1. Lenguajes regulares


Es un lenguaje que se forma a partir de los lenguajes bsicos como { } y {a} donde a

Propiedades de la expresin regular:

y debe cumplir tres operaciones bsicas: Unin, concatenacin y cerradura de


Kleene.

Sean r, s y t expresiones regulares

Definicin formal:
1. { } es un lenguaje regular
2. Si a pertenece al alfabeto (

) entonces {a} es un lenguaje regular.

3. Si L1 y L2 son lenguajes entonces L1 L2, L1 U L2, L1*, L2* son lenguajes regulares.

1 r. = .r = r
MODULATIVA
2 (r . s) . t = r. (s . t)
ASOCIATIVA (.)
3 (r | s) | t =r | (s | t)
ASOCIATIVA (.)
4 r . (s | t) = r. s | r . t DISTRIBUTIVA
5 (r*)* = r*
IDEMPOTENCIA
6 r+ = r . r*
+

7 r* = | r
8 r? = | r

1.4.
Expresiones Regulares:
Simplifica la especificacin de un lenguaje regular y sirve para especificar un patrn.
Los operadores que se utilizan son los siguientes:
.
Concatenacin
|
Unin
*
Cerradura de Klenne
+
Cerradura Positiva
?
Cerradura 0 o 1 caso
(,)
Agrupar
El orden Jerrquico es el siguiente:
1 (,)
2 *, +, ?
3.
4|
Definicin:
1. es una expresin regular.
2. si a pertenece a

, entonces a es una expresin regular.

Nota: Todas las propiedades del lenguaje se aplican en las expresiones regulares.

Ejemplos N.1:

= {a, b}
a. b*

Alfabeto
Expresin regular

Primer paso: verificar que cada elemento est en el alfabeto, de ser as es una expresin
regular, de lo contrario NO.
Segundo paso: Verificar que la expresin contenga las operaciones bsicas (unin,
concatenacin, cerraduras).

Nota: Habiendo aplicado el primer y segundo paso podemos decir que es una
expresin regular, a y b pertenecen a un alfabeto.

a.

L(a).L*(b) cada uno representa su conjunto, entonces,


L(a).L*(b)={a}.{b}*, luego se desarrolla la cerradura de Kleene de
{b}*={ ,b,bb,bbb,....} concatenado nos da como resultado
{a}.{b}*= {a, ab, abb, abbb, abbbb,.....}.

[b+|(b| )?][b* b?] =b*


[b+|(b| )][b* (b| )] =b*
[b*b*] =b*
[b*]2=b*
b*= b*

Este lenguaje regular corresponde a la expresin regular a. b*.


Ejemplos N.2:

= {a, b, c}
b+a | abc?

Alfabeto
Expresin regular

2.5.2.2. Representacin de Patrones


Habiendo aplicado los dos primeros pasos podemos concluir si es una expresin regular.
b+a | abc? = L+(b).L(a) U L(a) L(b) L?(c) cada uno representa su conjunto
unitario.
= {b, bb, bbb, bbbb,} {a} U {a} {b} { ,c}

Concatenando la 1a parte resulta

= {ba,bba,bbba,bbbba,}U{ab}{ ,c}concatenando 2a parte


= {ba,bba,bbba,bbbba,}U{ab, abc} uniendo resultara
= {ba, bba, bbba, bbbba,, ab, abc }
Este lenguaje regular corresponde a la expresin
Regular b+a | abc?

= {a, b, c}
a*|b*

Ejemplo: Una variable comienza en letras seguidas de letras y/ dgitos.


De igual manera un ejemplo sencillo para comprender el concepto de patrn es el
siguiente
Por extensin tenemos: a,e,i,o,u
Por comprensin tenemos: las vocales
Los que entendemos por compresin es lo que corresponde a un patrn.
Otro ejemplo puede ser {0,1,2,3,4,,9} estos nmeros forma los enteros positivos
A continuacin encontraremos expresiones regulares a las cuales les definiremos el
patrn que corresponda de manera particular y exacta a esa expresin.

Ejemplos N.2:

Podemos recordar que un patrn es una regla que describe el conjunto de cadenas de la
entrada que corresponden a un componente lxico.

Alfabeto
Expresin regular

Habiendo aplicado los dos primeros pasos podemos concluir si es una expresin regular.
a*|b* = L*(a) U L*(b)
= (L(a))* U (L(b))*
= {a}* U {b}*
= { ,a,aa,aaa,aaaa,}U{ ,b,bb,bbb,bbbb,}
={ ,a,aa,aaa,aaaa,,b,bb,bbb,bbbb,}
Este lenguaje regular corresponde a la expresin regular.

Nota: un patrn es nico, pero se puede decir de diferentes formas.

Nota2: el patrn debe ser general para todas las cadenas del lenguaje

Ejemplo N1:
(a|b)*=L*(a|b)
= ({a}U{b})*
= (a,b)*
={ ,a,b,aa,bb,ab,ba,aaa,aab,aba,abb,baa,bab,bba...}
PATRON: Todas las posibles cadenas que se pueden formar con a y b.

Nota: Cada elemento del conjunto es una cadena

1.4.1 Simplificar las expresiones


Para poder simplificar las expresiones es necesario manejar las propiedades de los
lenguajes descritos y demostrados anteriormente, un ejemplo seria:
[b+b*| (b| )?] [(b*b*)+b?]=b*
[b b*b*| (b| )?] [((b*)2)+b?]=b*
[bb*| (b| )?] [(b*)+b?]=b*

Ejemplo N2:
a(a|b)+
=L(a) L+(a|b)
= {a}({a}U{b})+
= (a)(a,b)+
={a}{a,b,aa,bb,ab,ba,aaa,aab,aba,abb,baa,...}
={aa,ab,aaa,abb,aab,aba,aaaa,aaab,aaba,aabb,abaa,}
PATRON: Todas las posibles cadenas que se pueden formar con a y b con
prefijo a y con longitud mayor o igual a 2.

10

Ejemplo N3:

menos de un carcter haciendo que la longitud de las cadenas formadas sea mnimo dos,
as, la cerradura adecuada sera * porque ella toma un estado de vaco. Las
combinaciones que se deben ir formando con la cerradura son con los elementos a, b,
c, lo que como expresin sera a | b | c. Todo esto produce la expresin regular:

(a|ab)
= L*(a|ab)
= ({a} U {ab})*
= (a, ab)*
= { ,a, ab, aab, aba, aaab, aaba, abaab ,ababa, }

c(a | b | c)*

PATRON: Todas las posibles cadenas que comienzan con a y no tiene b


seguidas.

Nota: es importante tener en cuenta que no es necesario desarrollar el


lenguaje del ejercicio propuesto para poder entender su comportamiento, es
decir que si observas la expresin lo veras as,
(a | ab)*
2
1
3

Y as te dars cuenta que las b nunca van a estar

repetidas

Ejemplo N4:
(a|b)*a(a|b)
= L*(a|b)L(a)L(a|b)
= ({a}U{b})*{a}({a}U{b})
= ({a,b})*{a} ({a,b})
={ ,a,b,aa,bb,ab,ba,aaa,aab,aba,abb,baa,bab,bba,}
{aa,ab}
={aa,ab,aaa,aab,baa,bab,aaaa,aaab,bbaa,bbab,abaa,abab,baaa,baab,aaaaa,aaaab,aaba
a,aabab,abaaa,abaab,...}
PATRON: todas las posibles cadenas que se forman con a y b con longitud
mnimo de 2 y que tenga como penltimo smbolo a
Tambin puede ocurrir que nos del patrn y a partir de este deducir la expresin regular
correspondiente.
Para desarrollar este tipo de ejercicios no existe un mtodo definido. Todo consiste en
familiarizarse con las expresiones de tal manera que al leer una frase (patrn) se pueda
construir intuitivamente la expresin. Para esto ayuda conocer en qu consiste cada una
de las operaciones bsicas (concatenacin, unin, cerradura de Klenne, cerradura
positiva) y comprender claramente su funcionamiento, adems de los alcances de
combinar estas operaciones.
Ejercicio N1: Todas las posibles combinaciones de a, b y c que comiencen con c.
Solucin: Como tiene que comenzar por c, lo obvio es que una c vaya al inicio
concatenada con (como dice en el ejercicio) cualquier cadena entre a, b, y c y esa es otra
expresin en si misma, que tiene un nmero infinito de combinaciones. La mejor manera
de armarlo es con una cerradura, si fuera +, siempre la c estara acompaada por lo

11

Nota: es muy importante que el patrn que propongas sea muy especfico y
comprenda completamente todos los requisitos de la expresin regular.

Ejemplo N2: Todas las cadenas que se puedan formar con a y b que tengan una
longitud mayor o igual a 4.
Solucin.
Todas las posibles combinaciones de a y b se construye con la expresin regular (a|b)*;
pero esto permite que se tengan cadenas de longitud menor que 4, por lo que el nmero
de caracteres que aparezcan se debe controlar as: (a|b)4 y se le concatena cualquier
combinacin entre a y b:
4
*
(a|b) (a|b)
Note que esta expresin tambin se puede escribir:
*

(a|b) (a|b)

(a|b) (a|b)
(a|b) (a|b)

Se pone una cerradura que se repite 3 veces con la cerradura de + porque esta no puede
tomar el valor de vaco.
2.6 Definiciones Regulares
Sea un alfabeto, entonces una definicin regular es una secuencia de definiciones de la
forma:
d1
r1
d2
r2
: :
dn
rn

donde di y ri son smbolos de


U {d1, d2, ....}

dn: Expresiones regulares


ri: son expresiones regulares que provienen de un alfabeto
: Se define produce. Se llama definicin, por que uno mismo es el que lo define.
dn se define como rn dn produce rn

12

Ejemplo N1: una variable debe empezar en letra y debe ir seguidos de letras y/o dgitos
Solucin: Lo primero es definir los alfabetos que nos servirn para desarrollar la
definicin regular, es importante que se tenga en cuenta que los alfabetos deben estar
definidos por su tipo, es decir, un alfabeto para las letras, otro para los nmeros y otro
para los signos.
1: {a, b, c,..., z, A, B, C,..., Z}
2: {0, 1, 2,..., 9}
Se necesita en este patrn las letras y los dgitos
Letra

[ a | b | c || z | A | B | C |...| Z]

Se puede simplificar de la siguiente forma:


[a-z, A-Z] es una forma de representar

0 | 1 | 2 | . | 9 | dgito

[0-9]

Ahora la definicin regular var comienza con una letra y como el enunciado del ejercicio
especfico que debe ir seguido por letras y/o dgitos, esto lo puedo representar con una
operacin de concatenacin que contenga las dos posibles definiciones letras o dgitos, la
definicin quedara de esta manera:
var

Letra (Letra | digto)*

nota: comparar este ejercicio con el ejemplo de convertir de patrn a expresin


regular de la pagina 31.

1. Para asegurarnos de que no quede un punto solo


Dec
Ent. Digito En esta no se tiene en cuenta el signo
1 2. Dec
Sig? Digto* . Digito
en este se toma el .5 -.5
2 3. Dec
Sig? Digto* (.Digito)? Para asegurarnos de que
0
no quede un punto solo.

Punto Flotante
Solucin:
1: {0,1,2,....,9}
2: {+,-}
3: {E,e}
Digto
Sig
Exp

[0-9]
(+|-)
(E|e)
?

(Digto+(.Digto+) |(.Digto+))(Exp Sig Digto+ )

Ejemplo N5: Un identificador en un lenguaje de programacin que empieza con letra


mayscula y continua con mayscula o minscula, tiene como mnimo 5 caracteres y no
puede terminar en las subcadenas CIA CIO (MAYUSCULAS).

Solucin:
1: {0,1,2,....,9}
2: {+,-}

Solucin:

[0-9]
(+|-)

[0-9]
(+|-)

Flotante Sig

Ejemplo N2: Nmero Entero

digto
sig

Digto
Sig

Ejemplo N4:

Se necesita definir los dgitos


digito

1: {0,1,2,....,9}
2: {+,-}
3: {.}

1: {a, b, c,..., z, A, B, C,..., Z}

Nota: no todo tiene que ser definido. Disminuir la cantidad de smbolos para
poder simplificarlo.
Ent

sig? Digto+

Nota1: dgito debe ser (+) puesto que despus del signo debe de ir un nmero.
Ejemplo N3: Nmero Decimal

may
min
let
sinC
sinI
sinOA
ide

[A-Z]
[a-z]
[may, min]
[ A,B, D-Z, min]
[A-H, J-Z, min]
[B-N, P-Z, min]
may let+(sinC let2 | let sinI let | let2 sinOA)

Solucin:

13

14

Vous aimerez peut-être aussi