Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Autnoma de Tabasco
45
Compiladores
45
Compiladores
Contenido
INTRODUCCIN....................................................................................................... 4
TEMA I GENERALIDADES......................................................................................... 5
1.1.1. (HISTORIA)................................................................................................... 5
1.1.2 INICIO DEL COMPILADOR...............................................................................5
1.1.3 BASES DE LAS TAREAS EN UN COMPILADOR..................................................5
1.1.4. OPTIMIZACIN EN LA COMPILACIN.............................................................6
1.1.5 COMPILACIN EN LA ACTUALIDAD.................................................................6
1.2. CONCEPTOS BSICOS...................................................................................... 7
1.3. CONCEPTO DE COMPILADOR............................................................................8
1.4. INTERPRETAR VS COMPILAR.............................................................................8
1.4.1. VENTAJAS DE COMPILAR FRENTE A INTERPRETAR:........................................9
1.4.2. VENTAJAS DEL INTRPRETE FRENTE AL COMPILADOR:..................................9
1.5. TIPOS DE COMPILADORES.............................................................................. 10
1.6. ESTRUCTURA DE UN COMPILADOR................................................................12
1.6.1. PREPROCESADOR........................................................................................ 12
1.6.2COMPILACIN................................................................................................ 13
1.6.3. ENSAMBLADO............................................................................................. 13
1.6.4. ENLAZADO.................................................................................................. 14
1.7.1 FASE DE ANLISIS........................................................................................ 15
1.7.2. FASE DE SNTESIS........................................................................................ 16
1.8 EJEMPLO DEL PROCESO DE COMPILACIN......................................................17
1.9. HERRAMIENTAS PARA CONSTRUCCIN DE COMPILADORES...........................19
1.10. EL LENGUAJE Y LA HERRAMIENTA.................................................................19
1.11.ASPECTOS ACADMICOS Y DE INVESTIGACIN DE COMPILADORES.............20
TEMA II: ANLISIS LXICO..................................................................................... 21
2.1. ANLISIS LXICO (SCANNER).........................................................................21
2.2. EL PROCESO DEL ANLISIS LXICO................................................................21
2.3.QUE ES UN ANALIZADOR LXICO?.................................................................21
2.4. FUNCIONES DEL ANALIZADOR LXICO...........................................................22
2.5. NECESIDAD DEL ANALIZADOR LXICO...........................................................23
2.6. VENTAJAS DE SEPARAR EL ANLISIS LXICO Y EL ANLISISSINTCTICO.........23
2.7. COMPONENTES LXICOS, PATRONES, LEXEMAS.............................................23
2.7.1.COMPONENTE LXICO O TOKEN...................................................................23
45
Compiladores
2.7.2. PATRN O EXPRESIN REGULAR.................................................................24
2.7.3.LEXEMA........................................................................................................ 24
2.8. DESCRIPCIN DE UN ANALIZADOR LXICO....................................................24
TEMA III GRAMATICA.............................................................................................. 26
3.1 GRAMTICAS................................................................................................ 26
3.2 AMBIGEDAD.................................................................................................. 27
TEMA IV ANALISIS SINTCTICO.............................................................................29
4.1 QU ES EL ANALIZADOR SINTCTICO?..........................................................29
4.2 MANEJO DE ERRORES SINTCTICOS................................................................30
4.3 TIPO DE GRAMTICA QUE ACEPTA UN ANALIZADOR SINTCTICO....................31
4.4 RBOL SINTCTICO DE UNA SENTENCIA DE UN LENGUAJE.............................33
4.5 AMBIGEDAD:................................................................................................. 33
4.6 TIPOS DE ANLISIS.......................................................................................... 34
4.7ANLISIS DESCENDENTE CON RETROCESO......................................................34
4.8 ANLISIS ASCENDENTE CON RETROCESO.......................................................36
TEMA V FASE DE SNTESIS..................................................................................... 37
5.1 FASE DE SNTESIS............................................................................................ 37
5.2 EN LA FASE DE ANLISIS SE ENCUENTRAN:....................................................37
5.2.1 Anlisis Lxico:............................................................................................. 37
5.2.2 Anlisis Sintctico:....................................................................................... 37
5.2.3 Anlisis Semntico:...................................................................................... 37
5.2.4 Generacin de cdigo intermedio:...............................................................38
5.3 Optimizacin:.................................................................................................. 38
5.4 Generacin de cdigo objeto:........................................................................38
TEMA VI TABLA DE SMBOLOS Y MANEJO DE MEMORIA.........................................39
6.1 TABLA: CONJUNTO DE PARES CLAVE-VALOR, LLAMADOS ELEMENTOS DE LA
TABLA.................................................................................................................... 39
6.2 TABLAS DE SMBOLOS (IDENTIFICADORES).....................................................40
6.3 TABLAS NO ORDENADAS................................................................................. 40
6.4 TABLAS ORDENADAS....................................................................................... 40
6.5 TABLAS EN RBOL BINARIO.............................................................................41
6.6 TABLAS DE ACCESO DIRECTO.........................................................................41
6.7 TABLAS HASH O DE ENTRADA CALCULADA.....................................................41
6.8 TABLAS HASH ABIERTAS (CON REHASH).........................................................42
6.9 ASIGNACON DE MEMORIA.............................................................................. 42
45
Compiladores
6.10 ASIGNACIN ESTTICA.................................................................................. 42
CONCLUSIN......................................................................................................... 44
BIBLIOGRAFA........................................................................................................ 45
1............................................................................................................ 7
2.......................................................................................................... 10
3.......................................................................................................... 12
4.......................................................................................................... 13
5.......................................................................................................... 13
6.......................................................................................................... 14
7.......................................................................................................... 14
8.......................................................................................................... 15
9.......................................................................................................... 17
10........................................................................................................ 18
11........................................................................................................ 19
12........................................................................................................ 20
13........................................................................................................ 21
14........................................................................................................ 22
15........................................................................................................ 25
16........................................................................................................ 25
17........................................................................................................ 33
18........................................................................................................ 34
19........................................................................................................ 35
20........................................................................................................ 38
45
Compiladores
INTRODUCCIN
En esta antologa veremos de forma general que es un compilador, las fases que se
pueden dividir compiladores y lo que consta cada una de ellas, ya que tienen
diferentes funcionalidades. Los nombres que reciben estas fases; veremos cmo se
traduce de un L. Fuente a un L. Objeto dando definiciones de cada una de las fases,
como se llegaran a implementar en compiladores. Como se divide un compilador, ya
que en esta parte al ubicar donde se divide sabrs cuales de las fases sirve para
cada una de ellas, etc. En general conceptos de compiladores y sus respectivas
definiciones dcada una de ellas.
En un mundo informatizado como en el que vivimos, en el que cada da que pasa
dependemos ms y ms de un sistema informtico eficiente, el cual debe estar
preparado para brindarnos la ms alta calidad de servicios y prestaciones. Adems
de ser sencillo en su manejo y sobre todo confiable, siendo estas caractersticas
indispensables para el usuario final. Quien no se fija, ni pregunta cmo se realiza
determinada tarea, pero si es buen critico a la hora de ver resultados, pero hay otros
que contrarios a estos, se hace la pregunta del milln, "Cmo se logra hacer tal y tal
cosa? ,"Cmo es posible que un graficado trabaje tan rpido?, Cmo es posible
que un procesador de palabra a la hora de usar un diccionario sea tan eficiente?,
Cmo es posible llevar los resultados de una aplicacin a otra?, o Cmo es
posible que un programa que fue creado por una empresa puede trabajar con los
datos de obtenidos de otro programa, echo por otra empresa?. Muchas pueden ser
las respuestas, algunos argumentaran que es el sistema operativo, otros dirn que
son las normas y estndares establecidos, otros dirn irnicamente que es ms
sencillo de lo que se piensa, dirn que se hace clac con la rata aqu, se arrastra y se
lleva a donde se quiere. Todos ellos tienen razn, sin embargo si indagamos ms a
fondo. Surgirn preguntas ms directas como por ejemplo "Cmo se logra tal
velocidad, con tan buen manejo de grfico?", claro que a todas ellas se puede
responder diciendo, que todo se logra gracias al Hardware, y no estaramos
totalmente errados, porque un buen Hardware conlleva un buen resultado, a una
buena calidad de impresin en caso de volcado al papel, una buena imagen si
hablamos de grficos, o un buen tiempo de respuesta a la hora de realizar algn
clculo matemtico, pero siempre el Hardware ser una parte, solo una parte.
45
Compiladores
TEMA I GENERALIDADES
1.1.1. (HISTORIA)
En 1946 se desarroll el primer ordenador digital. En un principio, estas mquinas
ejecutaban instrucciones que consistan en cdigos numricos que sealan a los
circuitos de la mquina los estados correspondientes a cada operacin. Pronto los
primeros usuarios de estos ordenadores descubrieron la ventaja de escribir sus
programas mediante claves ms fciles de recordar que esos cdigos numricos; al
final, todas esas claves juntas se traducan manualmente a Lenguaje Mquina. Estas
claves constituyen los llamados lenguajes ensambladores, que se generalizaron en
cuanto se dio el paso decisivo de hacer que las propias mquinas realizarn el
proceso mecnico de la traduccin. A este trabajo se le llama ensamblar el programa.
Las instrucciones de los lenguajes ensambladores obligan a programar cualquier
funcin de una manera minuciosa e iterativa. A pesar de ello, el lenguaje
ensamblador segua siendo el de una mquina, pero ms fcil de manejar. Los
trabajos de investigacin se orientaron entonces hacia la creacin de un lenguaje
que expresara las distintas acciones a realizar de una manera lo ms sencilla posible
para el hombre. As, en 1950, desarrollaron el FORTRAN con el cual surgi as
por primera vez el concepto de un traductor (como un programa que traduca un
lenguaje a otro lenguaje). En el caso particular de que el lenguaje a traducir es
un lenguaje de alto nivel y el lenguaje traducido de bajo nivel, se emplea el trmino
compilador.
45
Compiladores
se produce una sistematizacin dela sintaxis de los lenguajes de programacin, y
con ello un desarrollo de diversos mtodos de anlisis sintctico.
Con la aparicin de la notacin BNF, se tiene una gua para el desarrollo del anlisis
sintctico.
45
Compiladores
Por una parte, se estn mejorando las diversas herramientas disponibles (por
ejemplo, el generador de analizadores lxicos Aardvark para el lenguaje
PASCAL).
Tambin la aparicin de nuevas generaciones de lenguajes -ya se habla de la
quinta generacin, como de un lenguaje cercano al de los humanos-ha
provocado la revisin y optimizacin de cada una de las fases del compilador.
1.2.
CONCEPTOS
BSICOS
Traductor
Ilustracin 1
45
Compiladores
.Cualquier programa que toma como entrada un texto escrito en un lenguaje llamado
fuente y da como salida un programa equivalente en otro lenguaje, el lenguaje
objeto. Si el lenguaje fuente de un lenguaje de programacin de alto nivel y el objeto
un lenguaje de bajo nivel (ensamblador o cdigo de mquina), al traductor se le
denomina
Compilador
Ensamblador.
Intrprete.
45
Compiladores
Compilacin:
Interpretacin:
.
Cunduacn Tab. Viernes 28 de noviembre de 2014
Ilustracin
2
45
Compiladores
1.5. TIPOS
DE
COMPILADORES
El programa compilador
un lenguaje de alto nivel
computadora
puede
cada
lenguaje
de
programacin
se
requiere
un
compilador
separado.
El
compilador
traduce todo el
programa antes
de ejecutarlo. Los compiladores son, pues, programas de traduccin insertada en la
memoria por el sistema operativo para convertir programas de cmputo en
pulsaciones electrnicas ejecutables (lenguaje de mquina). Los compiladores
pueden ser de:
Una sola pasada: examina el cdigo fuente una vez, generando el
cdigo o programa objeto.
pasadas mltiples: requieren pasos intermedios para producir un
cdigo en otro lenguaje, y una pasada final para producir y optimizar el
cdigo producido durante los pasos anteriores.
45
Compiladores
Optimacin: lee un cdigo fuente, lo analiza y descubre errores
potenciales sin ejecutar el programa.
Compiladores incrementales: generan un cdigo objeto instruccin
por instruccin (en vez de hacerlo para todo el programa) cuando el
usuario teclea cada orden individual. El otro tipo de compiladores
requiere que todos los enunciados o instrucciones se compilen
conjuntamente.
Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee
una estructura sencilla.
Compilador cruzado: se genera cdigo en lenguaje objeto para una
mquina diferente de la que se est utilizando para compilar. Es
perfectamente normal construir un compilador de Pascal que genere
cdigo para MS-DOS y que el compilador funcione en Linux y se haya
escrito en C++.
Compilador con montador: compilador que compila distintos mdulos
de forma independiente y despus es capaz de enlazarlos.
Auto compilador: compilador que est escrito en el mismo lenguaje
que va a compilar. Evidentemente, no se puede ejecutar la primera vez.
Sirve para hacer ampliaciones al lenguaje, mejorar el cdigo generado,
etc.
Meta compilador es sinnimo de compilador de compiladores y se
refiere a un programa que recibe como entrada las especificaciones del
lenguaje para el
Descompilador: es un programa que acepta como entrada cdigo
mquina y lo traduce a un lenguaje de alto nivel, realizando el proceso
inverso a la compilacin. Esta taxonoma de los tipos de compiladores
no es excluyente, por lo que puede haber compiladores que se
adscriban a varias categoras:
Compiladores cruzados: generan cdigo para un sistema distinto del
que estn funcionando.
Compiladores optimizadores: realizan cambios en el cdigo para
mejorar su eficiencia, pero manteniendo la funcionalidad del programa
original.
Compiladores de una sola pasada: Generan el cdigo mquina a
partir de una nica lectura del cdigo fuente.
Compiladores de varias pasadas: necesitan leer el cdigo fuente
varias veces antes de poder producir el cdigo mquina.
45
Compiladores
Ilustracin 3
1.6.1. PREPROCESADOR
Es el encargado de transformar el cdigo fuente de entrada original en el cdigo
fuente puro. Es decir en expandir las macros, incluir las libreras, realizar un
preprocesador racional (capacidad de enriquecer a un lenguaje antiguo con recursos
ms modernos), extender el lenguaje y todo aquello Que en el cdigo de entrada sea
representativo de una abreviatura para facilitar la escritura del mismo.
45
Compiladores
Ilustracin 4
1.6.2COMPILACIN
Recibe el cdigo fuente puro, este es el modulo principal de un compilador, pues si
ocurriera algn error en esta etapa el compilador no podra avanzar. Enasta etapa se
somete al cdigo fuente puro de entrada a un anlisis lexicogrfico, a un anlisis
sintctico, a un anlisis semntico, que construyen la tabla de smbolos, se genera
un cdigo intermedio al cual se optimiza para as poder producir un cdigo de salida
generalmente en algn lenguaje ensamblador
Ilustracin 5
1.6.3.
ENSAMBLADO
45
Compiladores
Ilustracin 6
1.6.4. ENLAZADO
El cuarto y ltimo modulo es el encargado de realizar el enlazado del cdigo de
fuente de entrada (cdigo maquina relocalizarle) con las libreras que necesita, como
as tambin de proveer al cdigo de las rutinas necesarias para poder ejecutarse y
cargarse a la hora de llamarlo para su ejecucin, modifcalas direcciones
relocalizarles y ubica los datos en las posiciones apropiadas dela memoria. Este
ltimo modulo es el que produce como salida el cdigo binario enlazado. Ya sea
dinmico o esttico, al decir dinmico se refiere a que el cdigo producido utiliza
libreras dinmicas (libreras ya cargadas en el sistema), esto implica que se
obtendr un cdigo ms corto y que reactualizara automticamente si aparece
alguna nueva versin de las libreras, mientras que el esttico se refiere al echo que
no se realiza enlace con ninguna librera y por lo tanto se obtendr un cdigo ms
largo con una copia de las rutinas de librera que necesita.
Ilustracin 7
45
Compiladores
Fase de Anlisis
Anlisis Lxico
Anlisis Sintctico
Anlisis Semntico
Fase de Sntesis
Etapa de Generacin de Cdigo Intermedio
Etapa de Optimizacin de Cdigo
Etapa de Generacin de Cdigo
45
Compiladores
Anlisis semntico.
La fase de anlisis semntico se intenta detectar instrucciones que tnganla
estructura sintctica correcta, pero que no tengan significado para la operacin
implicada.
45
Compiladores
Anlisis Lxico
El analizador lxico lee los caracteres del programa fuente, y verifica que
correspondan a una secuencia lgica (identificador, palabra reservada etc.). Estas
secuencia de caracteres reciben el nombre componente lxico o lexema. En este
caso el analizador lxico verifica si el identificador id1 (nombre interno para "suma")
encontrado se halla en la tabla de smbolos, si no est produce un error porque
todava no fue declarado, si la preposicin hubiese sido la declaracin del
identificador "suma" en lenguajes C, C++ (int suma;) el analizador lxico agregara un
identificador en la tabla de smbolos, y as sucesivamente con todos los
componentes lxicos que aparezcan, los componentes lxicos resultantes de la
expresin son:
Identificador:
suma.
El smbolo de asignacin: =
Identificador: var1
Operador: +
Identificador: var2
Operador: +
Numero: 10
Que en el anlisis lxico y con la tabla de smbolos es:
id1= id2+ id3 * 10
Anlisis Sintctico
El analizador sintctico impone una estructura jerrquica a la cadena de
componentes lxicos, generada por el analizador lxico, que es representada en
forma de un rbol sintctico.
Ilustracin
9
Anlisis Semntico
El analizador semntico verificara en este caso que cada operador tenga los
operados permitidos
Cunduacn Tab. Viernes 28 de noviembre de 2014
45
Compiladores
Ilustracin
10
Anlisis Semntico
El analizador semntico verificara en este caso que cada operador tenga los
operados permitidos.=/ \id1 +/ \id2 +/ \id3 tipo_ent|10
Generador de cdigo intermedio
En esta etapa se lleva la preposicin a una representacin intermedia como
un programa para una maquina abstracta.
temp1= tipo_ent(10)
temp2= id3 * temp1
temp3= id2 + tem2
id1= temp3
Optimizacin de cdigo
El cdigo intermedio obtenido es representado de una forma ms optima y eficiente.
temp1= id3 * 10.0
id1= id2 + temp1
Generador de cdigo
Finalmente lleva el cdigo intermedio a un cdigo objeto que en este caso es un
cdigo relocalizable o cdigo ensamblador (tambin llamado cdigo no enlazado).
MOVF id3, R2
MULT #10.0, R2
45
Compiladores
Generadores de compiladores
Sist. Generadores de traductores
Herramientas generales para el diseo automtico de
componentes especficos de un comp.
Utilizan lenguajes especficos para especificar e implementar la componente
Ocultan detalles del algoritmo de generacin
Producen componentes que se pueden integrar al resto del compilador
Generadores de analizadores sintcticos
Producen AS a partir de una Gramtica Libre de Contexto
Hoy esta es una de las fases ms fciles de aplicar
Generadores de analizadores lxicos
Producen AL a partir de una especificacin en Expresiones Regulares.
El AL resultante es un Autmata Finito
Dispositivos de traduccin dirigida por la sintaxis
Producen grupos de rutinas que recorren el rbol de AS generando cdigo
intermedio
Generadores automticos de cdigo
Las proposiciones en cod. Int. se reemplazan por plantillas que representan
secuencia de instrucciones de mquina
Dispositivos para anlisis de flujo de datos
Inf. sobre como los valores se transmiten de una parte a otra del programa
LEX y YACC
Herramientas que nos permiten desarrollar componentes o la mayor parte de
un compilador
Son un recurso invaluable para el profesional y el investigador
Existen paquetes freeware
Ilustracin 11
45
Compiladores
Ilustracin 12
45
Compiladores
45
Compiladores
El
analizador
lxico tiene que
dividir
la
secuencia de caracteres en palabras con significado propio y despus convertirlo a
una secuencia de terminales desde el punto de vista del analizador sintctico, que Ilustracin 13
es la entrada del analizador sintctico
Ilustracin 14
45
Compiladores
Otras
funciones
que realiza:
Eliminar los comentarios del programa.
Eliminar espacios en blanco, tabuladores, retorno de carro, etc, y en general,
todo aquello que carezca de significado segn la sintaxis del lenguaje.
Reconocer los identificadores de usuario, nmeros, palabras reservadas del
lenguaje,..., y tratarlos correctamente con respecto a la tabla de smbolos (solo
en los casos que debe de tratar con la tabla de smbolos).
Llevar la cuenta del nmero de lnea por la que va leyendo, por si se produce
algn error, dar informacin sobre donde se ha producido.
Avisar de errores lxicos. Por ejemplo, si @ no pertenece al lenguaje, avisar
de un error.
Puede hacer funciones de preprocesador.
45
Compiladores
la lectura de caracteres de entrada y procesamiento de componentes lxicos
se puede mejorar significativamente el rendimiento de un compilador.
Otra razn por la que se separan los dos anlisis es para que el analizador
lxico se centre en el reconocimiento de componentes bsicos complejos.
Tipos de tokens:
tiras especficas, tales como palabras reservadas (if, while, begin,etc.), el
punto y coma, la asignacin, los operadores aritmticos o lgicos, etc.
tiras no especficas, como identificadores, constantes o etiquetas.
Prioridad de los tokens
Se da prioridad al token con el lexema ms largo: Si se lee >= y > se
reconoce el primero.
Si el mismo lexema se puede asociar a dos tokens, estos patrones estarn
definidos en un orden determinado.
Ejemplo:
While palabra reservada while
letra (letra | digito)* identificador
Si en la entrada aparece while, se elegir la palabra reservada por estar
primero.
Si estas especificaciones iniciales aparecieran en orden inverso, se
reconocera un token identificador.
45
Compiladores
2.7.3.LEXEMA
Es cada secuencia de caracteres concreta que encaja con un patrn, es decir,
escomo una instancia de un patrn.
Ejm:
8, 23, 50 (son lexemas que encajan con el patrn ( 0 | 1 | 2 | ... | 9) + )Una vez
detectado que un grupo de caracteres coincide con un patrn, se ha detectado un
lexema.
Ilustracin
15
Ilustracin 16
45
Compiladores
45
Compiladores
BNF es un ejemplo de un metalenguaje, es decir, un lenguaje usado para definir
otros lenguajes. Algol 60 fue el primer lenguaje que utiliz BNF para su descripcin
sintctica.
Una gramtica consiste de un conjunto de no-terminales, terminales y una serie de
reglas de produccin. Un no-terminal est definido en una regla de produccin,
mientras que un terminal es un smbolo del lenguaje que se est definiendo. En una
regla de produccin el no-terminal (que aparece en la parte izquierda) est definido
en trminos de una secuencia de no-terminales y terminales (que se encuentran en
la parte derecha)
Ejemplo:
<dgito>::= 0|1|2|3|4|5|6|7|8|9
<letra>::= a|b|c|x|y|z
<identificador>::=<letra>|<identificador><dgito>|<identificador> <letra>
En BNF, un no-terminal se escribe entre < >, el smbolo ::= significa se define como
y el smbolo | significa o.
Estas reglas definen <dgitos> como uno de los smbolos 0, 1 al 9; <letra> como una
letra minscula e <identificador> se define como una nica letra, un identificador
seguido de una letra o un identificador seguido de un dgito.
As, el identificador ab1 puede ser derivado de <identificador>como sigue:
Sintaxis y Semntica del Lenguaje
45
Compiladores
3.2 AMBIGEDAD
Un problema surge cuando se definen gramticas ambiguas. Esto es, una gramtica
que permite diferentes interpretaciones para la misma sentencia.
Ejemplo: Veamos la siguiente definicin para la sentencia condicional if
<sent-cond>::= if <condicin> then <sent>
| if <condicin> then <sent> else <sent>
<sent>::= <sent-cond> | begin <sent> end
La siguiente sentencia condicional tiene dos diferentes rboles de derivacin:
if <cond> then if <cond> then <sent> else <sent>
rbol 1
<sent-cond>
!
if <cond> then <sent>
|
<sent-cond>
|
if <cond> then <sent> else <sent>
Como hay dos interpretaciones, la gramtica es ambigua. Una solucin podra
ser que la
sentencia anterior se escriba:
if <cond> then
45
Compiladores
begin
if <cond> then <sent> else <sent>
end
if <cond> then
begin
if <cond> then <sent>
end
else
<sent>
Dependiendo de la interpretacin que se desee.
Otra solucin sera agregando un cierre del if (ya sea con un; o con un endif
45
Compiladores
45
Compiladores
En definitiva, realiza casi todas las operaciones de la compilacin. Este mtodo de
trabajo da lugar a los mtodos de compilacin dirigidos por sintaxis.
45
Compiladores
Error
id = id [ id ] id [ id ] = id [ id ] ; id [ id ] = id ;
Token especial, seguimos compilando a partir de l
Recuperacin a nivel de frase: Intenta recuperar el error una vez
descubierto. En el caso anterior, por ejemplo, podra haber sido lo
suficientemente inteligente como para insertar el token ; . Hay que
tener cuidado con este mtodo, pues puede dar lugar a recuperaciones
infinitas.
Reglas de produccin adicionales para el control de errores: La
gramtica se puede aumentar con las reglas que reconocen los errores
ms comunes. En el caso anterior, se podra haber puesto algo como:
sent_errnea sent_sin_acabar sentencia_acabada ;
sentencia_acabada sentencia ;
sent_sin_acabar sentencia
Lo cual nos da mayor control en ciertas circunstancias
Correccin Global: Dada una secuencia completa de tokens a ser
reconocida, si hay algn error por el que no se puede reconocer,
consiste en encontrar la secuencia completa ms parecida que s se
pueda reconocer. Es decir, el analizador sintctico le pide toda la
secuencia de tokens al lxico, y lo que hace es devolver lo ms
parecido a la cadena de entrada pero sin errores, as como el rbol que
lo reconoce.
45
Compiladores
S = Axioma Inicial.
Ejemplo: Se considera la gramtica que reconoce las operaciones aritmticas.
EE+T
|T
TT*F
|F
F ID
| NUM
|(E)
En el que: N = {E, T, F} estn a la izquierda de la regla.
T = {ID, NUM, ( ,) ,+ ,*}
P = Son las siete reglas de produccin.
S = Axioma inicial. Podra ser cualquiera, en este caso es E.
Derivaciones: La idea central es que se considera una produccin como
una regla de reescritura, donde el no terminal de la izquierda es
sustituido por la cadena del lado derecho de la produccin.
Derivacin por la izquierda: Derivacin donde solo l no terminal de ms a la
izquierda de cualquier forma de frase se sustituye en cada paso.
Derivacin por la derecha o Derivacin cannica: Derivacin donde el no
terminal ms a la derecha se sustituye en cada paso.
Ejemplo: Sea la gramtica
EE+E
|E-E
|E*E
|E/E
|E^E
| id
Constryase una derivacin por la izquierda y por la derecha para la siguiente frase:
a * c + b (id1 * id2 + id3)
Derivacin ms a la izquierda:
E < E + E < E * E + E< id1 * E + E < id1 * id2 + E < id1 * id2 + id3
45
Compiladores
Derivacin ms a la derecha: E < E + E < E + id3 < E * E + id3 < E * id2 + id3 < id1 *
id2 + id3
Ilustracin 17
4.5 AMBIGEDAD:
Una gramtica es ambigua si derivando de forma diferente con el mismo tipo de
derivacin se llega al mismo resultado.
Ejemplo: Considrese la gramtica
45
Compiladores
E E+E
E E*E
E (E)
E id | num
si tenemos aux + cont + i
<ID><+><ID><+><ID>
Ilustracin 18
Objetivo : El mtodo parte del axioma inicial y aplica todas las posibles
reglas al no terminal ms a la izquierda.
45
Compiladores
ET+E
ET
TF*T
TF
Fa
Fb
F (E)
Para reconocer la cadena de entrada: (a + b) * a + b
Ilustracin 19
45
Compiladores
45
Compiladores
45
Compiladores
Ilustracin 20
a=b+c
1: + b c T1
2: = a T1
5.3 Optimizacin:
45
Compiladores
Lm = (S Li)/N
Lm = S pi.Li
Grado de ocupacin:
s = n/N donde n=nmero de elementos en la tabla y N=capacidad mxima de la
tabla.
Funcin de bsqueda: B : K->E asocia a cada clave k un elemento B(k).
Valor asociado a una clave k: v(B(k)). Puede ser mltiple, en cuyo caso normalmente
se convierte en un puntero. Si est en la tabla puede almacenarse consecutivamente
o en sus tablas paralelas.
45
Compiladores
Si es ese, encontrado.
Longitud de bsqueda:
Lm = 1+log2 (n) mucho mejor que en tablas no ordenadas.
45
Compiladores
Insercin:
45
Compiladores
Se calcula h = I(k).
...
Si admite procedimientos:
45
Compiladores
No admite:
Procedimientos recursivos
45
Compiladores
CONCLUSIN
Este trabajo servir mucho en el momento de la creacin de un compilador, ya que
en l se detallan todas y cada una de las partes que involucran a este. Primeramente
investigue que existen distintos tipos de compiladores, me gustara crear un
compilador de optimacin, ya que pienso que es muy til a la hora de crear un
algoritmo o programa. La funcin de un compiladores es leer un programa escrito es
un lenguaje, en este caso el lenguaje fuente, y lo traduce a un programa equivalente
en otro lenguaje, el lenguaje objeto. Me parece fascinante que nosotros podamos
crear un compilador en seis meses (en un curso), cuando en los aos 50, ya que en
aquellos tiempos se tardaron hasta 18 aos trabajando en un compilador. Por otro
lado, comprend que un compilador, requiere de una sintaxis y lenguajes especficos,
ya que, al igual que el lenguaje humano, si no lo escribimos correctamente el
compilador no har lo que deseamos. Y que en la compilacin hay dos partes:
Anlisis y Sntesis. La parte del anlisis divide al programa fuente en sus elementos
componentes y crea una representacin intermedia. Aprend que las herramientas
que muestran tipos de anlisis de programas fuente, son muy tiles al momento de
crear un programa al codificar un algoritmo, ya que estas herramientas nos ayudan
formateando el texto, corrigiendo errores, dando tips; para que nosotros como
programadores seamos ms eficientes al momento de crear alguna aplicacin.
Tambin he notado como todas nuestras materias se van complementando y
enlazando, por ejemplo, en matemticas discretas vimos la representacin de
rboles, los cuales usamos aqu. Igualmente en estructura de datos, vimos mtodos
de ordenamiento que las gramticas de los compiladores usan. Por lo tanto, no
parece tan complicado crear un compilador, slo se necesitan los conocimientos
adecuados y dedicarle su tiempo para tener xito.
45
Compiladores
BIBLIOGRAFA
Compiladores, Principios, tcnicas y herramientas, Alfred V. Aho, Ravi
Sethi, Jeffrey D. Ullman. Addison Wesley iberoamericana.
Compiladores: Conceptos Fundamentales. B. Teufel, S. Schmidt, T.
Teufel. Addison Wesley Iberoamericana.
Stefano Crespi Reghizzi, Formal Lenguajes and Compilation, SpringerVerlag 2009.
Jhon E. Hopcroft, Introduccin a la Teora de Autmatas, Lenguajes y
Computacin
https://es.scribd.com/doc/4750526/12/fase-de-sintesis
http://www.frlp.utn.edu.ar/materias/sintaxis/gramaticas.pdf
http://www.dlsi.ua.es/docencia/asignaturas/comp1/comp1.html
http://www.cps.unizar.es/~ezpeleta/COMPI
http://www.ii.uam.es/~alfonsec