Vous êtes sur la page 1sur 9

Contenido

Captulo 1. Teora de conjuntos.

1.1 Conjuntos. ............................................................................................................ 3


1.1.1 Definiciones bsicas. ...................................................................................... 3
1.1.2 Operaciones sobre conjuntos. .......................................................................... 6
1.1.3 Diagrama de Venn. ........................................................................................ 7
1.1.4 lgebra de conjuntos. ..................................................................................... 7
1.2 Relaciones. .......................................................................................................... 9
1.2.1 Tipos de relacin. .......................................................................................... 10
1.3 Funciones. ........................................................................................................... 13
1.3.1 Imagen. ........................................................................................................ 13
1.3.2 Grafo de una funcin. ...................................................................................... 14
1.3.3 Tipos de funciones. ........................................................................................ 15
1.4 Grafos. ................................................................................................................ 16
1.4.1 Conceptos bsicos. ........................................................................................ 16
1.4.2 Tipos de grafos. ............................................................................................. 18
1.5 rboles. ............................................................................................................... 21
1.5.1 rboles con raz. ........................................................................................... 21
1.5.2 rboles binarios. ............................................................................................ 22
1.6 Mtodos de demostracin. ....................................................................................... 24
1.6.1 Teoremas. .................................................................................................... 24
1.6.2 Si... entonces. ................................................................................................ 24
1.6.3 Si, y slo si. ................................................................................................... 26
1.6.4 y, o, no. ........................................................................................................ 26
1.6.5 Tipos de teoremas. ......................................................................................... 27
1.6.6 Tipos de demostraciones en la teora de conjuntos. .............................................. 28
1.6.7 Induccin matemtica. ..................................................................................... 29

Captulo 2. Lenguaje.

39

2.1 Definiciones del autor. ........................................................................................... 40


2.2 Definiciones del diccionario. .................................................................................... 40
2.3 Definicin de lenguaje, orientada a la formalidad. ......................................................... 41
2.4 Conceptos bsicos orientados a la teora de compiladores. ............................................ 43
2.4.1 Terminologa asociada a la definicin conceptual de lenguaje. ................................ 43
2.5 Lenguaje muy, pero muy bsico para recetas de cocina. ............................................... 44
2.5.1 Esquema de definicin de lenguaje. ................................................................... 45
2.5.2 Intentando formalizar el lenguaje de recetas de cocina. ........................................ 46

Captulo 3. Lenguajes formales.

55

3.1 Definicin del autor. ...............................................................................................


+
3.2 Operadores * y . .................................................................................................
3.3 Conceptos bsicos. ................................................................................................
3.4 Primera definicin de lenguaje. .................................................................................

56
56
56
59

3.4.1 Lenguaje formal. ............................................................................................ 59


3.4.2 Lenguaje regular. ........................................................................................... 60
3.5 Expresiones regulares. ........................................................................................... 60
3.5.1 Precedencia en las expresiones regulares. .......................................................... 61
3.5.2 lgebra de expresiones regulares. ................................................................... 62
3.5.3 Diseo de expresiones regulares. ...................................................................... 63

Captulo 4. Autmatas finitos.

67

4.1 Introduccin. .......................................................................................................


4.2 Conceptos bsicos. ..............................................................................................
4.2.1 Definicin formal de autmata finito. ................................................................
4.2.2 Autmatas finitos en representacin grfica. ......................................................
4.2.3 Anlisis de la entrada a travs de un autmata finito. ...........................................
4.2.4 Lenguaje aceptado por un autmata finito. ........................................................
4.2.5 Ejemplos de autmatas orientados a disear la etapa de lxico de un lenguaje de
programacin. ..............................................................................................
4.3 Tipos de autmatas. .............................................................................................
4.4 Autmata finito no determinista. ..............................................................................
4.4.1 Anlisis de la entrada a travs de un autmata finito no determinista. ......................
4.5 Autmata con transiciones-. ..................................................................................

68
68
68
69
69
70

4.5.1 Anlisis de la entrada a travs de un autmata finito con transiciones -. ...................


