Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Compiladores e Intrpretes
ndice
1- Definiciones previas 2- Definicin del analizador lxico
2.1- Funcionamiento 2.2- Separacin Lxico-Sintctico 2.3- Errores lxicos
Compiladores e Intrpretes
ndice
1- Definiciones previas 2- Definicin del analizador lxico
2.1- Funcionamiento 2.2- Separacin Lxico-Sintctico 2.3- Errores lxicos
Compiladores e Intrpretes
Definiciones previas
Token: componente lxico. Smbolos terminales. Lexema: secuencia caracteres. Puede haber conjunto de lexemas que se refieren al mismo token. Patrn: describen el conjunto de cadenas de entradas asociados a un token.
Compiladores e Intrpretes
Definiciones previas
Ejemplo:
Componente Lxico T_Const T_If T_Relacin T_Id Lexemas Const If <,<=,>= Pi,cuenta, d2 Patrn Const If <o> Letra seguida de letras y dgitos
Compiladores e Intrpretes
ndice
1- Definiciones previas 2- Definicin del analizador lxico
2.1- Funcionamiento 2.2- Separacin Lxico-Sintctico 2.3- Errores lxicos
Compiladores e Intrpretes
Compiladores e Intrpretes
Compiladores e Intrpretes
Compiladores e Intrpretes
Compiladores e Intrpretes
10
Separacin Lxico-Sintctico
Razones:
Diseo Eficiencia Independencia del alfabeto
Mtodos de comunicacin:
Buffer intermedio Subrutina
Compiladores e Intrpretes
11
Errores Lxicos
El AL detecta pocos errores.
Visin restringida del programa fuente Ejemplo: rof (int a=0; a<3;a++) El AL no sabe que rof for Puede darse que la cadena de entrada no concuerde con ningn patrn.
Compiladores e Intrpretes
12
Errores Lxicos
Estrategias de recuperacin
Modo pnico: la ms sencilla. Se ignora la entrada hasta que la cadena concuerde con un patrn
Problema: puede confundir al AS
Otras estrategias:
Borrar carcter que sobra Insertar carcter que falta Reemplazar carcter Intercambiar caracteres adyacentes
Compiladores e Intrpretes 13
ndice
1- Definiciones previas 2- Definicin del analizador lxico
2.1- Funcionamiento 2.2- Separacin Lxico-Sintctico 2.3- Errores lxicos
Compiladores e Intrpretes
14
Construccin del AL
Tres mtodos de construccin:
Utilizar generador Escribir el AL a mano con un lenguaje de alto nivel Escribir el AL a mano en lenguaje ensamblador
Compiladores e Intrpretes
15
a i F
s|t
N(t)
Compiladores e Intrpretes
17
N(s) F
a 2 b 4 5 3
Ejemplo: (a|b)*
Compiladores e Intrpretes
18
Compiladores e Intrpretes
19
El AL debe traducir los lexemas a tokens. Para ello utiliza acciones semnticas. Las ms comunes son:
Compiladores e Intrpretes
20
10
Compiladores e Intrpretes
21
Compiladores e Intrpretes
22
11
Compiladores e Intrpretes
23
2.
Uso de buffers:
Parejas de buffers:
Compiladores e Intrpretes
24
12
Compiladores e Intrpretes
26
13
Compiladores e Intrpretes
27
Compiladores e Intrpretes
28
14
Un carcter centinela (suele ser eof): no existe en le fichero fuente Se pone al final de las mitades en cada movimiento pregunto por l y solo compruebo final de la correspondiente mitad si estoy en un eof. La mayora de las veces solo hago una comprobacin para mover el puntero.
Compiladores e Intrpretes 29
Compiladores e Intrpretes
30
15
Compiladores e Intrpretes
31
Compiladores e Intrpretes
32
16
Compiladores e Intrpretes
33
Compiladores e Intrpretes
34
17
Compiladores e Intrpretes
35
Compiladores e Intrpretes
36
18
Compiladores e Intrpretes
37
Compiladores e Intrpretes
38
19
Compiladores e Intrpretes
39
Compiladores e Intrpretes
40
20
Compiladores e Intrpretes
41
Compiladores e Intrpretes
42
21
Compiladores e Intrpretes
43
Compiladores e Intrpretes
44
22
Compiladores e Intrpretes
45
Compiladores e Intrpretes
46
23
Compiladores e Intrpretes
47
Compiladores e Intrpretes
48
24
Compiladores e Intrpretes
49
Compiladores e Intrpretes
50
25
Compiladores e Intrpretes
51
Compiladores e Intrpretes
52
26
Compiladores e Intrpretes
53
Compiladores e Intrpretes
54
27
Compiladores e Intrpretes
55
Compiladores e Intrpretes
56
28
Compiladores e Intrpretes
57
Compiladores e Intrpretes
58
29
Compiladores e Intrpretes
59
Compiladores e Intrpretes
60
30
Compiladores e Intrpretes
61
Compiladores e Intrpretes
62
31
Compiladores e Intrpretes
63
Compiladores e Intrpretes
64
32
ndice
1- Definiciones previas 2- Definicin del analizador lxico
2.1- Funcionamiento 2.2- Separacin Lxico-Sintctico 2.3- Errores lxicos
Compiladores e Intrpretes
65
Generacin automtica de AL
Existen muchas herramientas para la generacin automtica de AL. Las ms conocidas:
Lex Flex Coco
Compiladores e Intrpretes
66
33
Compiladores e Intrpretes
67
34
Compiladores e Intrpretes
69
Compiladores e Intrpretes
70
35
Compiladores e Intrpretes
71
Compiladores e Intrpretes
72
36
Compiladores e Intrpretes
73
Compiladores e Intrpretes
74
37
Compiladores e Intrpretes
75
Compiladores e Intrpretes
76
38
Compiladores e Intrpretes
77
Compiladores e Intrpretes
78
39
.: comodn, cualquier carcter menos el salto de lnea *: repeticin de 0 a infinito. (Cierre) +: repeticin de 1 a infinito. (Clausura positiva)
Compiladores e Intrpretes
79
(): agrupamiento $: ltimo de la lnea /: condicional sufijo {}: definiciones {x,y}: repeticin acotada de x a y veces. Es muy costoso : se trata como un carcter de texto
Compiladores e Intrpretes
80
40
Compiladores e Intrpretes
81
Compiladores e Intrpretes
82
41
Compiladores e Intrpretes
84
42
Compiladores e Intrpretes
85
Compiladores e Intrpretes
86
43
Compiladores e Intrpretes
88
44
Compiladores e Intrpretes
90
45
Compiladores e Intrpretes
91
Compiladores e Intrpretes
92
46
} rutinas usuarios (zona de rutinas de usuario) tablas de transicin del autmata AFD
Compiladores e Intrpretes
93
Compiladores e Intrpretes
94
47
Compiladores e Intrpretes
95
Compiladores e Intrpretes
96
48
Compiladores e Intrpretes
97
Compiladores e Intrpretes
98
49
Compiladores e Intrpretes
100
50
int yywrap(void): programa acciones ante el fin de fichero. Lex verifica el final de fichero de la siguiente forma:
Utilidad: definir acciones finales y cambiar de fichero fuente (preprocesador). if (c=input()) = = EOF && yywrap() ) return 0; else { ..continua..... }
Compiladores e Intrpretes
101
Compiladores e Intrpretes
102
51
Entrada: ifthenelse
Si coinciden con varias E.R. se toma la que reconoce entrada de mayor longitud. (devuelve IDEN)
Compiladores e Intrpretes
104
52
Compiladores e Intrpretes
105
Salida:
Compiladores e Intrpretes
106
53
Solucin
Compiladores e Intrpretes
107
Compiladores e Intrpretes
108
54
Compiladores e Intrpretes
109
Compiladores e Intrpretes
110
55
Compiladores e Intrpretes
111
56
Compiladores e Intrpretes
114
57
Declaracin de ambientes
%state listaAmbientes
Compiladores e Intrpretes
115
58
Compiladores e Intrpretes
118
59
Compiladores e Intrpretes
119
Compiladores e Intrpretes
120
60
Compiladores e Intrpretes
121
Compiladores e Intrpretes
122
61
ndice
1- Definiciones previas 2- Definicin del analizador lxico
2.1- Funcionamiento 2.2- Separacin Lxico-Sintctico 2.3- Errores lxicos
Compiladores e Intrpretes
123
Compiladores e Intrpretes
124
62
Devolver el lexema + el token en cuestin Devolver una entrada a la tabla de smbolos. de manejo de la tabla.
mtodos
Nmeros
1. 2.
3.
Devolver el lexema problemtica Valor numrico asociado al lexema (hilera de dgitos)+ token funciones de conversin Crear una tabla de constantes y devolver la entrada a la misma.
Compiladores e Intrpretes
125
No hay atributo Agruparse todos los operadores del mismo tipo (binario, ternario, etc.) en un solo token y el atributo distingue cual es. No tiene atributo Crear un buffer de hileras y se devuelve el puntero a su inicio.
Hileras de caracteres
1. 2.
Compiladores e Intrpretes
126
63
ndice
1- Definiciones previas 2- Definicin del analizador lxico
2.1- Funcionamiento 2.2- Separacin Lxico-Sintctico 2.3- Errores lxicos
Compiladores e Intrpretes
127
Decisiones de Diseo
Palabras reservadas
Las palabras reservadas pueden o no ser identificadores. Lo ms sencillo es que las palabras reservadas no sean identificadores, en este caso ocurre que el mismo patrn suele definir a ambos. Soluciones:
Expresin regular para cada lexema que define la palabra reservada Tabla de palabras reservadas con sus tokens. El lexema se busca y si no existe es un identificador.
Compiladores e Intrpretes
128
64
Decisiones de Diseo
Maysculas y minsculas
Una funcin que transforma de minsculas a maysculas.
Si se quiere que el lenguajes no distinga invocar siempre a dicha funcin. Si se quiere que se distinga no se hace nada.
Compiladores e Intrpretes
129
Decisiones de Diseo
Longitud de los identificadores
Un buffer que permita toda la longitud que se quiera.
Si el lenguaje quiere limitar una funcin que trunca el lexema a un mximo y este es con el que se trabaja.
Compiladores e Intrpretes
130
65
Decisiones de Diseo
Nmeros
Si hay varios tipos (entero, real, doble, etc.), un token para cada uno de ellos. Determinar la notacin de los mismos. Utilizar funciones para determinar el valor a partir del lexema.
Comentarios
El problema es detectar los fines de lneas dentro de ellos para mantener informacin de la lnea actual.
Crear un entorno para gestionarlo.
Compiladores e Intrpretes
131
Decisiones de Diseo
Hilera de caracteres
Definir muy bien cmo es una hilera y encontrar su expresin regular que la defina.
Compiladores e Intrpretes
132
66