Unidad 5 S6B
Unidad 5 S6B
Unidad 5 S6B
Token
Fase 1 Fase 2
Programa
Analizador Analizador
Fuente
Léxico Sintáctico
Siguiente
Tabla de
Símbolos
5.2 Componentes léxicos, patrones y lexemas
Analizador Léxico
üToken
üPatrón
üLexema
Definiciones de términos comunes
Tokens: Son los elementos léxicos del lenguaje. Ejemplo palabras reservadas,
operadores, etc.
Patrón: Expresión regular que define el conjunto de cadenas que cada uno de los tokens representa.
Lexema: Secuencia de caracteres del código fuente que concuerda con el patrón de un token.
üAtributo
Definiciones de términos comunes
Atributo:
üDiagrama de transiciones
üTabla de transiciones
üEjemplo1
Diseño de Analizadores Léxicos
Un Diagrama de Transiciones (DT) debe funcionar como un analizador léxico; es decir, debe leer
caracteres hasta que complete un token, y en ese momento debe retornar (en los estados de
aceptación) el token que ha leído y dejar la entrada preparada para la siguiente llamada.
Notación
l= letra
l,d token lexema patrón
Enteros 4, 66,2234 dígito+
d=digito otro
l 1 2
*
Identificador
Identificadores ab1 Letra (letra | dígito)*
num 4; token=4
0
d d
3
otro 4 *
tabla de símbolos
identificador num 1 1
Entero
Diagrama de transiciones entero 4 15
Diseño de Analizadores Léxicos
Continuación…
üDiagrama de transiciones
üTabla de transiciones
üEjemplo1
Actividad 4.4
Notación
l= letra
l,d Entradas
Estado l d otro token Retroceso
d=digito otro
l 1 2
*
Identificador
0 1 3 Error - -
1 1 1 2 - -
0
d d 2 - - - Identificador 1
3
otro 4 * 3 - 3 4 -
Entero 4 - - - Entero 1
Diagrama de transiciones Tabla de transiciones
Diseño de Analizadores Léxico
üDiagrama de transiciones
üTabla de transiciones
üEjemplo2
Tabla de transiciones
Diseño de Analizadores Léxicos
Un Diagrama de Transiciones (DT) debe funcionar como un analizador léxico; es decir, debe leer
caracteres hasta que complete un token, y en ese momento debe retornar (en los estados de
aceptación) el token que ha leído y dejar la entrada preparada para la siguiente llamada.
Ejemplo: Diseñe un diagrama de transiciones para el reconocimiento de identificadores, números
enteros sin signo y asignación
ny6=2
2ab=2
Notación l,d a=2 token lexema patrón
l= letra otro Identificadores ab1 Letra (letra | dígito)*
d=digito
l 1 2 * Identificador
Enteros 4, 66,2234 dígito+
0
d d Asignación = =
3
otro 4 *Entero
= otro *Asignación
6
Diagrama de transiciones 5
Tabla de transiciones
Diseño de analizadores Léxicos
Un Diagrama de Transiciones (DT) debe funcionar como un analizador léxico; es decir, debe leer
caracteres hasta que complete un token, y en ese momento debe retornar (en los estados de
aceptación) el token que ha leído y dejar la entrada preparada para la siguiente llamada.
Ejemplo: Diseñe un diagrama de transiciones para el reconocimiento de identificadores, números
enteros sin signo y asignación
ny6=2 Entradas
2ab=2
Notación l,d a=2
Estad l
o
d = otro token Retroce
so
l= letra otro 0 1 3 5 Error - -
d=digito
l 1 2 * Identificador
1 1 1 - 2 - -
2 - - - - Identificador 1
0
d d 3 - 3 - 4 -
3
otro 4 *Entero 4 - - - - Entero 1
= otro *Asignación
5 - - - 6
6
Diagrama de transiciones 5 6 - - - - Asignación 1
Diseño de analizadores Léxicos
Gramática Formal G={ΣT, ΣN,S,P}
ΣT =Es el alfabeto de símbolos terminales
ΣN =Es el alfabeto de símbolos no terminales <>
S =Es el símbolo inicial de la gramática
P =Es un conjunto de producciones gramaticales
<Léxico>::= <identificador>|<Entero>|<Asignación>|<Léxico>
<Léxico>::= <identificador>|<Entero>|<Asignación>
<identificador>::=<l><Alfanumérico>
<Alfanumérico>::=<l>|<d><Alfanumérico>
P <Alfanumérico>::=<l>|<d>
< l >::=(a-z)|(A-Z)
<d>::=(0-9)
<Entero>::=<d><Entero> (identificar) (lexico)
(identificador) (entero) (lexico)
<Entero>::=<d>
<Asignación>::= (=)
Tabla de transiciones
Diseño de analizadores Léxicos
boolean isAsignación (char símbolo){
if (símbolo==‘=’) return TRUE; else FALSE;
}
boolean isDigito(char símbolo){
if( (símbolo==‘0’) || (símbolo==‘1’) || (símbolo==‘2’) || (símbolo==‘3’) || (símbolo==‘4’) || (símbolo==‘5’) ||
(símbolo==‘6’) || (símbolo==´7’) || (símbolo==‘8’) || (símbolo==‘9’) ) return TRUE; else FALSE;
}
boolean isLetra(char símbolo){
if(( (símbolo==‘a’) || (símbolo==‘b’) || (símbolo==‘c’) || (símbolo==‘d’) || (símbolo==‘e’) || (símbolo==‘f’) ||
(símbolo==‘g’) || (símbolo==‘h’) || (símbolo==‘i’) || (símbolo==‘j’) || (símbolo==‘k’) || (símbolo==‘l’) || (símbolo==‘m’) ||
(símbolo==‘ñ’) || (símbolo==‘o’) || (símbolo==‘p’) || (símbolo==‘q’) || (símbolo==‘r’) || (símbolo==‘s’) || (símbolo==‘t’)
|| (símbolo==‘u’) || (símbolo==‘v’) || (símbolo==‘w’) || (símbolo==‘x’) || (símbolo==‘y’) || (símbolo==‘z’) ||
(símbolo==‘A’) || (símbolo==‘B’) || (símbolo==‘C’) || (símbolo==‘D’) || (símbolo==‘E’) || (símbolo==‘F’) ||
(símbolo==‘G’) || (símbolo==‘H’) || (símbolo==‘I’) || (símbolo==‘J’) || (símbolo==‘K’) || (símbolo==‘L’) ||
(símbolo==‘M’) || (símbolo==‘N’) || (símbolo==‘Ñ’) || (símbolo==‘O’) || (símbolo==‘P’) || (símbolo==‘Q’) ||
(símbolo==‘R’) || (símbolo==‘S’) || (símbolo==‘T’) || (símbolo==‘U’) || (símbolo==‘V’) || (símbolo==‘W’) ||
(símbolo==‘X’) || (símbolo==‘Y’) || (símbolo==‘Z’) ) return TRUE; else FALSE;
}
Diseño de Analizadores Léxicos
üDiagrama de transiciones
üTabla de transiciones
üEjemplo3
Diseño de Analizadores Léxicos
Diseñar un analizador léxico que ujlice un DT construido a parjr de las expresiones regulares de los
patrones de los tokens involucrados en expresiones algebraicas (los operadores son "*", "+", "-", "/",
"(" y ")") en las que intervengan números enteros y reales (en notación no exponencial) sin signo y
variables expresadas mediante idenjficadores.
/
7
otro 8 *División
Multiplicación * *
0
d d
División / /
2 - - - - - - - - Suma 1 0
/ 7 otro 8
3 - - - - - - - 4 - d 9 d otro
4 - - - - - - - - Resta 1
l .
13
5 - - - - - - - 6 -
l ,d otro 1
6 - - - - - - - - Multiplicación 1
7 - - - - - - - 8 -
8 - - - - - - - - División 1
9 - - - - 9 - 11 10 -
10 - - - - - - - - Entero 1
11 - - - - 11 - - 12 -
12 - - - - - - - - Real 1
13 - - - - 13 13 - 14 -
14 - - - - - - - - Identificador 1
Tabla de transiciones
Gramática Formal G={ΣT, ΣN,S,P}
ΣT =Es el alfabeto de símbolos terminales
ΣN =Es el alfabeto de símbolos no terminales <>
Diseño de analizadores léxicos
S =Es el símbolo inicial de la gramática
P =Es un conjunto de producciones gramaticales
<Léxico>::= <identificador>|<Entero>|<Real>|<Suma>|
<Resta>|<División>|<Multiplicación>|<Léxico>
<Léxico>::= <identificador>|<Entero>|<Real>|<Suma>|
<Resta>|<División>|<Multiplicación>
<identificador>::=<l><Alfanumérico>
<Alfanumérico>::=<l>|<d><Alfanumérico>
P <Alfanumérico>::=<l>|<d>
< l >::=(a-z)|(A-Z)
<d>::=(0-9)
<Entero>::=<d><Entero>
<Entero>::=<d>
<Real>::=<Entero> . <Entero>
<Suma>::= +
<Resta>::= -
<Multiplicación>::= *
<División>::= /
Diseño de Analizadores Léxicos
Continuación
üDiagrama de transiciones
üTabla de transiciones
üEjemplo4
Diseñar un diagrama de transiciones determinista para reconocer los siguientes componentes léxicos:
Diseño de Analizadores Léxicos while la palabra reservada ”while” (en minúscula). when la palabra reservada “when” (en minúscula).
Ident cualquier secuencia de letas (mayúsculas y minúsculas) y dígitos que empiecen por una letra, y que no coincida
con nunguna de las palabras reservadas.
OperSum el símbolo + Opermult el símbolo * OperInc el símbolo ++
+ 3
otro 4 *OperInc token lexema patrón
1
otro 2 *Suma
PRwhile
PRwhen
while
when
while
when
+ 5
otro 6 *Multiplicación
Ident ab1, ss3 letra (letra | dígito)*
OperSum + +
*
a,d otro 8 *Identificador OperMult * *
0
a to ro (*7) OperInc ++ ++
7
otro
l e otro
otro
w i 11 12 13 14 *PRwhile Notación
a=letra=(a-z |A-Z)
⍷ 9 h d=digito
. e
10
n otro
otro
15 16 17
to ro
otro
*PRwhen
(*7)
Estado + * a d w h i l e n otro token Retroceso
0 1 5 7 9 - - - - - - ⍷ -
1 3 - - - - - - - - - 2 -
2 - - - - - - - - - - - Suma 1
3 - - - - - - - - - - 4 -
4 - - - - - - - - - - - OperInc 1
Tabla de transiciones Ejemplo4
5 - - - - - - - - - - 6 -
6 - - - - - - - - - - - Multiplicación 1
7 - - 7 7 - - - - - - 8 -
8 - - - - - - - - - - - Identificador 1
9 - - - - - 10 - - - - 7 - 1
10 - - - - - - 11 - 15 - 7 - 1
11 - - - - - - - 12 - - 7 - 1
12 - - - - - - 13 - - - 7 - 1
13 - - - - - - - - - - 14 -
14 - - - - - - - - - - - PRwhile 1
15 - - - - - - - - - 16 7 - 1
16 - - - - - - - - - - 17 -
17 - - - - - - - - - - - PRwhen 1
Gramática Formal G={ΣT, ΣN,S,P}
Diseño de Analizadores Léxicos ΣT =Es el alfabeto de símbolos terminales
ΣN =Es el alfabeto de símbolos no terminales <>
S =Es el símbolo inicial de la gramática
P =Es un conjunto de producciones gramaticales
<Léxico>::= <identificador>|<Entero>|<Real>|<Suma>|
<Resta>|<División>|<Multiplicación>|<Léxico>
<Léxico>::= <identificador>|<Entero>|<Real>|<Suma>|
<Resta>|<División>|<Multiplicación>
<OperInc>::=<Suma><Suma>
<Suma>::= +
<Multiplicación>::= *
P <identificador>::=<l><Alfanumérico>
<Alfanumérico>::=<l>|<d><Alfanumérico>
<Alfanumérico>::=<l>|<d>
<a>::=(a-z)|(A-Z)
<d>::=(0-9)
<PRwhile>::= while
<PRwhen>::=when
Diseño de Analizadores Léxicos
Continuación
üDiagrama de transiciones
üTabla de transiciones
üEjemplo5
Diseñar un diagrama de transiciones determinista para reconocer los siguientes componentes léxicos:
Diseño de Analizadores Léxicos Letras cuanquier secuenc ia de una o más letras (mayúsculas y minúscula);
Entero cualquier secuencia de uno o más dígitos;
Explos1 la palabra reservada ”bang” (en minúsculas); Explos2 la palabra reservada “boom” (en minúsculas);
True la secuencia “:-)” Falso la secuencia “:-(“ Asignar la secuencia “:=“
*Entero
2 token lexema patrón
5 *Asignar
otro Letras asdC,frg (a-z|A-Z) +
otro
d (⍷) otro *Falso Entero 4, 66,2234 dígito+
1 4 7 8
= ( Explos1 bang bang
otro otro
d otro Explos2 boom boom
:
3
- 6
)
9 10 *True
True :-) :-)
0 b
11
a 12
n 13
g
14
otro 15 *Explos1 Falso :-( :-(
l otro otro otro Asignar := :=
o
20
otro l otro (*20) Notación
o otro l=letra=(a-z|A-Z) +
otro 16
17 m 18
otro 19
d=digito=(0-9) +
*Explos2
⍷
21 *Letras
Estado d : = - ( ) b a n g o m l otro token Retroceso
0 1 3 - - - - 11 - - - - - 20 ⍷ Explos1 1
1 1 - - - - - - - - - - - - 2
2 - - - - - - - - - - - - - - Entero 1
3 - - 4 6 - - - - - - - - - ⍷
4 - - - - - - - - - - - - - 5
5 - - - - - - - - - - - - - - Asignar 1
6 - - - - 7 9 - - - - - - - ⍷
Tabla de transiciones Ejemplo5
7 - - - - - - - - - - - - - 8
8 - - - - - - - - - - - - - Falso 1
9 - - - - - - - - - - - - - 10
10 - - - - - - - - - - - - - True 1
11 - - - - - - - 12 - - 16 - - 20 1
12 - - - - - - - - 13 - - - - 20 1
13 14 20 1
14 15
15 Explos1 1
16 17 20 1
17 18 20 1
18 19
19 Explos2 1
20 20 21
Diseño de Analizadores Léxicos
üDiagrama de transiciones
üTabla de transiciones
üEjemplo6
Diseñar un diagrama de transiciones determinista para reconocer los siguientes componentes léxicos:
Diseño de Analizadores Léxicos Read la palabra reservada “read” Print la palabra reservada “print” Pradir la palabra reservada “pradir”
Redir la palabra reservada ”redir” Raya el símbolo “-”punto el símbolo “.” Uno el símbolo “.----”
Dos el símbolo “..---” Ident cualquier secuencia de letras dígitos que empiece por una letra y no coincida con
ninguna de las palabras reservadas.
token lexema patrón
Read read read
Print print print
Pradir pradir pradir
Redir redir redir
Raya - -
Uno .---- .----
Dos ..---- ..----
Identific ab1, Letra
adores sss3s (letra |
dígito)*
Dadas las siguientes gramáticas, indicar de qué tipo son y cómo es el lenguaje que generan