4.6 Autmata no determinista y con transiciones-. ..........................................................
4.7 Conversin de autmata finito no determinista a autmata finito determinista. ..................
4.8 Conversin de autmata finito con transiciones- a autmata finito determinista. ...............
4.8.1. Otro ejemplo. ..............................................................................................

73
73
73
76
77

4.9 Aplicacin de automtas.


4.9.1 Analizador lxico 1.
4.9.2 Analizador lxico 2.
4.9.3 Analizador lxico 3.
4.9.4 Analizador lxico 4.

.......................................................................................
.......................................................................................
.......................................................................................
.......................................................................................
.......................................................................................
4.10 Conversin de expresin regular a autmata finito no determinista. ................................
4.11 Conversin de expresin regular a autmata finito determinista. ....................................

78
78
81
81
86
88
90

Captulo 5. Gramticas.

95

5.1 Conceptos bsicos. ................................................................................................


5.1.1 Definicin formal. ............................................................................................
5.1.2 Convenciones de notacin. ............................... ................................................
5.1.3 Notacin simplificada. ......................................................................................
5.1.4 Derivaciones. ................................................................................................
5.1.5 Lenguaje generado por una gramtica. ...............................................................
5.2 Diseo de gramticas. ............................................................................................
5.2.1 Tcnicas para el diseo de gramticas. ...............................................................

96
96
96

70
71
71
71
72

97
97
99
99
102

5.2.2 Modularidad de las gramticas. ......................................................................... 104


5.2.3 Lmites de las gramticas. ................................................................................ 105
5.3 Diseo arbitrario de gramticas. ................................................................................ 106

5.4 Primer acercamiento a la jerarqua de Chomsky para gramticas. .................................... 108


5.5 Gramtica regular implementada en un autmata finito no determinista. ........................... 109

Captulo 6. Autmatas de pila.

115

6.1 Jerarqua de lenguajes. ...........................................................................................


6.2 Conceptos bsicos. ................................................................................................
6.2.1 Definicin formal. ...........................................................................................
6.2.2 Reconocimiento de una cadena en un autmata de pila. .......................................
6.2.3 Seguimiento en formato de corrida de escritorio. ...................................................
6.3 Gramticas independientes del contexto, implementadas en autmatas de pila. .................
6.3.1 Seguimiento en formato de corrida de escritorio. ...................................................
6.4 Comentarios finales. ...............................................................................................

116
117
117
117
119
119
122
125

Captulo 7. Mquina de Turing.

127

7.1 Conceptos bsicos. ................................................................................................ 128


7.2 Mquina de Turing como realizadora de clculos. ......................................................... 128
7.2.1 Reconocimiento de una cadena de entrada. ........................................................ 129
7.3 Mquina de Turing como reconocedora de lenguajes. ................................................... 129
7.4 Diseo de la mquina de Turing. ........................ ....................................................... 130
7.4.1 Tcnicas para la construccin de las mquinas de Turing. ......................................
7.4.2 Ejemplo 1. Mquina de Turing para sumar. ..........................................................
7.4.3 Ejemplo 2. Mquina de Turing para restar. ...........................................................
7.4.4 Ejemplo 3. Mquina de Turing para multiplicar. .....................................................
7.5 Modularizacin en la mquina de Turing. ....................................................................
7.5.1 Ejemplo 1. Mquina primitiva de Turing para copiar. ............................................
7.5.2 Ejemplo 2. Mquina de Turing para sumar. ..........................................................
7.5.3 Ejemplo 3. Mquina de Turing para multiplicar. .....................................................

130
130
135
141
142
142
143
144

Captulo 8. Expresiones, primer acercamiento.

147

8.1 Consideraciones para generar expresiones en lenguajes de programacin. .......................


8.2 Conceptos bsicos. ................................................................................................
8.2.1 Trminos dentro de una expresin. ....................................................................
8.2.2 Tipos de operadores. ......................................................................................
8.2.3 Prioridad o precedencia. ..................................................................................

148
148
148
149
149

8.3 Notaciones. .......................................................................................................... 150


