Professional Documents
Culture Documents
- 4.1 -
Scanner
Scanner
(autmata finito determinista o especfico)
Atributos:
valor, nombre, string.
- 4.2 -
Ejemplos de Smbolos
Identificador:
Forma: una letra seguida de letras o nmeros. Ej. a, b1, c3D Atributo nombre: string con la secuencia de caracteres que forma el identificador en maysculas. Ej. A, B1, C3D Forma: secuencia de dgitos que puede empezar con el signo menos y puede contener un punto. Ej. 10, -3, 15.4, -54.276, .10 Atributo valor: double con el valor numrico. Precisin: entero o real. Forma: ; Forma: if, If, IF, iF Forma: carcter EOF de C.
Nmero:
Punto y Coma:
- 4.3 -
Separacin en Smbolos Los comentarios, saltos de lnea, espacios y tabs no forman parte de la secuencia de smbolos. Al definir los smbolos se ha de considerar como se separan.
Entre dos smbolos se encuentra cararcteres separadores (espacios, tabs, comentarios, etc.) Siempre se intenta leer el smbolo ms largo
Ejemplos:
if ( a > 10 ) bc = 30 * - 4 if ( a >= 10 ) bc = 30 * - 4 int * * a ; zz /* comentario */ + dd
- 4.4 -
Especificacin
Atributos:
Algoritmo para el clculo de cada atributo a partir de la secuencia de caracteres del smbolo.
Forma:
Expresin regular que especifica las secuencias de caracteres que separan los smbolos.
- 4.5 -
Expresiones Regulares
es una expresin regular que representa el conjunto vaco. l es una expresin regular que representa el conjunto con un nico elemento que es la secuencia vaca un string s es una expresin regular que representa un conjunto que solo contiene s. Para evitar confusiones, los metacaracteres que contenga s van entre comillas (|,-,...). V es el conjunto de todos los caracteres (vocabulario).
- 4.6 -
Expresiones Regulares
Operadores
AB Concatenacin {ab| aA y bB} A|B unin {x| xA xB} A* repeticin l|A|AA|AAA... A+ repeticin de uno o ms A|AA|AAA... An repeticin de n veces. (A-B) resta {x| xA y xB}
- 4.7 -
Ejemplos de Expresiones Regulares dgito d=0|1|2|3|4|5|6|7|8|9 entero_sin_signo=d+ entero=(+|-|l)d+ real=d+.d+(l|e(+|-|l) d+) letra l=a|...|z|A...|Z identificador=l(l|d)* string=(V-)*
- 4.8 -
Scanner en C++
void Scanner() { int c; for (;;) { c=IScan->get(); switch (c) { // Separadores case '\r': case '\n': case '\t': case ' ': break; default: if ((c>='a' && c<='z') || (c>='A' && c<='Z') || (c=='_')) { ScanIdentificador(c); return; } else { COut << "No se tratar el caracter " << (char) c << endl; } } } }
- 4.10 -
- 4.11 -
Autmatas Finitos
Autmata finito determinista (K,T,M,S,Z)
K conjunto finito de estados. T conjunto de terminales (smbolos/caracteres de entrada). M:KTK funcin de transicin. SK estado inicial. ZK conjunto de estados finales.
- 4.12 -
a 1 2
b 3
c 4
- 4.13 -
Exp. a
Exp. l
Exp. A|B l
AFND de A
AFND de B
- 4.14 -
Exp. AB l
AFND de A
AFND de B
- 4.15 -
Exp. A*
AFND de A
- 4.16 -
AFND: ac*
Expresin: ab l AFND: a
l
l AFND: b
Expresin: ac*
- 4.17 -
Expresin: ac*
l
AFND: a l l AFND: c* Expresin: a Expresin: b a b l AFND: c
l
Expresin: c*
Expresin: c
Compiladores (02/05/2012 19:52)
l
- 4.18 -
a a
c Problema:
Un a AFND puede seguir ms de un camino durante su interpretacin.
Solucin:
Pasar de AFND a AFD.
- 4.19 -
Paso de AFND a AFD El conjunto de estados del nuevo AFD es el conjunto de las partes del conjunto de estados del AFND. El estado inicial del AFD es el mismo que el del AFND. Un estado del AFD es final si contiene algn estado final del AFND.
- 4.20 -
Clculo del Conjunto de Transiciones Poner el estado inicial en el conjunto de estados K del AFD. El conjunto de transiciones M=. Repetir hasta que K y M no varen:
Para cada estado de K y carcter de entrada aplicar las transiciones posibles del AFND y acumular en K y M el nuevo estado y la nueva transicin.
- 4.21 -
a a
I 1 2,4 2,4 4
S a b c c
AFD
F 2,4 3 4 4 a
1 2,4
c
Compiladores (02/05/2012 19:52) - 4.22 -
Implementacin de un AFD
Algoritmo:
S=estado inicial. Repetir
C=leer_caracter() si T[S][C]==error entonces salir del bucle S=T[S][C]
si S no es final error
- 4.23 -
a
1 2
c Tabla de Transiciones a 2 Err Err Err b Err 3 Err Err c Err 4 Err 4
1 2 3 4
- 4.24 -
- 4.25 -
Consideraciones Prcticas Las palabras reservadas se pueden considerar como identificadores para evitar crear un AFD demasiado grande (2n estados del AFND). Hay que marcar el final del cdigo fuente. Este indicador pertenecer al alfabeto. Los smbolos tienen atributos que hay que calcular.
- 4.26 -
Consideraciones Prcticas
Los estados finales del AFD se han de marcar con el smbolo que reconocen. Como hay que reconoce ms de un smbolo puede ser necesario tener que leer varios caracteres hacia delante. La creacin de un scanner se puede hacer directamente sin considerar los autmatas finitos.
- 4.27 -
Errores Lexicogrficos Tener un smbolo de error que se pasa al parser. Sealar el error e ignorarlo. Tratamiento especfico. Falta informacin para corregir los errores lexicogrficos.
- 4.28 -