Вы находитесь на странице: 1из 59

1

Universidad Nstor Cceres


Velsquez
Ingeniera de Sistemas
Anlisis Lxico
Ing !ax "ara #aredes
max$ara%&gmailcom
''
(structura de un
Com%ilador
GNU
Eifel
'
))
Anlisis Lxico

* +u queremos ,acer- ($em%lo.


I/ 0i 11 $2
z 1 34
else
z 1 14

La entrada es s5lo una secuencia de


caracteres.
6ti/0i11$26n6t6tz1346n6telse6n6t6tz114
!eta. #artir la cadena de entrada en
su7cadenas
8 clasi9car las su7cadenas de acuerdo a su
rol
GNU
Eifel
)
::
*+u es un to;en-

La salida del analizador lxico es un


con$unto de tokens

Un to;en es una categora sintctica


(n (s%a<ol.

Nom7res= ver7os= ad$etivos= >


(n un lengua$e de %rogramaci5n

Identi9cadores= (nteros= %ala7ras reservadas=


es%acios en 7lanco= >

La siguiente eta%a= toma los to;ens


($em Los identi9cadores se tratan
di/erente que las %ala7ras reservadas
GNU
Eifel
:
??
@o;ens

Los to;en corres%onden a con$untos de cadenas

Identi9cadores. cadenas de letras o dgitos que


comienzan con una letra

(nteros. una cadena de dgitos

#ala7ras reservadas. else= i/= 7egin= >

(s%acios en 7lanco. una secuencia de es%acios= nuevas


lneas= ta7uladores 0#AB CA!ACICAC de7en ser
eliminados2

A%en %ar. un %arntesis izquierdo

Comentarios. /rases que no de7en involucrarse con el


c5digo en si
GNU
Eifel
?
DD
($em%lo

Becordar.
6ti/0i11$26n6t6tz1346n6telse6n6t6tz11.

(l %ar @o;enElexema que regresa el


analizador lxico.
0(s%acio en 7lanco= F6tF 2
0#ala7ra reservada= Fi/F2
0#arntesis a7re= F0F2
0Identi9cador= FiF2
0Belaci5n= F11F2
0Identi9cador= F$F2= etc
>
GNU
Eifel
D
GG
(l #ro7lema del anlisis
Lexicogr9co

Cescri7ir los ti%os de to;ens


Ciagramas de transici5n.
@o;ens como cadenas %ermitidas
desde un estado inicial ,asta un
estado 9nal
(x%resiones regulares.
@o;ens como el con$unto de
cadenas %ermitidas en un lengua$e
GNU
Eifel
G
HH
Beconocimiento de @o;ens

(strategia- Ver ,acia adelante

($em%lo 1.
I:=J 5 s5lo I:J
I3.14J 5 I3..14J este ultimo %arte de
arreglo mult

($em%lo '. 0usando a KAB@BAN2


IK 01(LD L@ N2 L@ menor que
IK 01 (+ N2 (+ igual que
GNU
Eifel
H
+ indica que aun se evala el token para Id
Q indicar retroceso para asignar el id
Misma
evaluacin
MM
Kunciones %rinci%ales del A
Lxico
: /unciones %rinci%ales.

Utilidades de caracteres 8 mane$o


de lneas

#rue7a de #redicado

Acciones

(rrores
GNU
Eifel
M
13 13
Kunciones %rinci%ales del A
Lxico

Utilidades de caracteres 8 mane$o


de lneas
!ane$a o%eraciones 7sicas tales como.

DameCar !ueve el a%untador de 7Nsqueda


8 regresa el carcter

Falla !ueve el a%untador de 7Nsqueda 8 el


a%untador actual en 7usca de otro to;en

Retraer !ueve el a%untador de 7Nsqueda


un carcter de regreso

Aceptar !ueve el a%untador actual de


7Nsqueda donde el a%untador de 7Nsqueda
GNU
Eifel
13
11 11
for(i = 0; ..)
Lexema.
@o;en.
f o 0 ; = i ( r
GNU
Eifel
11
($em%lo de anlisis
A%untador actual 0,acia adelante2
A%untador de 7Nsqueda 0,acia adelante2
1' 1'
for(i = 0; ..)
Lexema. f
@o;en.
f o 0 ; = i ( r
GNU
Eifel
1'
($em%lo de anlisis
!rue"a de !redicado
-
#s$etra( %
Id
Posiblemente
1) 1)
for(i = 0; ..)
Lexema. fo
@o;en.
f o 0 ; = i ( r
GNU
Eifel
1)
($em%lo de anlisis
!rue"a de !redicado
-
#s$etra( %
Id
Posiblemente
1: 1:
for(i = 0; ..)
Lexema. for
@o;en.
f o 0 ; = i ( r
GNU
Eifel
1:
($em%lo de anlisis
!rue"a de !redicado
-
#s$etra( %
#B
Posiblemente
1? 1?
for(i = 0; ..)
Lexema.
@o;en.
f o 0 ; = i ( r
GNU
Eifel
1?
($em%lo de anlisis
&cciones
-
Instala el tipo de token
#rue7a de #redicado

(s#B0 2
0
Posiblemente
for(
O#B= /orP
1D 1D
for(i = 0; ..)
Lexema. (
@o;en. O#B= /orP
f o 0 ; = i ( r
GNU
Eifel
1D
($em%lo de anlisis
0
1G 1G
for(i = 0; ..)
Lexema.
@o;en.
f o 0 ; = i ( r
GNU
Eifel
1G
($em%lo de anlisis
&cciones
-
Instala el tipo de token
#rue7a de #redicado

(s#aIQ+0 2
!rue"a de !redicado
-
#s$etra( %
Id
Posiblemente
(i
O#ABRASBP=O#B= /orP
1H 1H
for(i = 0; ..)
Lexema. i
@o;en. O#ABRASBP=O#B= /orP
f o 0 ; = i ( r
GNU
Eifel
1H
($em%lo de anlisis
Id
Posiblemente
1M 1M
for(i = 0; ..)
Lexema.
@o;en.
f o 0 ; = i ( r
GNU
Eifel
1M
($em%lo de anlisis
&cciones
-
Instala el tipo de token
#rue7a de #redicado

(sIC0 2 1
Posiblemente
#rue7a de #redicado

(sASIT0 2
i=
Oid= iPO#ABRASBP=O#B= /orP
'3 '3
for(i = 0; ..)
Lexema. =
@o;en. Oid= iPO#ABRASBP=O#B= /orP
f o 0 ; = i ( r
GNU
Eifel
'3
($em%lo de anlisis
1
'1 '1
for(i = 0; ..)
Lexema. =0
@o;en. OASITP=Oid= iP=O#ABRASBP=O#B= /orP
f o 0 ; = i ( r
GNU
Eifel
'1
($em%lo de anlisis
&cciones
-
Instala el tipo de token
#rue7a de #redicado

(sASIT0 2
#rue7a de #redicado

(sNum0 2
Cte
Posiblemente
'' ''
for(i = 0; ..)
Lexema. 0
@o;en. OASITP=Oid= iP=O#ABRASBP=O#B= /orP
f o 0 ; = i ( r
GNU
Eifel
''
($em%lo de anlisis
Cte
Posiblemente
') ')
for(i = 0; ..)
Lexema. 0;
@o;en. OC@(= 3P=OASITP=Oid=
iP=O#ABRASBP=O#B= /orP
f o 0 ; = i ( r
GNU
Eifel
')
($em%lo de anlisis
&cciones
-
Instala el tipo de token
#rue7a de #redicado

(sCte0 2
#rue7a de #redicado

(sC(LI!0 2
4
Posiblemente
': ':
for(i = 0; ..)
Lexema. ;
@o;en. OC@(= 3P=OASITP=Oid=
iP=O#ABRASBP=O#B= /orP
f o 0 ; = i ( r
GNU
Eifel
':
($em%lo de anlisis
4
'? '?
for(i = 0; ..)
Lexema. ; @
@o;en. OC(LI!P=OC@(= 3P=OASITP=Oid=
iP=O#ABRASBP=O#B= /orP
f o 0 ; = i ( r '
GNU
Eifel
'?
($em%lo de anlisis
&cciones
-
Instala el tipo de token
#rue7a de #redicado

(sC(LI!0 2
#rue7a de #redicado

(s(BB0 2
---
'D 'D
for(i = 0; ..)
Lexema. @
@o;en. OC(LI!P=OC@(= 3P=OASITP=Oid=
iP=O#ABRASBP=O#B= /orP
f o 0 ; = i ( r '
GNU
Eifel
'D
($em%lo de anlisis

---
'G 'G
for(i = 0; ..)
Lexema. @
@o;en. O(BB= 1POC(LI!P=OC@(=
3P=OASITP=Oid= iP=O#ABRASBP=O#B= /orP
f o 0 ; = i ( r '
GNU
Eifel
'G
($em%lo de anlisis

#rrores
-
Indica el #(()( en la ta"la
de los tipo de token
*ontinua
'H 'H
Ciagramas de @ransici5n0C@2

Cescri7en acciones necesarias


%ara reconocer un @o;en

Becordemos que un C@ esta


com%uesto de nodos 0estados2 8
arcos 0entrada de caracteres2
%resentados antes 8 des%us de
cada nodo

A menudo se em%lea un do7le


nodo que indica el estado fnal o
estado de aceptacin
GNU
Eifel
'H
'M 'M
Ciagramas de @ransici5n0C@2

Becordemos que el primer


estado, de7e saltar todos los
es%acios en 7lanco ,asta
encontrar un carcter no 7lanco

Ejemplo:
Un Identifcador se descri7e como una letra
seguida %or un nNmero ar7itrario de letras o
dgitos
GNU
Eifel
'M
1 '
:
)
!to+ de
!artida
$etra
,) $etra
$etra o
-.gito
,)
$etra o -.gito
)3 )3
Ciagramas de @ransici5n0C@2

Ejemplo: 0#seudoc5digo Indentifcador


segNn dia% 132
GNU
Eifel
)3
Uest1V . C .1 CameCar
SI (sLetra0C2 (N@ANC(S
/est+01 2 !I(N@BAS (sLetra0C2 o (sCigito0C2 WAC(B
* 2= -ame*ar
3I,MI#,4(&5
/est+61 2 (etraer
t .1 0Id= Instala2
Ace%tar
Begresa 0t2
Uest+7V . SINA
Kalla
KINSI
Ciagramas de @ransici5n0C@2

Desarrollo 0#seudoc5digo segNn dia%


132
GNU
Eifel
)1
Uest1V . C .1 CameCar
1
!to+ de
!artida
SI (sLetra0C2 (N@ANC(S
1
!to+ de
!artida
$etra
/est+01 2 !I(N@BAS (sLetra0C2 o (sCigito0C2
WAC(B
* 2= -ame*ar
3I,MI#,4(&5
1 '
!to+ de
!artida
$etra
$etra o
-.gito
Ciagramas de @ransici5n0C@2

Desarrollo 0#seudoc5digo segNn dia%


132
GNU
Eifel
)'
/est+61 2 (etraer
t .1 0Id=
Instala2
Ace%tar
Begresa 0t2
' )
$etra o
-.gito
,)
$etra o -.gito
1
:
!to+ de
!artida
,) $etra
Uest+7V . SINA
Kalla
KINSI
)) ))
Ciagramas de @ransici5n0C@2
Ejemplo: 0#seudoc5digo Const. Entera2
GNU
Eifel
))
: ?
G
D
!to+ de
!artida
-igito
,) -igito
-.gito
,)
-.gito
): ):
Ciagramas de @ransici5n0C@2
Ejemplo: 0#seudoc5digo Const. Entera E dia%
132
GNU
Eifel
):
Uest:V . C .1 CameCar
SI (sCigito0C2 (N@ANC(S
Valor .1 Convertir0C2
* 2= -ame*ar
/est+81 2 !I(N@BAS (sCigito0C2 WAC(B
9alor 2= :0 ; 9alor < *onvertir(*%
* 2= -ame*ar
3I,MI#,4(&5
/est+=1 2 (etraer
t .1 0(nt= Instala2
Ace%tar
Begresa 0t2
Uest+>V . SINA
Kalla
KINSI
&qu. *onvertir(% devuelve la
representacin en caracteres
de un d.gito; a un entero en
el intervalo de 0 a ?
)? )?
Ciagramas de @ransici5n0C@2
Ejemplo: #seudoc5digo Const. Real (foat)
????
)1:1?M'>
Ejemplo: #seudoc5digo Const.
Cientifca ????
)1(L13
:?(E13
GNU
Eifel
)?
)D )D
Autmatas !nitos

Ciagramas de @ransici5n son instrumento de


un modelo /ormal denominado Autmata
Finito conocidos tam7in como M!uinas
de estado fnito o Ma!uinas
secuenciales.

Aut5mata 9nito 1 im%lementaci5n

No determinsticos 0NKA = %or sus siglas en Ingles2

Ceterminsticos 0CKA= %or la misma raz5n2

Un aut5mata 9nito consiste de.


Un al/a7eto de entrada
Un con$unto de estados "
Un estado inicial n
Un con$unto de estados de ace%taci5n # "
Un con$unto de transiciones esta$o esta$o
GNU
Eifel
)D
)G )G
Autmata !nito

@ransici5n
a
s
1
s
%

Se lee

(n el estado
s
1

teniendo como entrada a XaX moverse al estado
s
%

(stando al 9nal de la entrada

Si el estado es de ace%taci5n 1P ace%tar= de otra /orma 1P rec,azar

Si no existe transici5n con sm7olo XaX 1P rec,azar


GNU
Eifel
)G
)H )H
&rafos $e los esta$os $e un
Autmata !nito

Un estado

(stado de inicio

(stado de ace%taci5n

Una transici5n
GNU
Eifel
)H
a
)M )M
Ejemplo

Un aut5mata 9nito que ace%te I1J


@n autmata finito acepta una cadena si
podemos seguir las etiquetas de los
arcos con los caracteres de la cadena
desde el estado de inicio Aasta un
estado de aceptacin
GNU
Eifel
)M
:
:3 :3
'tro Ejemplo

Un aut5mata 9nito que ace%ta


cualquier cantidad de 1Ys seguido de
un 3

Al/a7eto 0 2 . 3=1
9erificar que :::0 es aceptada pero no :::
GNU
Eifel
:3
0
:
:1 :1
'tro ejemplo

0 2 Al/a7eto U3=1V
$a operacin del autmata no esta completamente
definida por la entrada+
#n la entrada :: el autmata puede estar en
cualquier estado (posi"le &3,%
GNU
Eifel
:1
:' :'
(o)imientos

Atra clase de transici5n.


movimientos
$a mquina se puede mover del estado &
al estado B sin leer smbolos de entrada+
GNU
Eifel
:'
:) :)
Autmatas *o Determin+sti,os
- Determin+sti,os

Aut5matas Kinitos No determinsticos


0AKNCEe2
#uede tener ms de una transici5n %or
entrada 8 %or estado
#uede tener movimientos

Aut5matas Kinitos Ceterminsticos 0AKC2


Una transici5n %or entrada 8 %or estado
No ,a8 movimientos

Aut5mata 9nito tiene memoria 9nita


Necesita s5lo codi9car el estado actual
GNU
Eifel
:)
:: ::
Autmatas *o Determin+sti,os
- Determin+sti,os (Ejemplos)

Aut5matas Kinitos NA Ceterminsticos


0AKN2
GNU
Eifel
::
0
C
:
$etra o
-.gito o C
0
C
:? :?
Autmatas *o Determin+sti,os
- Determin+sti,os (Ejemplos)

Aut5matas Kinitos NA Ceterminsticos


0AKNCEe2
GNU
Eifel
:?
: 0
C .
0
8
$-
=
7 6
C
D >
C
.
.
.
.
.
.
:D :D
Autmatas *o Determin+sti,os -
Determin+sti,os (Ejemplos)

Aut5matas Kinitos Ceterminsticos


0AKC2
GNU
Eifel
:D
0
C
:
$etra o
-.gito
0
C
6
C
$etra o
-.gito
C
$etra o
-.gito
:G :G
Autmatas *o Determin+sti,os -
Determin+sti,os (Ejemplos)

AKN %ara un identi9cador 8 Const


(ntera--- 0dia% 'M=))2
GNU
Eifel
:G
Sol #ag )) Z ($m G 0L(!AN(2
:H :H
#un$amentos $e la /eor+a $e
0en1uajes

Los AK descritos son /ormalismo


%ara descri7ir con$unto de
caracteres= %ero %ara ello de7emos
%artir /ormulando expresiones
regulares

#or tanto> es necesario.


Conocer la teora de lengua$es> %ara>
(ntender las (x%resiones Begulares 8
(stas= %asarlas a Aut5matas Kinitos
Ceterminsticos= %ara>
Luego %asarlas a un Algoritmo
GNU
Eifel
:H
:M :M
/eor+a $e 0en1uajes

De!ni,iones 23si,as
Defnicin 1: alfabeto= con$unto 9nito de sm7olos
utilizados en un Lengua$e

A 1 U[= az= 3MV

Al/a7eto A que consiste de los sm7olos [ 8 de


todo el con$unto de letras minNsculas 8 dgitos
0se ,a em%leado la a7reviaci5n az %ara indicar
a todas las letras del a7ecedario
Defnicin 2: cadena = sentencia = palabra
secuencia 9nita de sm7olos de un al/a7eto

\ 1 [a71[

Cadena de caracteres que comienza 8 9naliza


con el sm7olo [ 8 tiene en medio= una cadena
a71
GNU
Eifel
:M
?3 ?3
/eor+a $e 0en1uajes

De!ni,iones 23si,as (,ont.)


Defnicin : | alfabeto |= longitud de la cadena \

| [a71[ | = 5
Defnicin !: , " cadena de caracteres 0vaca2

| ] | 1 3
Defnicin #: XY, concatenaci5n de cadenas

si E = [a71[ - ^ 1 [[ enton,es \^ 1 [a71[[[

@am7in. x] 1 ]x 1 x
GNU
Eifel
?3
/eor+a $e 0en1uajes

De!ni,iones 23si,as (,ont.)


Defnicin $: lengua%e= con$unto de cadenas
L
1 = / CCF Ca":C 1

L2 = / CGC | x es una secuencia de letras dgitos o $s 1

&qu. L2 denota el lenguaHeF cadena de letras I d.gitos I signos CF entre signos de C; este
lenguaHe es aceptado por el &3, de la diap+ 77

&Aora si llamamos al anterior autmata MF entonces

$0 = 0 (M%

Jue quiere decir que $0 es aceptado por M


GNU
Eifel
?1
/eor+a $e 0en1uajes

De!ni,iones 23si,as (,ont.)


Defnicin $: (cont.)

Si em%leamos U V %ara denotar el lengua$e


vaco 8 U ] V %ara denotar el lengua$e que
contiene a la cadena vaca= entonces

U V 4 U ] V
Defnicin &: '(: concatenacin de los lengua%es
L 8 ! 1 U x8 K G L $F I L M V

Si L 1 UCV 8 ! 1 Ux K G es secuencia de letras o


d.gitosV

entonces. L! 1 U[x K G es secuencia de letras o


d.gitosV

Aqu= L! se com%one de cadenas de letras 8


dgitos que comienzan %or un signo [
GNU
Eifel
?'
/eor+a $e 0en1uajes

De!ni,iones 23si,as (,ont.)


Defnicin ): "
i ' concatenada i *eces

Sea. L 1 Ux K G es secuencia de letras o d.gitosV= entonces.


L) 1 Ux8z K GFIFM son secuencias de letras o d.gitosV=
%or tanto L) se com%one de letras o dgitos de al menos longitud )

^ %ara. L3 1 U]V

Defnicin +: ' U (: Ux _ G L $ G L M V

Sea. L 1 U[V 8 ! 1 U[a71[V L U !: U[= [a71[V

@am7in se tiene en cuenta.


U V U L 1 L U U V 1 L

#ero tam7in de7e tenerse en cuenta que.


U]V U L 1 L U U]V ` L 0a menos que este en $% ]
GNU
Eifel
?)
/eor+a $e 0en1uajes

De!ni,iones 23si,as (,ont.)


Defnicin 1,: Cerradura de #leene de "

Sea. L 1 Ux K G es secuencia de letras o d.gitosV=


entonces.
d
L
5
1 L3 U L1

U L'

U U]V U LL

Conde L L 1 USecuencia de letras 5 dgitosV

Defnicin 11: -erradura positi*a. '$


L
L
1 L1 U L'

U L)

U 1 LLa
GNU
Eifel
?:
E6presiones 7e1ulares (E7)

De!ni,iones 23si,as
Son /5rmulas %ara denotar /ciertos0 lengua$es
1232444 No cadena de caracteres56
@a7la %ara entender las denotaciones.
GNU
Eifel
E6presin 7e1ular Denota
] U ] V
a U a V donde a est en el al/a7eto
B
1 8 B'
L
B1 U LB'
B
1 8 B' son (B %ara LB1
8 L
B'
B
1
B
'
5 0B
1
B
'
2 L
B1
8 L
B'
B5
L
B
5
( B )
L
B
??
E6presiones 7e1ulares (E7)

De!ni,iones 23si,as (,ont.)


($em%los e indicaciones res%ecto a la anterior
ta7la.

Becordemos que el lengua$e que consiste de la cadena


vaca se denota %or la (B I ]

!ara a denota el lenguaHe que contiene nicamente el s.m"olo a

#n los s.m"olos de @ninF concatenacin I *erradura AaI


precedencia 2 * N > |

#Gpresin de lenguaHes ms eGtensos tales como2

a K " denota2 /aF "1F es decir; lenguaHe que consiste de a I "

a" denota el lenguaHe2 /a"1 solo de la cadena a"

a* denota el lenguaHe2 / F aF aaF aaaF aaaaF 1 ]

a K "c denota el lenguaHe2 /aF "c1


GNU
Eifel
?D
E6presiones 7e1ulares (E7)

De!ni,iones 23si,as (,ont.)


($em%lo. Sea el al/a7eto de los e$em%los de
las dia% ::= :?= :D.

U[V

LC 1 U 3 _ 1 _ ' _ M _ a _ 7 _ z V
(N@ANC(S. la (B %ara este lengua$e 8 sus
di/erentes AK es.
[ 0 LC _ [ 2 a [
Cenota el lengua$e que em%ieza en [ 8
termina con I[J 8 contiene cualquier nNmero
de letras. d7gitos 8 signos 9 entre ellos
GNU
Eifel
?G
E6presiones 7e1ulares (E7)

Ejemplos (,ont.)
GNU
Eifel
?H
0en1uaje E6presin re1ular
U]V ]
U3V 3
U331V 1 U3VU3VU1V 331
U3= 1V 1 U3VU1V 3 L 1
U3= 13V 1 U3VU13V 3 L 13
U1= ]VU331V 01 L ]2331
U113V
a
U3= 1V 01132
a
03 L 12
U1V
a
U13V 1
a
13
U13= 111= 11313V
a
013 L 111 L 113132
a
U3= 13V
a
0U11V
a
U331= ]V203 L 132
a
00112
a
L 331 L ]2
E6presiones 7e1ulares (E7)

Ejemplos (,ont.)
GNU
Eifel
?M

(l con$unto Uba:ab _ : Ua= bV


a
V es regular so7re Ua= bV
Cemostraci5n.
0en1uaje E6presin 9usti!,a,in
1 UaV a Sase
' UbV b Sase
) UaVUbV1UabV ab Concat de 1 8 '
: UaV UbV1Ua=bV aLb Uni5n de 1 8 '
? UbVUaV1UbaV ba Concat de ' 8 1
D Ua=bV
a
0aLb2
a
Cerr bleene de :
G UbaVUa=bV
a
ba0aLb2
a
Concat de ? 8 D
H UbaVUa=bV
a
UabV ba0aLb2
a
ab Concat de G 8 )

Вам также может понравиться