8.4 Generacin de notaciones a travs de rboles binarios. ................................................. 151
8.4.1 Recorrido del rbol. ......................................................................................... 152
8.5 Importancia de la notacin posfija. ............................................................................. 153
8.6 Algoritmo para convertir de notacin fija a notacin posfija. ............................................ 153
8.7 Algoritmo para evaluar notaciones pos fijas. ................................................................. 155
8.8 Aplicacin de los algoritmos de conversin y evaluacin en un programa. ......................... 157
8.9 Comentarios finales.

............................................................................................... 160

Captulo 9. Anlisis sintctico, autmatas de pila determnisticos.


9.1 Gramticas independientes del contexto.

165

.................................................................... 166

9.1.1 Formato de las gramticas independientes del contexto. ........................................ 166


9.1.2 Caractersticas de las gramticas independientes del contexto. ............................... 166
9.1.3 Tips en el diseo de gramticas pensando en la implementacin. ............................ 167

Mtodos sintcticos descendentes.


9.2 Mtodo predictivo recursivo o mtodo directo. ..............................................................
9.2.1 Recursivi dad por la izquierda. ...........................................................................
9.2.2 Subcadenas vlidas. .......................................................................................
9.2.3 Generalizacin para eliminar recursividad por la izquierda. .....................................
9.2.4 Definicin formal de gramtica recursiva por la izquierda. ......................................
9.2.5 Gramticas ambiguas. .....................................................................................
9.3 Mtodo predictivo no recursivo. .................................................................................
9.3.1 Reconocimiento de la entrada. ..........................................................................
9.3.2 Construccin de la tabla predictiva. ....................................................................
9.3.2.1 Primero. .............................................................................................
9.3.2.2 Siguiente. ...........................................................................................
9.3.2.3 Construccin de la tabla de anlisis sintctico predictivo no recursivo. ............
9.3.3 Seguimiento de cadenas en tablas predictivas. .....................................................

169
171
174
175
175
176
177
177
179
179
180
182
185

Mtodos sintcticos ascendentes.


9.4 Mtodos por desplazamiento y reduccin. .................................................................
9.4.1 Autmata de pila no determinstico ascendente. ..................................................
9.5 Mtodo LR( k ). ......................................................................................................
9.5.1 Modelo de un analizador LR. ...........................................................................
9.5.2 Reconocimiento de la entrada. ........................................................................
9.5.3 Construccin de la tabla LR. ...........................................................................
9.5.4 Programa LR. ............................................................. .................................
9.5.5 Otro ejemplo. ...............................................................................................
9.5.6 Ejemplo. Desarrollo de la tabla LR para una gramtica con producciones . .............
9.6 Mtodo sencillo para el manejo de errores en la tabla LR. ............................................
9.7 Grafo de transiciones. ...........................................................................................
9.8 Afinando trminos para los mtodos LR(0) y SLR(1). ...................................................
9.9 Algoritmo para la construccin de las tablas SLR. .......................................................
9.10 Caractersticas de las gramticas LR(0) y SLR(1). ......................................................
9.11 Conflictos desplazamiento/reduccin. .......................................................................
9.12 Mtodo LR(1). .....................................................................................................
9.13 Conflictos reduccin/reduccin. ...............................................................................
9.14 Mtodo LALR(1). ..................................................................................................
9.15 Exclusividad en las transiciones. .............................................................................
9.16 Gramticas ambiguas LR. ............................... .......................................................

187
188
188
189
189
191
197
199
200
202
204
205
206
206
207
208
211
213
215
217

Captulo 10. Anlisis semntico, traduccin dirigida por la sintaxis.

225

10.1 Traduccin dirigida por la sintaxis. ....................................................................... .... 226


10.1.1 Ejemplo 1. Traductor de notacin infija a posfija. ............................................... 226
10.2 Generador de expresiones de 7 niveles de precedencia. .............................................. 229

10.2.1 Tabla de precedencia. .................................................................................. 229


10.2.2 Ejemplos de expresiones a resolver. ............................................................... 229
10.2.3 Desarrollo. ................................................................................................. 230
10.2.3.1 Lxico. .......................................................................................... 230
10.2.3.2 Sintaxis. ........................................................................................ 232
10.2.3.3 Semntica.

.................................................................................... 232

Captulo 11. Intrprete MIBASIC.

241

11.1 Programas ejemplo. ............................................................................................ 242


11.2 Etapa de lxico. .................................................................................................. 247
11.3 Generador de expresiones. ................................................................................... 250
11.4
11.5
11.6
11.7
11.8

Funcin main( ), carga del programa y ciclo de ejecucin de las instrucciones. ...............
Instruccin de ASIGNACIN. .................................................................................
Instruccin INPUT . ..............................................................................................
Instruccin PRINT . ..............................................................................................
Instruccin IF. ....................................................................................................

252
253
253
254
255

11.9 Instruccin GOTO. ............................................................................................... 256


11.10 Instruccin FOR. ................................................................................................. 258
11.11 Instruccin GOSUB. ............................................................................................. 259

Apndice A. Simbologa .

267

Apndice B. Ejercicios resueltos.

269

Bibliografa.

309

ndice alfabtico.

311

Introduccin
Desarrollar un compilador es una de las aplicaciones ms complejas en el rea de sistemas
computacionales, debido a que se necesita integrar un conocimiento profundo en el rea de
matemticas discretas, la programacin de propsito general y las estructuras de datos.
Sin embargo, el desarrollo de un compilador puede facilitarse si se analizan detalladamente
cada una de las etapas que lo integran.
El concepto de compilador est intimamente ligado con el de lenguajes de programacin, que
en la actualidad son poderosas herramientas de desarrollo, los cuales integran un ambiente
de programacin que generalmente incluye un editor, ambientes visuales, depuradores,
preprocesadores, un compilador, cargadores, funciones de biblioteca de propsito general,
manejadores de bases de datos, controladores para sistemas distribuidos, instaladores, etc.
La responsabilidad del compilador dentro de los lenguajes de programacin es la de convertir
las instrucciones de alto nivel a cdigo ensamblador, el res to de las responsabilidades en la
generacin de aplicaciones en un lenguaje de programacin corren a cargo de las
herramientas antes mencionadas.
Se reconocen casi universalmente seis etapas en el desarrollo de un compilador, las cuales
son.

Lxico.
Sintaxis.
Semntica.
Generacin de cdigo intermedio.
Optimizacin de cdigo.
Generacin de cdigo ensamblador.

Las tres primeras etapas tienen una alta carga matemtica y las tres restantes una alta carga
de algoritmos y estructura de datos. Por lo anterior es necesario dominar, realmente dominar,
la parte matemtica y de programacin combinada con estructuras de datos para desarrollar
un compilador.
El objetivo de esta obra es aplicar con profundidad, claridad, detalle y desde cero los
modelos matemti cos que sustentan la teora de compiladores, para esto es necesario que el
programa de aprendizaje incluya temas perifricos o que se supone se deben tratar de
manera especializada y por separado.
El camino del conocimiento necesario para desarrollar un compilador se encuentra plasmado
en la grfica que ilustra la portada.

Si se tienen algunos antecedentes en los temas se puede observar que se dedican obras de
manera individual y especializada a cada uno de los temas.
Para lograr el objetivo de esta obra, se sintetizan los temas con mayor relevancia en el rea
de compiladores, distribuidos en los captulos de la siguiente forma.
Captulo 1. Teora de conjuntos
Matemticas discretas.

Teoria matemtica de la
computacin.

El material est orientado a manejar la terminologa necesaria en el desarrollo de


compiladores y se considera como antecedente a la teora de compiladores.

Captulo 3. Lenguajes formales.


Captulo 4. Autmatas finitos.
Captulo 5. Gramticas.
Captulo 6. Autmatas de pila.
Captulo 7. Mquina de Turing.
Teora matemtica de la computacin es el trmino moderno de lo con
anterioridad se conoce como lenguajes formales y teora de autmatas.

Captulo 2. Lenguajes.

Tema perifrico, lenguaje


natural.

El material incluye un tema de lenguajes desde el punto de vista no formal,


muestra soluciones a problemas que involucran lenguajes, sin fundamentarlos
matemticamente.
Este tipo de soluciones se implementaran si el diseador no tiene conocimientos
en la teora matemtica de computacin.

Captulo 3. Lenguajes formales.


Lenguajes formales.

El material establece la primer relacin, la cual est dada en la definicin de que


un lenguaje formal es un tipo especial de conjunto.

Captulo 4. Autmatas finitos.


Lenguajes y autmatas.
El material ilustra la forma en que los lenguajes formales con una alta carga
conceptual se pueden implementar en mquinas que pueden programarse.

Captulo 8. Expresiones, primer acercamiento.


Las expresiones requieren de un manejo especial y cuidadoso. El material
Tema perifrico, manejo de incluye un captulo que muestra algoritmos no formales en la solucin de
expresiones.
expresiones. Por ser mtodos no formales tienen poca aplicacin prctica en un
lenguaje de programacin robusto, pero ilustran de manera muy clara conceptos
tiles en los mtodos formales.

Captulo 4. Autmatas finitos.


Captulo 5. Gramticas.
Captulo 9. Anlisis sintctico, autmatas de pila determinsticos.
Captulo 10. Anlisis semntico, traduccin dirigida por la sintaxis.
Captulo 11. Intrprete MIBASIC .
Para poder desarrollar un lenguaje de programacin completo se necesitan las
etapas de lxico, sintaxis y semntica. Con stas es posible desarrollar una
aplicacin que ejecute instrucciones.

Intrpretes.

Existen dos formas de implementar un lenguaje de programacin, una en formato


compilador y la otra en formato intrprete.
Formato compilador. Se traducen las instrucciones de alto nivel a cdigo
ensamblador, posteriormente se procesan en un compilador para ensamblador y
se obtiene el cdigo objeto, posteriormente se procesa en un cargador (linker) y
se obtiene el cdigo ejecutable que es independiente de las plataformas en que
se desarrollaron los procesos de conversin del cdigo.
Formato intrprete. Se ejecutan las instrucciones conforme se estn generando,
la construccin de un lenguaje a nivel intrprete se puede llevar a cabo con las
tres etapas iniciales de un compilador y es el objetivo de este libro, que el lector
pueda desarrollar su propio lenguaje de programacin con fundamento
matemtico, orden, control, eficacia, dominio y elegancia.

Captulo 4. Autmatas finitos.


Captulo 5. Gramticas.
Captulo 9. Anlisis sintctico, autmatas de pila determinsticos.
Captulo 10. Anlisis semntico, traduccin dirigida por la sintaxis.

Compiladores.

En esta obra no considera el desarrollo final de la construccin de un compilador,


considera las tres primeras etapas. Debido a que resultados palpables en una
aplicacin tomarn un poco ms de tiempo, lo cual didctimente no es
aconsejable.
Por lo anterior, esta obra aplica todo el fundamento matemtico en el desarrollo
de un lenguaje implementado en formato intrprete, lo que permite ver resultados
en el mediano plazo de forma clara, prctica, contundente e inclusive divertida,
aunque a mis estudiantes nunca los he visto muy divertidos en mis cursos.

Programacin de sistemas.

No tratado en este libro.


La programacin de sistemas involucra herramientas paralelas al compilador o

intrprete en los lenguajes de programacin, algunas ya mencionadas


anteriormente como son el preprocesador, el compilador de cdigo ensamblador
a cdigo objeto, el cargador o linkeador, la interaccin del lenguaje con el
sistema operativo y la arquitectura de la computadora.
La programacin de sistemas es el ltimo escaln en la construccin robusta de
lenguajes de programacin.

Las etapas restantes de un compilador; generacin de cdigo intermedio, optimizacin y


generacin de cdigo junto con la programacin de sistemas sern tratados en la obra que le
dar seguimiento a Compiladores, el comienzo ....

Vous aimerez peut-être aussi