Anda di halaman 1dari 70

ESCUELA DE CIENCIAS BSICAS E INGENIERA

ASIGNATURA: Compiladores

CORPORACIN UNIVERSITARIA REMINGTON


DIRECCIN PEDAGGICA
Este material es propiedad de la Corporacin Universitaria Remington (CUR), para los estudiantes de la CUR
en todo el pas.

2011

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 5

CRDITOS

El mdulo de estudio de la asignatura Compiladores es propiedad de la Corporacin Universitaria Remington. Las


imgenes fueron tomadas de diferentes fuentes que se relacionan en los derechos de autor y las citas en la bibliografa.
El contenido del mdulo est protegido por las leyes de derechos de autor que rigen al pas.
Este material tiene fines educativos y no puede usarse con propsitos econmicos o comerciales.

AUTOR
Luis Fernando Zapata lvarez
Ingeniero de Sistemas, Especializacin en Gerencia Informtica, Pedagoga para profesionales,
Investigacin Holstica, Docente Corporacin Universitaria Remington Docente del departamento de Antioquia,
Investigador de la CUR y el proyecto del cual soy investigador principal TIC en los procesos de evaluacin
Luis.zapata@remington.edu.co o feingeniosa@yahoo.es
Nota: el autor certific (de manera verbal o escrita) No haber incurrido en fraude cientfico, plagio o vicios de autora; en
caso contrario eximi de toda responsabilidad a la Corporacin Universitaria Remington, y se declar como el nico
responsable.

RESPONSABLES
Mauricio Seplveda
Director de la Escuela de Ciencias Bsicas e Ingeniera
Director Pedaggico
Octavio Toro Chica
dirpedagogica.director@remington.edu.co
Coordinadora de Medios y Mediaciones
Anglica Ricaurte Avendao
mediaciones.coordinador01@remington.edu.co

GRUPO DE APOYO
Personal de la Unidad de Medios y Mediaciones
EDICIN Y MONTAJE
Primera versin. Febrero de 2011.
Derechos Reservados

Esta obra es publicada bajo la licencia CreativeCommons. Reconocimiento-No Comercial-Compartir Igual 2.5 Colombia.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 6

TABLA DE CONTENIDO
1.

Introduccin .................................................................................................................. 7

2.

Mapa del Mdulo .......................................................................................................... 8

3.

DEFINICION DE UN COMPILADOR Y CONCEPTOS GENERALES .......................................... 9

3.1.

Definicin del compilador ..................................................................................................... 10

3.1.1. Fases de un Compilador ........................................................................................................ 11


3.2.

Ejercicios por temas .............................................................................................................. 16

3.3.

Actividad................................................................................................................................ 17

4.

ANLISIS LXICO .......................................................................................................... 18

4.1.

Definicin de la primera parte del anlisis de un compilador .............................................. 19

4.1.1. Funciones del analizador lxico: ........................................................................................... 19


4.1.2. Expresiones Regulares........................................................................................................... 27
4.1.3. Ejemplos de Expresiones Regulares ...................................................................................... 28
4.2.

Ejercicios por temas .............................................................................................................. 33

4.3.

Actividad................................................................................................................................ 37

4.3.1. Primera prctica de compiladores ...................................................................................... 37


5.

ANLISIS SINTCTICO .................................................................................................. 38

5.1.

Teora de Gramticas ............................................................................................................ 38

5.1.2. Teora de reconocedores del lenguaje(reconocimiento descendente) ................................ 45


5.1.3. Desapile, Retenga .................................................................................................................. 47
5.2.

Ejercicios por temas .............................................................................................................. 55

5.2.1. Ejercicios definicin de gramticas ....................................................................................... 55


5.3.

Actividad................................................................................................................................ 57

5.3.1. Segunda Prctica de Compiladores (15%)............................................................................. 57


6.

Fase sntesis del compilador......................................................................................... 59

7.

PISTAS DE APRENDIZAJE .............................................................................................. 70

8.

GLOSARIO ................................................................................................................... 71

9.

FUENTES...................................................................................................................... 72

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 7

1. INTRODUCCIN
El estudio de los compiladores presenta una visin del fundamento de su construccin y su
utilizacin en la teora de sistemas, aunque siempre este cobijada por el desarrollo de los
lenguajes de programacin pues dependen de su aparicin y utilizacin. Un compilador es creado
al lado del lenguaje de programacin con el objeto primordial de realizar la revisin sobre el
cdigo del programador para determinar si este est siendo bien usado (sin errores de sintaxis) y
posteriormente encadenar las lneas de cdigo de alto nivel con lneas de cdigo de maquina; que
permitan generar un cdigo ejecutable para la computadora.
Se presenta inicialmente un conjunto de conceptos que permiten a los estudiantes adquirir una
cultura que facilite la comprensin de sus contenidos y asociarlos el desarrollo posterior del curso.
Principalmente se trata de la definicin de un compilador dividido en sus dos fases principales y su
diferenciacin con un simple traductor, tambin se muestra la importancia de entender el
funcionamiento del lenguaje de bajo nivel para poder realizar el equivalente de instrucciones de
alto y la obtencin del lenguaje de maquina (lenguaje ejecutable).
El curso continua con el estudio de las fases del compilador divididas por etapas, siendo la primera
el anlisis lxico que se en carca de revisar las lneas del lenguaje por caracteres para obtener los
componentes importantes del lenguaje (tokens) y almacenarlos en una tabla denominada de
smbolos que va a ser usada posteriormente por la siguiente etapa de anlisis. Es en el anlisis
sintctico donde se realiza la revisin de la lnea solicitando los tokens a la tabla de smbolos y
devolviendo un mensaje de lnea completa o con errores de acuerdo a lo que se d. El anlisis
semntico verifica la utilizacin de los tipos de acuerdo a su definicin de almacenamiento para el
programa y es capaz de mostrar algunas inconsistencias en el uso de los tipos determinados.
Despus del anlisis viene la Sntesis que permite generar cdigos de lenguaje binario o de ese
tipo de representacin que pueden generar programas ejecutables desde un cdigo de alto nivel.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 8

2. MAPA DEL MDULO


COMPILADORES

Este mdulo est diseado para estudiantes de ingeniera de sistemas o de profesionalizacin de


ingeniera de sistemas y se refiere a un conocimiento tan necesario y aplicable en el rea que
tiene que ver con el desarrollo de programas usando lenguajes de alto nivel y la forma como se
debe relacionar con cdigos que estn al nivel de la mquina.

OBJETIVO GENERAL
Desarrollar destrezas en el manejo de la estructura general de construccin de un compilador
involucrando y relacionando todas sus fases, desde el anlisis hasta la sntesis, usando ese
conocimiento en el posterior desarrollo de nuevas herramientas de compilacin o en el
mejoramiento y optimizacin de las ya construidas.

OBJETIVOS ESPECFICOS
Comprender el concepto de compilacin y su uso dentro de los sistemas diferenciando los lenguajes de
alto nivel con el lenguaje natural y con conocimiento de cmo funcionan los diferentes compiladores
actuales (como fue su diseo lgico y fsico).
Aplicar la teora de autmatas para el reconocimiento de patrones de los lenguajes, aplicando el
conocimiento terico en la solucin de problemas reales partiendo de las prcticas propuestas en clase
(realizar toda la fase de anlisis en la creacin de un compilador).
Construir un pequeo reconocedor de las instrucciones de un lenguaje tanto a nivel terico como
prctico, utilizando la teora de gramticas de los lenguajes de programacin.
Relacionar la escritura de instrucciones de alto nivel con su equivalente en bajo nivel y las estructuras
bsicas de programacin de alto nivel con su cdigo correspondiente en bajo nivel.

UNIDAD 1
Introduccin a
los
compiladores,
Definicin de un
compilador y
conceptos
generales.

UNIDAD 2
Anlisis lxico,
Definicin
de
Primera
parte
del anlisis de un
compilador.

UNIDAD 3
Anlisis
sintctico,
revisin de
lneas del
lenguaje para
determinar si
estn bien
escritas

UNIDAD 4
Fase de sntesis
del compilador,
con el objetivo
de enlazar el
cdigo
fuente
con el lenguaje
ensamblador.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 9

3. DEFINICION DE UN COMPILADOR Y CONCEPTOS GENERALES

Objetivo General
Comprender el concepto de compilacin y su uso dentro de los sistemas diferenciando los
lenguajes de alto nivel con el lenguaje natural y con conocimiento de cmo funcionan los
diferentes compiladores actuales (como fue su diseo lgico y fsico).

Objetivo especfico
Aprender a diferenciar los lenguajes de alto nivel con el lenguaje natural
Prueba Inicial
Seleccione la respuesta correcta segn su conocimiento previo:
1. Un compilador tiene como objeto:
a) Traducir las reglas de un lenguaje dado a otro
b) Revisar y corregir errores de escritura de un lenguaje
c) Realizar las fases completas de anlisis y sntesis a un lenguaje dado, para convertir un
cdigo para que sea entendido por la mquina.
d) Ninguna de las anteriores.
2. La diferencia entre el compilador y el traductor es:
a)
b)
c)
d)

El compilador es de propsito ms general que el traductor


El traductor es para lenguajes convencionales
El compilador detecta errores de sintaxis
Ninguna de las anteriores

3. La diferencia entre los lenguajes de alto y bajo nivel radica en que:


a) El lenguaje de alto nivel maneja ms palabras reservadas del lenguaje.
b) El lenguaje de bajo nivel solo lo pueden usar los programadores expertos
c) El lenguaje de alto nivel fue diseado por programadores
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 10

d) El lenguaje de bajo nivel utiliza instrucciones que se comunican directamente con los
registros de la mquina.
4. Cul es la diferencia entre las fases de anlisis y las de sntesis en la construccin de un
compilador:
a) El anlisis se preocupa por la optimizacin de memoria y generacin de cdigo.
b) El anlisis es la fase previa del cumplidor que revisa las componentes individuales y
sintcticas del leguaje para poder pasar a la construccin del cdigo intermedio.
c) No hay anlisis sin una sntesis previa dentro del diseo del compilador.
d) Ninguna de las anteriores.
5. El cdigo producido por el compilador en lenguaje:
a)
b)
c)
d)

Ensamblador
Lenguaje Fortran
Lenguaje de mquina
Las respuestas a y c son acertadas.

3.1. Definicin del compilador


Que es un compilador: Consiste en mirar la solucin de un lenguaje de alto nivel a un lenguaje de
bajo nivel. El proceso de traducir el programa escrito en lenguaje de alto nivel a un formato
ejecutable por un computador se conoce como compilacin. O sea, que un compilador es un
programa que lee en un lenguaje y traduce a otro lenguaje.
Hay compiladores que generan otro tipo de salida, para ser usada con fines diferentes al lenguaje
de mquina. Por ejemplo como lo hace un intrprete que ejecuta las operaciones especificadas
por un programa.
Los compiladores presentan diferencias claves respecto a los traductores pues su propsito no es
tan particular como el de convertir un lenguaje escrito con unas normas en otro lenguaje que
responde a normas distintas; a esta tarea se suma la revisin lexicogrfica, sintctica, semntica y
al final la escritura optimizada de un cdigo que puede ser perfectamente entendido por la
computadora (cdigo en lenguaje de maquina o ensamblador).

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 11

3.1.1. Fases de un Compilador


Por razones de diseo, la construccin del compilador se divide en varios pasos o fases. Se divide
en dos procesos genricos:
Anlisis: El cual hace referencia a la escritura correcta del programa fuente, escrito por un
programador.
Sntesis: Una vez se ha ejecutado el anlisis de manera exitosa se procede a agrupar las
componentes, que conforman el programa fuente, para construir frases con sentido con el fin de
generar una salida. Que puede ser en lenguaje de mquina o algn otro lenguaje destino que se
considere conveniente.
El proceso de anlisis comprende varias fases que son:
Anlisis lxico: Es la fase encargada de la lectura y exploracin misma del programa fuente, Esto
quiere decir que el analizador lxico lee el programa fuente, y lo fracciona en componentes que
tienen sentido para el lenguaje de programacin que s est considerando.
Anlisis sintctico: A esta fase le corresponde evaluar que el programa fuente escrito realmente
cumpla con las especificaciones del lenguaje definido para el compilador. Para ello normalmente
el programa fuente debe reflejar una estructura especial. Esta debe responder a una serie de
reglas, que pueden ser recursivas o no, las cuales se denominan con el nombre de gramticas. (Es
una de las fases ms importantes de la compilacin.)
Anlisis Semntico: Esta fase se dedica a determinar si todos los componentes del programa
estn siendo usados de manera vlida, para el contexto en el cual aparecen. Es decir, se deben los
componentes colindantes a cada componente siendo analizado, antes de determinar que las
operaciones ejecutadas por el mismo estn dentro de las operaciones permitidas por el lenguaje,
para dicho tipo de situaciones.
Una vez el programa fuente ha sido sometido a un anlisis completo y se puede tener en cuenta
de que esta correctamente escrito. Solo queda faltando generar algn tipo de salida para que el
ciclo de compilacin quede completo. Las fases restantes hacen una sntesis del programa fuente
para generar la salida. Estas fases son:
Generacin de cdigo Intermedio: La mayora de los compiladores modernos intentan optimizar,
hasta donde sea posible, el cdigo que generan. Para lograr esto los compiladores analizan
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 12

internamente y tratan de generar secuencias de instrucciones internamente equivalentes a las del


programa fuente, o reemplazan instrucciones para hacer un uso ms eficiente en la memoria. Su
objeto general es general un cdigo intermedio del programa fuente para que sea usado
posteriormente por el optimizador de cdigo.
Optimizacin de cdigo: El objeto de esta fase es el de mejorar el cdigo fuente escrito para que
sea ms rpido de ejecutar, o use de manera ms eficiente los recursos de la mquina. Este
proceso se apoya en la generacin de cdigo intermedio que fue realizada en la fase anterior. Por
lo general es mucho ms complicado optimizar el cdigo basndose en el programa fuente tal
como fue escrito por el programador.
Generacin de cdigo: El proceso de generacin de cdigo es el que constituye la salida, es decir,
genera el cdigo de mquina que corresponde al programa fuente. Hay que recordar la diferencia
con los intrpretes y su salida exclusiva de cdigo.
Ejemplo de cmo se compila una lnea genrica de un lenguaje:
Tomando una sencilla instruccin del lenguaje pascal se explicar cul es la forma en que el
compilador se comporta en cada fase y etapa respectiva. Sea la instruccin:
Suma:= ultimo + penltimo
Inicialmente el analizador lxico leer la lnea carcter a carcter usando como referencia los
espacios en blanco, que indican donde comienza y donde termina cada componen. El analizador
lxico ser invocado de manera sucesiva por el analizador sintctico y a cada llamada, en su orden
devolviendo lo siguiente:
El identificador: Suma
El smbolo de asignacin: =
El identificador: ltimo
El operador de suma: +
El identificador: penltimo
Luego comienza el anlisis sintctico para verificar que la lnea escrita en el lenguaje esta correcta.
Para lo anterior representa en una estructura jerrquica denominada rbol gramatical as:
Asignacin
Identificador
Suma

:=
identificador
ltimo

Operador
+

identificador
penltimo

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 13

Las reglas gramaticales usadas por la lnea que estamos discutiendo podrn ser las siguientes:
1. <asignacin>identificador :=<expresin>
2. <expresin>identificador
3. <expresin><expresin> +<expresin>
La ltima etapa del anlisis se ocupa de la semntica de construccin de las instrucciones del
lenguaje; revisando el uso de cada uno de los tipos definidos para determinar si estn
correctamente usados de acuerdo a su definicin.
Posteriormente al anlisis contina la etapa de sntesis que se realiza en su orden de la siguiente
manera:
Generacin de cdigo intermedio: Consiste en construir un cdigo con variables temporales donde
se use el recurso de memoria para representar cada instruccin de forma temporal. En el
problema que llevamos como ejemplo el cdigo intermedio seria:
Temp1=id2+id3
Id1=Temp1
Despus el cdigo intermedio es pasado por el optimizador de cdigo y obtenemos lo siguiente:
Id1=Temp1
La etapa final en el proceso de sntesis del compilador es convertir el cdigo optimizado a un
cdigo entendible por la mquina (lenguaje de maquina o ensamblador). En nuestro ejemplo
queda de la siguiente forma:
Mov Id3, R1 Mueva el contenido de Id3 a R1
Add Id2, R1
Sume Id2 con lo que tiene en R1
Mov R1, Id1 lleve el contenido de la suma a Id1
Un segundo ejemplo sobre la forma en que se trabaja un compilador. Sea la instruccin
del lenguaje C:
Posicin = Inicial + Velocidad * 60
Etapa de anlisis:
Analizador lxico:
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 14

El identificador: Posicin
El smbolo de asignacin:=
El identificador: Inicial
El operador de suma: +
El identificador: Velocidad
El operador de suma: *
El identificador constante: 60
Analizador Sintctico: (Representacin mediante un rbol sintctico)
Asignacin
=

Identificador
Id1

Operador
+

identificador
Id2

Identificador
Id3

Operador
*
entero
60

Etapa de Sntesis:
Generacin de cdigo intermedio
Temp1=enteroreal (60)
Temp2=Id3*temp1
Temp3=id2+temp2
Id1=temp3
Optimizacin de cdigo:
Temp1=id3*60
Id1=1d2+temp1
Generacin de cdigo:
Mov Id3, r2
Mult #60, r2
Mov r2, r1
Add Id2, r1
Mov r1,Id1

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 15

1. Conceptos Adicionales sobre Compiladores:


Para llevar a cabo todo el proceso anterior es necesario de:
Generar y administrar una tabla de smbolos: Esta es una estructura de datos, que puede ser una
lista doblemente enlazada, o una tabla en la memoria, que se utiliza para almacenar la
informacin concerniente a las variables definidas por el programa fuente. El objetivo de la tabla
de smbolos es facilitar la consulta de la informacin referente a las variables, sin necesidad de
hacer retrocesos en el programa fuente. Por tal razn, existen actividades propias de insercin y
bsqueda en la tabla de smbolos que ameritan que estn localizadas en su propia rea del
compilador.
Deteccin e informacin de errores: En cada fase de la compilacin se pueden detectar errores.
Uno de los objetos de la compilacin es tratar de detectar el mayor nmero posible de errores,
antes que se detenga la compilacin, para esos efectos se debe informar del error y luego tratar
de manipularlo de alguna forma, para que el compilador pueda continuar con el proceso de
compilacin. Se conoce la poca utilidad de los compiladores que detienen el proceso de
compilacin ante la presencia del primer error encontrado en el programa fuente.

2.

Grficamente:
Programa fuente
Analizador lxico
Analizador sintctico

Administrador de
Tabla de smbolos

Generacin de cdigo intermedio

Manejador
de errores

Optimizador de cdigo
Generador de cdigo
Programa objeto

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 16

3.2. Ejercicios por temas


Preguntas del tema 1:
De acuerdo a la definicin de compilador diga tres caractersticas que lo hacen importante
para la formacin de un ingeniero.
Describa tres caractersticas que diferencian a un compilador de un traductor normal
Ejercicio tema 2:
Diga cmo se relacionan el anlisis y la sntesis de un compilador?
El analizador lxico trabaja para el sintctico. Explique la anterior frase y describa
como se realiza el proceso.
Ejercicio tema 3:
Mostrar cmo se aplican las fases del compilador a las siguientes instrucciones:
Y= Vo*t +g*t^(2)
If(var1>=var2)
w=f*d/t
while(a>=1500)
c=a*(b-d)/f

Prueba Final
Cul es la diferencia entre un compilador y un traductor?
Qu diferencias hay entre el anlisis lxico, el sintctico y el semntico?
Con que objeto se realiza anlisis lxico en el anlisis de un compilador?
Qu criterio fundamental usa el compilador al optimizar el cdigo intermedio? Explique
Realizar las dos fases completas del reconocedor para la siguiente instruccin de un lenguaje
dado:
while(a>=1500)
c=a*(b-d)/f
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 17

3.3. Actividad
Lectura de la introduccin a los compiladores y sus conceptos bsicos en los libros gua o en alguna
direccin de internet con el tema. Discusin en el aula o a nivel virtual, para entender la
terminologa sobre compiladores.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 18

4. ANLISIS LXICO
Objetivo General
Aplicar la teora de autmatas para el reconocimiento de patrones de los lenguajes,
aplicando el conocimiento terico en la solucin de problemas reales partiendo de las
prcticas propuestas en clase (realizar toda la fase de anlisis en la creacin de un
compilador).
Objetivos especficos
Aplicar el conocimiento terico en la solucin de problemas reales a partir de las prcticas
propuesta en clase.
Prueba Inicial
Seleccione la respuesta correcta segn su conocimiento previo:
Una componente del lenguaje es:
a. Una lnea
b. Una instruccin
c. Un identificador
d. Un bloque de instruccin
Para recorrer por caracteres una instruccin debo:
a)
b)
c)
d)

Capturar el tamao de la cadena


Usar un ciclo que recorra con una variable hasta el fin de la cadena
Recorrer hasta encontrar caracteres especiales
Usar variables temporales de almacenamiento
Las variables se diferencian de las constantes en:

a.
b.
c.
d.

El carcter de inicio
La cantidad de caracteres
Las constantes pueden ingresar con una letra al inicio
Las variables son alfanumricas

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 19

4.1. Definicin de la primera parte del anlisis de un compilador


El analizador lxico una forma sencilla de crear un analizador lxico consiste en la creacin de un
diagrama que ilustre la estructura de los componentes lxicos del lenguaje fuente y despus hacer
la traduccin a mano del diagrama a un programa para encontrar las componentes lxicos.

4.1.1. Funciones del analizador lxico:


Permite la obtencin de componentes lxicas del lenguaje denominadas tokens, que
posteriormente van a ser usadas por el analizador sintctico en la revisin completa de las lneas
del lenguaje (el analizador sintctico pide las componentes al lxico, quien las saca de la tabla de
smbolos y se las entrega al analizador sintctico).
Grficamente:

4.1.1.1 Funciones secundarias de interfaz de usuario:


Eliminar del programa fuente comentarios y espacios en blanco (blancos, tab y nueva
lnea).
Relaciona los mensajes de error con el programa fuente.
En algunos compiladores el analizador de lxico se encarga de hacer una copia del
programa fuente en el que estn marcados los mensajes de error
Si hay procesamiento de macros entonces estas se pueden aplicar en anlisis lxico.
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 20

Razones para dividir el analizador lxico del sintctico:


Un diseo sencillo: Permite la simplificacin de una u otra de dicha fases. La eliminacin
de comentarios y espacios en blanco son hechos dentro del analizador lxico, lo cual libera
al sintctico de tales funciones
La eficiencia del compilador por el uso de una lgica de revisin a partir de la teora de
autmatas que permite separar con rapidez y precisin los tokens que contiene cada lnea
analizada
Se mejora la transportabilidad del compilador: Puede darse una generalidad entre los
smbolos analizados entre distintos lenguajes de compilacin.
Componentes Lxicos, patrones y lexemas:
Patrn: Representa un conjunto de smbolos con sentido para el lenguaje; ms preciso, es
una expresin regular.
Lexema: Grupo general de caracteres que tienen concordancia con una componente del
lenguaje al que se le realiza el anlisis del compilador.
TABLA EN LENGUAJE DE ALTO NIVEL
Componentes lxico lexemas Descripcin informal del patrn
Const Const Const
IfIfIf
Relacin<, <=,=, <>,>,>=< o <= o = o <>
Idpi, cunta, d2 Letra seguida de letras y dgitos
Num3.1416, 0, 6,02E23 constante numrica
En la mayora de los lenguajes de programacin se consideran como componentes lxicos:
Palabras clave, operadores, identificadores, constantes, cadenas literales y signos de puntuacin
como: parntesis, coma y punto y coma.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 21

Teora de Autmatas finitos (mquinas de estado finito MEF):


Es un modelo matemtico que puede ser simulado e implementado como programa de
computador.
Se utiliza porque:
Resuelve la mayora de los problemas en el anlisis lxico.
Consumen una cantidad fija de memoria.
Son muy eficientes.
Existe una teora matemtica que da sustento y permite modificarlos.
Una MEF consta de:
Un conjunto finito de smbolos de entrada.
Un conjunto finito de estados
Uno o ms estados definidos como estado inicial
Uno o ms estados definidos como estados de aceptacin
Un conjunto de transiciones.
Una transicin es una funcin que determina el nuevo estado en que quedar la MEF, con base en
el estado actual y el smbolo de entrada.
Ejemplo 1:
Construir una MEF que reconozca secuencias de unos y ceros tal que el nmero de unos sea
impar.
Son vlidas: 01101 - 11001 1
No es vlida: 00010
Smbolos de entrada= {0,1}
Estados = {So: Numero de unos par
S1: Nmero de unos impar}
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 22

Estado inicial = {So}


Estado de aceptacin = {S1}
Se puede construir un diagrama de estados para representar las transiciones de acuerdo al
smbolo de entrada en cada variacin. Los estados entre crculos, las transiciones con flechas
dirigidas y los estados de aceptacin con doble crculo.
Tabla de transiciones:
Es una matriz de M filas y N columnas, siendo M el nmero de estados y n el nmero de smbolos
de entrada.
A la primera fila siempre le corresponde el estado inicial; grficamente:
SE/Estado
So
S1

0
So
S1

1
S1
So

Si son varios los estados inciales se sealan con flechas(->)


Ejemplo2:
Construir una MEF que reconozca secuencias de unos y ceros tal que el nmero de unos sea impar
y el nmero de ceros sea par.
Smbolos de entrada = {0, 1}
Estados: {CPUP, CPUI, CIUP, CIUI}
CPUP: ceros pares unos pares
CPUI: ceros pares unos impares
CIUP: ceros impares unos pares
CIUI: ceros impares unos pares
Estado inicial: CPUP
Estado de aceptacin es: CPUI

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 23

El Grafico de Transiciones representa la MEF con un grfico de crculos y flechas que equivale a la
matriz representada a continuacin:
Tabla de transiciones:
SE/Estados
CPUP
CPUI
CIUP
CIUI

0
CIUP
CIUI
CPUP
CPUI

1
CPUI
CPUP
CIUI
CIUP

Aceptacin=1
0
1
0
0

Sentencia nula: Es la ausencia de smbolos de entrada ()


1. Construir una MEF que reconozcan secuencias de letras a y b de tal forma que el nmero
de b sea par.
Estados = {x =nmero de b par, x1 = nmero de b impar}
Estado inicial = {nmero de b par}
Estado de aceptacin = {nmero de b par}}
Tabla de transiciones:
2. Construir una MEF que reconozca lista de variables en el lenguaje de programacin
FORTRAN.
Smbolos de entrada = {variable, constante, ,, (, )}
Estados = {0 = Estado inicial
1 = Entr la variable
2 = Entr coma fuera de parntesis
3 = Entr Parntesis izquierdo
4 = Entr constante
5 = Entr parntesis derecho
6 = Entr coma dentro de parntesis
7= Entr variable dentro de parntesis
Err = Ocurri un error}

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 24

Por ejemplo: a, b, v (10), mat (5, n, 3), h


Estados: 01 21213452 1 346764521
Estado de aceptacin = {1: entr variable fuera de parntesis
5: Entr parntesis derecho}
La tabla de transiciones de estado es como sigue:

0
1
2
3
4
5
6
7
Err

Var
1
Err
1
7
Err
Err
7
Err
Err

Cte
err
err
err
4
err
err
4
err
err

,
err
2
err
err
6
2
err
6
err

(
err
3
err
err
err
err
err
err
err

)
err
err
err
err
5
err
err
5
err

0
1
0
0
0
1
0
0
0

Nota: Se detectaron estados equivalentes pos inspeccin: Los estados 0,2; 3,6; 4,7.
Estados equivalentes
Son estados a partir de los cuales se reconoce el mimo conjunto de secuencias.
Cuando se detecta que una MEF tiene estados equivalentes se puede simplificar la mquina.
La MEF para la lista de variables en FORTRAN se simplificara de la siguiente manera:

02
1
36
47
5
Err

Var
1
Err
47
Err
Err
Err

cte
err
err
47
err
err
err

,
err
02
err
36
02
err

(
err
36
err
err
err
err

)
err
err
err
5
err
err

0
1
0
0
1
0

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 25

Hay situaciones en las cuales no se detectan estados equivalentes por simple inspeccin como en
el caso anterior y la MEF tiene estados equivalentes. Para que dos o ms estados sean
equivalentes deben cumplir las condiciones:
Condicin de Compatibilidad: los dos o ms estados deben ser de aceptacin o de rechazo.
Condicin de Propagacin: Para un mismo smbolo de entrada los dos o ms estados
deben hacer transicin hacia estados equivalentes.
Mtodo de particiones:
Sirve para identificar estados equivalentes en una MEF y consiste en aplicar las dos condiciones
anteriores, con el objeto de simplificar la MEF.
Ejemplo:
A
6
7
1
4
7
4
4

1
2
3
4
5
6
7

b
3
3
5
6
3
1
2

0
0
0
0
1
1
1

Po= {1, 2, 3,4} No Hay equivalentes por simple inspeccin


P1= {5, 6,7}
Po/a
1a6
2a7
3a1
4a4
1,2 no es equivalente con 3,4
Po= {1,2}
Po/b
1b3
2b3
1 y 2 son equivalentes

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 26

P1/a
5a7
6a4
7a4
P2= {6,7} Son de la misma particin (con el smbolo a van ambos al estado 4)
Estados que quedan en la misma particin son equivalentes. 1 y 2; 6 y 7 son equivalentes.
MEF simplificada:

12
3
4
5
67

A
67
12
4
67
4

B
3
5
67
3
12

0
0
0
1
1

Las MEF construidas en los ejemplos inciales se denominan determinsticas ya que cada transicin
es nica y tiene un solo estado inicial.
La MEF no determinsticas son aquellas que pueden tener ms de un estado inicial y/o alguna
transicin puede ser hacia dos o ms estados.
Ejemplo:

0
1
2
3

A
1
3,0
2,3
1

B
2
1
0
2

0
1
0
1

Es una MEF no determinstica


Abbaba es una hilera que se acepta:
2
0b2a
0 a 1 b 1 b 1 a3*Aceptacin
2
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 27

3b2a
3*Aceptacin
S para una hilera de entrada hay solo un camino que lleva a un estado de aceptacin la hilera se
acepta.

4.1.2. Expresiones Regulares


Una expresin regular representa con un conjunto de smbolos la formacin de componentes
lxico de un lenguaje formal.
De una expresin regular podemos obtener conjuntos finitos o infinitos de cadenas que
corresponden a ella es decir, conjuntos regulares.
Expresiones regulares en teora de lenguajes formales:
Las expresiones regulares estn formadas por constantes y operadores y denotan conjuntos de
palabras llamados conjuntos regulares. Dado un alfabeto finito , se definen las siguientes
constantes:
1. (conjunto vaco) que denota el conjunto
2. (Palabra vaca) que denota el conjunto {}
Del alfabeto) a elemento de que denota el conjunto
{"a"}
Y las siguientes operaciones:
1. (unin) r|s que denota la unin de R y S, donde R y S son respectivamente los conjuntos
denotados por las expresiones r y s
2. (Concatenacin) rs que denota el conjunto { | en R y en S}, donde R y S representan
respectivamente los conjuntos denotados por las expresiones r y s. Por ejemplo, la expresin
"(ab|c) (d|ef)" denota el conjunto
{"ab", "c"}{"d", "ef."} = {"abd", "abef", "cd", "cef"}.
3. (clausura de Kleene) r* que denota el ms pequeo conjunto que extiende a R, contiene y
est cerrado por concatenacin de palabras, donde R es el conjunto denotado por la expresin r.
r* es tambin el conjunto de todas las palabras que pueden construirse por concatenacin de
cero o ms ocurrencias de R. Por ejemplo, "(ab|c)*" contiene las palabras , "ab", "c", abab",
"abc", "cab", "cc", "ababab", etctera. Para reducir al mnimo el nmero de parntesis necesarios
para escribir una expresin regular, se asume que la clausura de Kleene es el operador de mayor
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 28

prioridad, seguido de concatenacin y luego la unin de conjuntos. Los parntesis solo se incluyen
para eliminar ambigedades.
(Ing. Miguel ngel Durn Jacobo, Introduccin a los Lenguajes formales, Documento en pdf,
pgina12,http://www.itchetumal.edu.mx/paginasvar/Maestros/mduran/Archivos/Unidad%206%2
0Introduccion%20a%20los%20lenguajes%20formales.pdf )

4.1.3. 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.1.3.1 Mquinas de pila (MP)


Es un autmata finito que soluciona algunos problemas del anlisis lxico y es usado
primordialmente para problemas de reconocimiento en el analizador sintctico.
Consta de:
Un conjunto finito de smbolos de entrada incluyendo fin de secuencia.
Un conjunto finito de smbolos en la pila incluyendo pila vaca
Un conjunto finito de estados.
Un estado designado como estado inicial
Una configuracin inicial de la pila.
Un conjunto de transiciones. Cada transicin consta de tres operaciones:
Operacin de pila: Apilar, Desapilar o ninguna.
Operacin de estado: Cambiar de estado o permanecer en el estado actual.
Operacin de entrada: Leer el siguiente smbolo: Avance
No leer el siguiente smbolo: Retenga

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 29

Nota: La transicin en blanco es de RECHAZO


Ejemplo 1:
Construir una mquina de pila que reconozca que los parntesis estn bien apareados en una
expresin aritmtica:
Cadenas posibles:
(( ) ( ))
Smbolos de entrada = {(,), }
Smbolos de la pila= {pila vaca, (}
Estados= {So}
Estado inicial= So
Configuracin inicial de la pila= Pila Vaca
(

Apile( ( )
So
avance

Dasapile( ( )
So
Avance

Pila vaca

Apile( ( )
So
avance

Ejemplo 2: Construir una mquina de pila que reconozca secuencias de la forma:


0 n1 n con n>0.
Cadenas posibles
01
0011
00001111
Smbolos de entrada = {0, 1, }
Smbolos en la pila = {pila vacia, 0}
Estados= So: Se aceptan ceros hasta el primer uno
S1: Se aceptan solo unos
Estado inicial= So
Configuracin inicial de la pila= Pila Vaca
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 30

Pila vaca

0
Apile( 0 )
So
Avance
Apile( 0 )
So
Avance

1
S1
retenga

1
Desapile (0 )
S1
Avance

So

Pila vaca

S1
Ejemplo 3:
Construya una MP que reconozca secuencias de la forma: W 2 Wrcon W= (1+0)* y
R: cadena en reversa.
10111211101
Smbolos de entrada= {0, 1, 2, }
Smbolos en la pila= {0,1, pila vaca}
Estados= {So, S1}
Estado inicial= So
Configuracin inicial de la pila= pila vaca
0
1
2

Apile (0 )
Apile (1 )
S1
1
So
So
Avance
Avance
Avance
Apile (0 )
Apile (1 )
S1
0
So
So
Avance
Avance
Avance
Apile (0 )
Apile (1 )
S1
Pila vaca
So
So
Avance
Avance
Avance
So
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 31

1
desapile (1 )
So
Avance

desapile (0 )
So
Avance

Pila vaca

S1
Operaciones adicionales con la mquina de pila
1. Operacin Replace:
Forma general. Replace ()
Siendo una hilera cualquiera de smbolos.
La operacin reemplaza el tope de la pila por la cantidad de smbolos que tiene la hilera .
2. Operacin Out
Forma general: Out ()
Imprime la hilera
Uso de la operacin replace
Construir una mquina de pila de un solo estado que reconozca secuencias de la forma:
0 n1 n con n>0.
Smbolos de entrada= {0,1, }
Smbolos en la pila= {pv,*,0}
So= Se reciben ceros y unos despus de * en la pila
Configuracin inicial de la pila = {pv*}

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 32

0
R

Pv

Replace(0,*)
So
Avance
R

1
Desapile (1)
So
Avance
Desapile (*)
So
retenga
R

Uso de la operacin Out


Construir una mquina de pila que acepte como entrada cualquier secuencia de ceros o de unos y
produzca una salida de la forma: 0m1n, con m# de ceros y n# de unos.
Imprima ceros y apile unos.
Smbolos de entrada={0,1, }
Smbolos en la pila={pv,1}
So: Acepta cualquier secuencia de ceros o de unos.
Configuracin inicial de la pila={pv}

Pv

0
Out(0)
So
Avance
Out(0)
So
avance

1
Apile(1)
So
Avance
Apile(1)
So
avance

Desapile
out(1)
retenga
Acepte

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 33

4.2. Ejercicios por temas


Conteste las siguientes preguntas:
Por qu el analizador lxico elimina espacios blancos y comentarios cuando revisa el
cdigo fuente en alto nivel?
Qu hace diferente a una componente lxico agrupada en la tabla de smbolos?
Qu funciones de los lenguajes de programacin deben ser utilizadas por el analizador
lxico?
Porque en vez de usar el analizador lxico se utiliza el semntico de una vez?
TALLER DE ANALISIS LEXICO
MAQUINAS DE ESTADO FINITO (MEF)
Construir una MEF que reconozca las palabras claves while, for para el manejo de ciclos en
el lenguaje C
Construir una MEF que reconozca las constantes pi y e(3.1416; 2.7172)
Construir una MEF que reconozca las constantes positivas sin punto decimal
Construir una MEF que reconozca las de a, b, c en las cuales el nmero de a sea par el
nmero de b sea impar y el nmero de c sea par. Suponga que el estado inicial es de
paridad para el nmero de smbolos
Construir una MEF que reconozca las secuencias de 1 y 0 tales que se intercale la
secuencia partiendo de uno de los smbolos y terminando en el mismo.
Construya una MEF para el problema anterior teniendo en cuenta que se comienza en un
smbolo y se debe terminar la intercalacin con el otro.
Construir una MEF que reconozca secuencias que comiencen por la letra os y terminen
con la letra a.
Construir una MEF que tome como entrada una lnea del lenguaje de definicin de
variables en C y reconozca el tipo y las variables definidas (suponga que se pueden definir
vectores y matrices)
Construir una MEF que reconozca las variables en una lnea de definicin de variables en el
lenguaje C.
Construir una MEF que reconozca las constantes decimales sin signo, con punto decimal y
exponente.
Construir una MEF que reconozca las seales marinas de auxilio recibidas por un
guardacostas que comienzan por 0 o 1 y posen secuencias intercaladas de a dos ceros y
dos unos terminando finalmente en 1.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 34

Construir una MEF que reconozca secuencias de unos y de ceros de tal manera que el
nmero de unos sea par y el nmero de ceros sea impar o se de imparidad en la cantidad
para ambos.
Construir una MEF que reconozca secuencias que comiencen en cualquier letra y terminen
en aba.
Construir una MEF que reconozca secuencias de a y b tales que el nmero de b sea impar.
Construir una MEF que reconozca trayectorias para subir desde el primer piso hasta el
quinto usando las escaleras o el ascensor y sabiendo que por l ascensor subo de a dos
pisos y por las escaleras de a piso.
Construir una MEF que permita reconocer secuencias de unos y de ceros que empiecen
por 1 tengan posteriormente cantidad par de ceros.
Construir una MEF que lea una lnea de VB con estructuras condicionales y reconozca las
variables los operadores, las constantes y el tipo.
Construir una MEF que reconozca secuencias combinadas de vocales y consonantes que
permitan solamente la intercalacin de smbolos (vocal-consonante o consonante vocal).
La secuencia puede terminar en cualquier letra.
TALLER DE EXPRESIONES REGULARES
Construir una expresin regular para los siguientes conjuntos:
Conjunto de todas las variables con solo letras y un digito al final
Secuencias de caracteres que comiencen con un digito y terminen con una letra teniendo
una o ms letras o nmeros entre digito y letra en cualquier orden y cantidad
Todos los alfanumricos que empiecen por vocal terminen en cualquier combinacin de
dgitos.
Nmeros decimales de cualquier cantidad de cifras
Secuencias de caracteres que comiencen con un digito y terminen con una letra teniendo
una o ms letras o nmeros entre digito y letra en cualquier orden y cantidad
Cul es el conjunto determinado por la expresin regular dada:
(Vocal)(01)*(consonante)
Si L(r) = {a, b, c} y L(s)={d, e} que es: L(s) L(r)L(s) L(r)
(digito)*letra digito
(vocal consonante) digito
TALLER DE MAQUINAS DE PILA
Construir una mquina de pila que reconozca secuencias de la forma:

0 m 1 n 0 m 2 1m 0 n 1m . Con m>0;n>0
Construir una mquina de pila que reconozca secuencias de la forma:
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 35

W2 0 m 1 2Wr, con m>0. W es cualquier secuencia de unos y de ceros.


Construir una mquina de pila que reconozca expresiones aritmticas bien apareadas con
llaves y parntesis.
Construir una mquina de pila que imprima 0 m 1m ; para cualquier secuencia de 1 0.
Construir una MP de un solo estado que reconozca secuencias de 1 y 0 de la forma:

0 m 1 n 0 n 1m .
Construir una mquina de pila que permita que permita reconocer secuencias de la forma:

an bm z am bn .
Construir una MP de un solo estado que reconozca secuencias de 1 0 que sean
intercaladas y tengan la misma cantidad de unos que de ceros.
Prueba Final
Selecciona la respuesta correcta para los siguientes enunciados:
TALLER GENERAL DE ANALISIS LEXICO
1. Una expresin regular es importante porque:
a)
b)
c)
d)

Permite manejar operadores para smbolos de un lenguaje


Representa un alfabeto por medio de una expresin concreta y entendible.
Usa la cerradura de Kleene
Puede representar el alfabeto sin smbolos

2. Porque es importante la precedencia de operadores en las expresiones regulares:


a)
b)
c)
d)

Se puede hacer primero la concatenacin y despus las otras


Todas tienen la misma precedencia
Se pueden omitir los parntesis en expresiones que no los necesitan
La unin es de igual precedencia que la concatenacin

3. El autmata de pila se diferencia de la MEF en que aspectos bsicos:


a)
b)
c)
d)

En la definicin de los smbolos de entrada


En la definicin de los estados
En el uso de las estructura pila
Todos las anteriores

4. Pila vaca y fin de secuencia en el ltimo estado quiere decir:

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 36

a) Que puedo aceptar en esta condicin en el primer estado de una mquina de dos estados
b) Que no puedo aceptar en una mquina de dos estados en el primer estado
c) Que no puedo aceptar en una mquina de dos estados en su ltimo estado
d) Ninguna de las anteriores.
5. Las expresiones regulares son importantes porque?:
a.
b.
c.
d.

Permiten solucionar problemas del anlisis lxico


Permiten solucionar problemas del anlisis sintctico
Permiten representar un lenguaje con smbolos
Permiten representar un alfabeto de forma simblica y con operaciones

6. El autmata de pila que tipo de problemas resuelve:


a.
b.
c.
d.
7.
a.
b.
c.
d.
8.
a.
b.
c.
d.

Cualquier tipo de secuencias


Secuencias solamente direccionadas
Secuencias direccionadas y apareamiento
identifica tokens variables y constantes
La expresin regular D L*D es equivalente a:
(D L)*D
D (L*D)
(D L*) D
D D*L
El autmata de pila define smbolos en la pila para:
Permitir manejar la entrada de smbolos en la cadena
Permitir que se de transicin entre los estados
Permitir la estructura de datos permita generar una condicin de aceptacin.
Permitir que la estructura pueda comenzar sin ningn smbolo inicialmente

9. La lgica de un autmata finito sirve para:


a)
b)
c)
d)

Revisar hasta el carcter final de la lnea


Separar por caracteres la lnea
Encontrar errores de escritura en la lnea
Establecer una lgica de revisin por caracteres que separe componentes

10. Un rbol sintctico representa:


a. la estructura gramatical de las lneas del lenguaje
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 37

b. La ubicacin de componentes lxicas


c. La estructura de las componentes sintcticas
d. rbol de componentes del lenguaje

4.3. Actividad

4.3.1. Primera prctica de compiladores


Elaborar un programa en el lenguaje que escojas que reciba una instruccin del lenguaje C con
una expresin aritmtica (con los operadores +,-,*, /) y los signos de agrupacin (}, {, (,)) y usando
la lgica de los autmatas finitos que se desarrollar en clase permita realizar anlisis carcter por
carcter en una lnea dada identificando y mostrando una lista de variables encontradas, las
constantes y los operadores. El programa deber tambin identificar si los signos de agrupacin
estn bien apareados en la expresin original y deber sacar un mensaje de acuerdo a si hay o no
un buen apareamiento. Tenga en cuenta que la expresin aritmtica solo tiene una llave, pero
puede tener cualquier cantidad de parntesis. Suponga para este anlisis lxico la lnea de
entrada no va a tener faltantes de variables, constantes y operadores.
Se debe entregar lo siguiente:
El archivo fuente y ejecutable funcionando
El anlisis con los autmatas finitos,
El diseo (manual corto de usuario): Explicacin de la interfaz.
La explicacin del cdigo (corto manual tcnico): Explicacin de los bloques de instrucciones con
los cuales se resolvi el problema.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 38

5. ANLISIS SINTCTICO
Objetivo General
Construir un pequeo reconocedor de las instrucciones de un lenguaje tanto a nivel
terico como prctico, utilizando la teora de gramticas de los lenguajes de
programacin.

Objetivos especficos
Conocer y usar la teora de gramticas de los lenguajes de programacin.
Aplicar el conocimiento terico en la solucin de problemas reales partiendo de las
prcticas propuestas en clase
Prueba Inicial
De acuerdo a tu conocimiento actual contesta las siguientes preguntas:
Cmo crees que estn hechos los lenguajes de programacin de alto nivel?
Conociendo la gramtica del lenguaje espaol con cuantas normas est construida? Un
lenguaje tendr la misma cantidad de normas de construccin
Cmo se construyeron entonces los lenguajes de programacin que conoces?
Si no existiera el anlisis en la compilacin se podra encontrar los errores cometidos por
el programador al escribir el cdigo?

5.1. Teora de Gramticas


Son conjuntos de normas que definen la construccin de un lenguaje.
Cada norma se dice que es una produccin. Toda produccin consta de un lado Izquierdo y un
lado derecho y el separador, el cual se lee como se define como.
El lado izquierdo siempre ser un no terminal (<nt>) los cuales siempre van entre ngulos <> , los
no terminales definen la estructura del lenguaje.
El lado derecho es cualquier hilera de terminales (T) y N.T. pudiendo ser .
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 39

El objetivo de toda gramtica es generar hilera final de T, lo cual se consigue mediante un proceso
llamado derivacin.
Derivar consiste en reemplazar un N.T por el lado derecho de alguna produccin que defina ese
N.T.
Todo proceso de derivacin debe comenzar con el smbolo inicial de la gramtica, el cual es el N.T.
del lado izquierdo de la primera produccin.
Ejemplo:
1. <S>
2. <S> <P>
3. <P> I

<S>+<P>

Derivando la anterior gramtica


<S>
#2
<P>
#3
I
Otra forma de derivar
<S>
#1
<S>+<P>
#2 #3
<P>+ I
#3
I + I
Como la primera produccin es de aplicacin recursiva la gramtica genera sumas consecutivas a
partir de un solo termino (sumas infinitas).
Todo proceso de derivacin responde a un rbol de derivacin. En el caso del ejemplo anterior se
representa de la siguiente manera:
Primer rbol de derivacin:

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 40

<S>
<P>
I
Segundo rbol de derivacin:
<S>
<S> + <P>
<P> +
I

I
I

Construccin de gramticas con base en una MEF


Los estados de la MEF sern los NT de la gramtica
Los smbolos de entrada a la MEF sern los terminales de la gramtica
Cada transicin ser una produccin
Cada estado de aceptacin implica una produccin cuyo lado derecho ser
Forma especial: Son gramticas cuyas Gramticas de la produccin son de la forma:
<NT> t<NT>
<NT>

Gramticas Lineales por la derecha: son gramticas cuyas producciones son de la forma:

<NT>

<NT>
w

w<NT>

Siendo w una hilera cualquiera de terminales t que puede ser


Para poder construir un reconocedor del lenguaje debemos trabajar con gramticas lineales por la
derecha convertidas a una forma especial.
Consideracin de lenguajes generados por gramticas
Ejemplos:
Considere la gramtica G con la gramatical simple:

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 41

1. <E>(<E>)
2. <E>I
Considere la gramtica G con la gramatical simple:
1. <E><E>+I
2. <E>I
La gramtica siguiente:
1.
2.
3.
4.
5.

<sentencia><sent_if>
<sentencia>otro
<sent_if>if(<exp>)<sentencia>
<sent_if>if(<exp>)<sentencia>else<sentencia>
<expre>0 o 1

Sean las gramticas:


1. <A><A>a
2. <A>a
Recursiva por la izq.

1. <A>a<A>
2. <A>a
Recursiva por la derecha

Gramticas Libres de contexto:


Una gramtica libre de contexto en una especificacin para la estructura sintctica de un lenguaje
de programacin. La gramtica involucra reglas de recursividad que determinan la orientacin del
rbol que sale de la representacin.
Como construir gramticas a partir de lenguajes:
1. Construir una gramtica que genere expresiones de la forma: 0(n) 1(n) con n>0
1. <A>0<A>1
2. <A>01
2.
Construir una gramtica que genere: (0+1)*=W
1. <A>1<A>
2. <A>0<A>
3. <A>
3. Construir una gramtica que genere sumas y restas recursivas.
4. Construir una gramtica que genere secuencias: 0 n 1 m0 m1 n con m, n>0.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 42

Gramtica para generar expresiones aritmticas


1.
2.
3.
4.
5.
6.
7.

<E><E>+<E>
<E><E>-<E>
<E><E>*<E>
<E><E>/<E>
<E><E>^<E>
<E> (<E>)
<E>I

NOTA: El identificador I es un token (variable o constante)


Si se realizan derivaciones para obtener la cadena a + b * c as:
<E>
<E>
I

+ <E>
<E>
<E>
*
I

Pero se puede derivar aplicando primero el producto y el rbol de derivacin queda abriendo a la
izquierda y generando un rbol de derivacin distinto para la misma expresin extrada del
proceso.
Estas operaciones son ambiguas, lo cual puede traer errores, por esto se utiliza la prioridad de
operadores adems se debe tener en cuenta la asociatividad. Se debe tener en cuenta esta ltima
caracterstica por la izquierda o por la derecha dependiendo cuando lo necesite.
Operadores de menor prioridad deberan ser primeros en las produccionesque los de mayor. Una
gramtica para expresiones aritmticas reescrita con estas caractersticas seria:
1.
2.
3.
4.
5.
6.
7.
8.

<E><E>+<T>
<E><E>-<T>
<E><T>
<T><T>*<F>
<T><T>/<F>
<T><F>
<F><F>^<P>
<F><P>

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 43

9. <P>(<E>)
10. <P>I
En la potenciacin se realiza la asociatividad por la derecha:
<F><P>^<F>
Otra gramtica para expresiones aritmticas:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.

<E><T><LT>
<LT>+<T><LT>
<LT>-<T><LT>
<LT>
<T><F><LF>
<LF>*<F><LF>
<LF>/<F><LF>
<LF>
<F><P><LP>
<LP>^<P><LP>
<LP>
<P>(<E>)
<P>I

5.1.1.1 Procesamiento dirigido por la sintaxis


Gramticas de traduccin:
a+b*cabc*+
Lea(a), imprima(a), lea(+),lea(b),imprima(b),lea(*), lea(c), imprima(c),imprima(*), imprima(+).
Entre llaves las acciones que hay que tomar (imprimir {}). Lo cual implica:
A {a}+b {b}*c{c}{*}{+}
Secuencia de actividades: Es una secuencia de smbolos de entrada y smbolos de accin.
Si a una secuencia de actividades se le suprimen los smbolos de entrada queda la traduccin.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 44

Ejemplo 1: Gramtica para expresiones en infijo y las traduce a posfijo


1.
2.
3.
4.
5.
6.

<E><E>+<T> {+}
<E><T>
<T><T>*<F>{*}
<T><F>
<F>(<E>)
<F>I{I]

Ejemplo 2: Construir una gramtica de traduccin que genere cualquier secuencia de unos y de
ceros que produzca una salida: 1m0n siendo m el nmero de unos y n el nmero de ceros.
Primero Generamos la gramtica que genere cualquier secuencia de unos y ceros:
1. <A>1<A>
2. <A>0<A>
3. <A>
La gramtica de traduccin seria:
1. <A>1 {1} <A>
2. <A>0<A> {0}
3. <A>
Gramticas con atributos:
Atributo se refiere a la parte del valor de un terminal o un no terminal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.

<E><E>+<T>
p= q+r
<E><T>
p=q
<T><T>*<F>
p=q*r
<T><F>
p=q
<F>(<E>)
p=q
<F>I
p=q

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 45

Atributos Sintticos: Atributos que se mueven de abajo hacia arriba en el rbol de derivacin
Atributos heredados: Atributos que se mueven de arriba hacia abajo o de izquierda a derecha en el
mismo nivel.

5.1.2. Teora de reconocedores del lenguaje(reconocimiento descendente)


Todo el reconocimiento descendente como el ascendente, funcionan como mquinas de pila de
un estado.
Definicin de la mquina de pila de un estado:
Smbolos de entrada= {los terminales + }
Smbolos en la pila= {pila vaca, n.t, los terminales que estn en una posicin distinta a la primera
en el lado derecho de alguna produccin}
Configuracin inicial de la pila={pila vaca<S>, siendo <S> el smbolo inicial de la gramtica}
Transiciones: Sea: A: Smbolo en el tope de la pila
X: smbolo de entrada
1. Existe una produccin de la forma AX
2. La transicin ser: replace (r ) y avance
3. A es un T implica que la transicin correspondiente al cruce de x con A, siendo A=X, ser:
DESAPILE, AVANCE.
4. A pila vaca y x es la transicin ser. ACEPTE
5. En cualquier otro caso: RECHACE
Ejemplo 1: Construir un reconocedor descendente para la siguiente gramtica:
1. <S>I
2. <S>(<S><R>
3. <R>,<S><R>
4. <R>)
Nota: Esta gramtica posee una particularidad que el primer smbolo del lado derecho en todas las
producciones es un terminal (se conoce como gramtica S)
SE= {I, (,), }
SP= {<S>, <R>, }
CIP= {<S>}
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 46

Estado nico de reconocimiento.

<R>
<S>

#1

#2

,
#3

)
#4

A
#1: DESAPILE , AVANCE
#2: REPLACE(<R><S>), AVANCE
#3: REPLACE(<R><S>), AVANCE
#4: DESAPILE, AVANCE
Si derivamos secuencias de la gramtica y probamos con el reconocedor deben ser reconocidas
como de aceptacin. Si hay secuencias que no responden a las normas de la gramtica el
analizador sintctico las debe rechazar en el anlisis.
Caractersticas:
Gramticas S: Son gramticas en las cuales el lado derecho comienza por un terminal y
producciones cuyo smbolo del lado izquierdo sea el mismo, los terminales con los que comienzan
sus lados derechos son diferentes.
Conjuntos
Primeros de un N.T.: Es el conjunto de los terminales con los cuales puede comenzar una hilera
derivada a partir de ese N.T.
Primeros de una produccin: Es el conjunto de terminales con los cuales puede comenzar una
hilera al aplicar esa produccin.
Siguientes de un smbolo X: (x es T. o N.T.) es el conjunto de T que pueden aparecer despus de X
en algn proceso de derivacin.
Normas para el clculo de siguientes:
La marca de fin de secuencia () siempre pertenecer al conjunto de siguientes del smbolo inicial
de la gramtica.
Cuando busco los siguientes de un smbolo que es ltimo en el lado derecho, entonces el conjunto
de siguientes es el mismo que el de su lado izquierdo.
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 47

Seleccin de una produccin: Es el conjunto de T. que permite identificar cuando se aplic la


produccin, cuando se est haciendo un proceso de reconocimiento.
Normas para clculo de conjuntos de seleccin:
Seleccin de una produccin que comienza por un terminal es el mismo terminal.
Seleccin de una produccin que comienza por (secuencia nula) es el conjunto de siguientes del
smbolo del lado izquierdo
Seleccin de una produccin que comience por un N.T. es el conjunto de primeros de ese N.T.
Gramticas Q: Son gramticas en las cuales el lado derecho de cada produccin comienza con un
T. o es la secuencia nula y producciones cuyo smbolo del lado izquierdo sea el mismo tienen
conjuntos de seleccin disjuntos.
M.P. para reconocimiento descendente: La variacin en la teora del reconocedor para las
transiciones de la gramtica Q es que las producciones con la transicin ser:

5.1.3. Desapile, Retenga


Ejemplo de reconocedor para gramtica Q. Sea la siguiente gramtica:
1.
2.
3.
4.

<S>a<A><S>
<S>b
<A>c<A><S>
<R>

Conjuntos de Seleccin de las producciones de la gramtica:


Seleccin (1)= {a}
Seleccin (2)= {b}
Seleccin (3)= {c}
Seleccin (4)= {a, b}
Definicin del reconocedor:
Smbolos de entrada= {a, b, c, }
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 48

Smbolos en la pila= {<S>, <A>, }


Configuracin inicial de la pila= { <S>}
a
B
<S>
#1
#2
<A>
#4
#4

#3
A

#1: REPLACE (<S><A>), AVANCE


#2: DESAPILE, AVANCE
#3: REPLACE (<S><A>), AVANCE
#4: DESAPILE, RETENGA
GRAMATICAS LL (1): Son gramticas en las cuales el lado derecho de cada produccin puede
comenzar con un terminal, un N.T. , o ser la secuencia nula, y producciones cuyo smbolo del lado
izquierdo sea el mismo tiene conjuntos de seleccin disjuntos.
M.P. para reconocimiento descendente: La variacin en la teora del reconocedor para las
transiciones de la gramtica LL1 es que las producciones que comienzan con un N.T.; la hilera es
todo el lado derecho y la transicin ser:

5.1.3.1 REPLACE ( r ), RETENGA


1. Construya un reconocedor descendente del lenguaje para la siguiente gramtica:
1. <IF><S> (<EXP>)
2. <S>if |while
3. <EXP><EXP1><R>
4. <R><<EXP1>
5. <R>><EXP1>
6. <R>
7. <EXP1><SUM><SUMAR>
8. <SUMAR>+<SUM><SUMAR>
9. <SUMAR>-<SUM><SUMAR>
10. <SUMAR>
11. <SUM><MUL><FACT>
12. <FACT>*<MUL><FACT>
13. <FACT>/<MUL><FACT>
14. <FACT>
15. <MUL><IDEN>
16. <IDEN> (<EXP1>)
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 49

17. <IDEN> I
Conjuntos de seleccin:
Sel(1)=primeros(<S>)= {if |while}
Sel(2)= {if |while}
Sel(3)=primeros(<EXP1>)= {(, I}
Sel(4)={<}
Sel(5)={>}
Sel(6)=siguientes(<R>)= { ) }
Sel(7)=primeros(<SUM>)={(,I}
Sel(8)={+}
Sel(9)={Sel(10)=siguientes(<SUMAR>)= {<,>,)}
Sel(11)=primeros(<MUL>)={(,I}
Sel(12)={*}
Sel(13)={/
Sel(14)={<,>,+,-)
Sel(15)= {(,I}
Sel(16)={(}
Sel(17)={I}
Definicion del reconocedor:
Simbolos de Entrada={if,while,(,),+,<,>,-,*,/,}
Simbolos en la pila={
,<IF>, <S>,<EXP>,<EXP1>,<R>,
<SUM>,<SUMAR>,<MUL>,<FACT>,<IDEN>,(,)}
Configuracin inicial de la pila={ ,<IF>}
Reconocedor descendente para la gramatica:
if

While

<

>

)
(
<IDEN>
<FACT>
<MUL>
<SUMAR>

)
+
Desapile,
avance

Desapile,
avance
#16
#14 #14

#17
#14

#14 #14 #12 #13

#15
#10 #10

#15
#10

#8

#9

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 50

<SUM>
<R>
<EXP1>
<EXP>
<S>
<IF>

#11
#4

#5

#11
#6

#7
#3
#2
#1

#7
#3

#2
#1
A

Definicion de operaciones para las transiciones en el reconocedor descendente:


#1: replace( )<EXP>(<S> ), RETENGA
#2: DESAPILE, AVANCE
#3: REPLACE( <R><EXP1>),RETENGA
#4: REPLACE( <EXP1> ), AVANCE
#5: REPLACE( <EXP1> ), AVANCE
#6: DESAPILE, RETENGA
#7: REPLACE( <SUMAR><SUM>),RETENGA
#8: REPLACE( <SUMAR><SUM>),AVANCE
#9: REPLACE( <SUMAR><SUM>),AVANCE
#10: DESAPILE, RETENGA
#11: REPLACE( <FACT><MUL>),RETENGA
#12: REPLACE( <FACT><MUL>),AVANCE
#13: REPLACE( <FACT><MUL>),AVANCE
#14: DESAPILE, RETENGA
#15: REPLACE( <IDEN> ), RETENGA
#16: REPLACE( )<EXP1>), AVANCE
#17: DESAPILE, AVANCE
Definicin del reconocedor descendente del Lenguaje:
Procesamiento de errores en reconocimiento descendente
1.
2.
3.
4.
5.
6.
7.
8.

<S>I
<S>(<S><R>
<R>,<S><R>
<R>)
SE={I,(, , ,), }
SP={ ,<S>,<R>, }
CIP={ <S>}
Estado nico de reconocimiento.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 51

I
Rd
#1
Rg

<R>
<S>

(
Re
#2
Rh

,
#3
Ra
Ri

)
#4
Rb
Rj

Rf
Rc
A

#1: DESAPILE, AVANCE


#2: REPLACE (<R><S>), AVANCE
#3: REPLACE (<R><S>), AVANCE
#4: DESAPILE, AVANCE
Ra, Rb: Escriba( se esperaba una expresin S y leg, smbolo);
Solucin: Avance
Apile(<R>), retenga
Rc: write (Se esperaba expresin S); exit.
Rd,Re: escriba(falta coma); avance; apile(<S>), retenga
Rf: write(Expresin incompleta); exit
Rg, Rh: write(ms smbolos despus de una expresin S); Avance; apile(<S>), retenga
Ri, Rj: write(massmbolos de una expresin S); Avance, apile(<R>), retenga
Reconocimiento ascendente
1.
2.
3.
4.

<S>(<A><S>)
<S>(b)
<S>(<S>a<A>)
<S>(b)

Existen dos tcnicas: shift-Identify; shift, reduce


Manejador: Es el ltimo smbolo del lado derecho de una produccin.
Cuando se desapila todo un lado derecho de una produccin, apila el lado izquierdo de esa de esa
produccin.
Al final en la pila debe quedar pila vaca y el smbolo inicial de la gramtica.
Smbolos de entrada = {(, a, b,),}
Smbolos en la pila= {<S>, <A>, (, a, b,), }

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 52

Configuracin inicial:
(
<S>
<A>
(
A
B
)

ID1

ID1

SHIFT

IDA
SHIFT

ID1

IDO
R
R
R
R
ID1
R

ID0: IF USEP= <S>then


Acepte
Else
Rechace
Smbolos de entrada: T +
Smbolos en la pila: T + NT +
Configuracin inicial:
Transiciones:
Si en el tope de la pila hay un manejador implica proceso de identificacin. (ID1)
En la columna correspondiente a : si el smbolo en el tope de la pila es el smbolo inicial de la
gramtica implica proceso de identificacin, en las dems filas rechazo (ID0).
Las dems transiciones sern shift (apile y avance).
ID1: if usep= (<A><S>) then
Reduce (1)
Else
If usep= (b) then
Reduce (2)
Else
If usep=(<S>a<A>) then
Reduce (3)
Else
If usep=(a) then
Reduce (4)
Else
Rechace
Reduce(1): DESAPILE(4), APILE(<S>), RETENGA
Reduce(2): DESAPILE(3), APILE(<S>), RETENGA
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 53

Reduce(3): DESAPILE(5), APILE(<A>), RETENGA


Reduce (1): DESAPILE (3), APILE (<A>), RETENGA
Para el shiftidentify no hay producciones con la secuencia nula.
Con el shift reduce evito el proceso de identificacin.
SHIFT REDUCE
Hay que definir smbolos en la pila para definir qu lado derecho de cual produccin se est
construyendo
Smbolo gramatical
<S>

<A>
(
B
A
)

<S>
<S>0
<S>0
<S>1
<S>3
<A>1
<A>3
(
B
A3
A4
)1
)2
)3
)4

Smbolo en la pila
<S>1
<S>3
<S>0
<A>1
<A>3
(
b
A3
A4
)1
)2
)3
)4

<A>

Hilera que representa


(<A><S>
(<S>
(<A>
(<S>a<A>
(
(b
(<S>a
(a
(<A><S>)
(b)
(<S>a<A>)
(a)

Tabla de apilamiento:
(
A
(

)1
A3
<S>1

(
)3

<S>3

<A>1

A4

B
)2

<A>3

(
)4

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 54

En la pila construimos el lado derecho de las producciones.


Cajones en blanco son rechace
La mquina de pila queda como se muestra a continuacin:
(

<S>0
<S>1
<S>3
<A>1
<A>3
(
B
A3
A4
)1
)2
)3
)4

t
f
i
H
S

R
A
R
R
R
R
R
R
R
R

Reduce(1)
Reduce(2)
Reduce(3)
Reduce(4)

Shift: Apile, avance segn la tabla


(((b) a(a)) (b))
En la pila se construye el lado derecho de las producciones
Sea A el tope de la pila y x el smbolo de entrada:
Principio de reduccin
Se utiliza para determinar cules transiciones sern proceso de identificacin. Se har
identificacin cuando se presente una de las dos siguientes situaciones:
1.
Existe una produccin de la forma <L>alfa A y x pertenece a los siguientes (<L>).
2.
A es el smbolo inicial de la gramtica y x es El principio de reduccin se enuncia:
A es reducido por X
PRINCIPIO DE SHIFT: Se utiliza paradeterminar cules transiciones sern shift (aplile, avence). Se
har shift cuando se presente una de las dos siguientes situaciones:

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 55

1.
Existe en el lado derecho de una produccin una hilera de la forma alfa AB y x pertenece a
primeros (B).
2.
A es y x pertenece a primeros (<S>) siendo <S> el smbolo inicial de la gramtica.
El principio de shift se enuncia:
A est debajo de X

5.2. Ejercicios por temas


5.2.1. Ejercicios definicin de gramticas
Construir una gramtica que genere sumas y restas recursivas.
Construir una gramtica que genere secuencias: 0 n 1 m0 m1 n con
m, n>0.
Derivar la siguiente gramtica Para obtenerunacadenaderivadade Ella.
1.
2.
3.
4.
5.
6.
7.
8.

<S><A> b <B>
<S> d
<A><C><A>b
<A><B>
<B> c <S> d
<B>
<C> a
<C>ed
Ejercicio sobre gramticas

Construir una gramtica de traduccin para las siguientes gramticas:


Gramtica 1
1. <S> 1<A> 0
2. <A> 1<A>0
3. <S>
Gramtica 2
En una gramtica que genere W que muestre primero los ceros y despus los unos.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 56

Ejercicios sobre reconocedores:


Construir reconocedores descendentes para las siguientes gramticas y realizar la prueba
respectiva al reconocedor:
1.
A.

Construir un reconocedor para cada una de las siguientes gramticas:


1.
2.
3.
4.
5.
6.
7.
8.

<S><A> b <B>
<S> d
<A><C><A>b
<A><B>
<B> c <S> d
<B> f
<C> a
<C>ed

1.
2.
3.
4.
5.
6.
7.
8.

<S><A> b <B>
<S> d
<A><C><A>b
<A><B>
<B> c <S> d
<B>
<C> a
<C>ed

1.
2.
3.
4.

<S><A>
<S> a
<A>
<A> b <S>c <A>

b.

C.

D.
1.
2.
3.
4.
5.

<S> a <B><S>
<S> b
<B> c<S>
<B>
<B> d <B>a

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 57

E.
1.
2.
3.
4.
5.
6.

<S> b<A><S><B>
<S> d<A>
<A> d<S>ca
<A> e
<B> c <A> a
<B>a

2. Realizar un proceso corto de derivacin y verificar cada uno de los reconocedores que acaban
de construir.
Prueba Final
Escribir gramticas para cada uno de los siguientes enunciados:
1.
2.
3.
4.
5.

Condicional de un lenguaje
Instruccin de asignacin
Instruccin con ciclos
Instruccin con operadores lgicos
Instruccin con operadores relacionales
Derivar cada una de las gramticas para obtener al menos una hilera del lenguaje que
representa.
Construir los reconocedores descendentes para las gramticas y probarlos con las
derivaciones anteriores.

Explicar el proceso del reconocedor ascendente y compararlo con el reconocedor


descendente del lenguaje.
Cul es la importancia de la teora de gramticas y el reconocimiento como parte del
anlisis sintctico en el compilador?

5.3. Actividad

5.3.1. Segunda Prctica de Compiladores (15%)

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 58

Elaborar un programa para un reconocedor ascendente para la siguiente gramtica que


involucra los operadores relacionales (>, <, ==), los operadores aritmticos (+ y *), los signos de
agrupacin (los parntesis) y las palabras claves:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

<EX><PCLAVE>(<S>)
<S><REL><SIGNO>
<SIGNO>= =<REL><SIGNO>
<SIGNO>><REL><SIGNO>
<SIGNO><<REL><SIGNO>
<SIGNO>
<REL><SUMA><SUMP>
<SUMP>+<SUMA><SUMP>
<SUMP>
<SUMA><PROD><MULT>
<MULT>*<PROD><MULT>
<MULT>
<PROD>(<REL>)
<PROD>I
<PCLAVE>IF-WHILE

El programa deber realizarse teniendo en cuenta las siguientes revisiones:


2. Primera revisin: Planteamiento de Solucin analtica derivacin de la gramtica (que
incluya mnimo 8 terminales) y construccin del reconocedor descendente (40%)
3. Segunda revisin: Entrega del practica programada con manuales respectivos
Los programas deben entregarse con manuales respectivos de usuario y tcnico y con la solucin
analtica. Parejas de Estudiantes que no tengan los primeros seguimientos en las fechas dadas se
les califica sobre 3 el trabajo.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 59

6. FASE SNTESIS DEL COMPILADOR


Objetivo General:
Relacionar la escritura de instrucciones de alto nivel con su equivalente en bajo nivel y las
estructuras bsicas de programacin de alto nivel con su cdigo correspondiente en bajo
nivel.
Objetivos especficos:
Relacionar las estructuras bsicas de programacin de alto nivel con su cdigo
correspondiente en bajo nivel.
Prueba Inicial
Qu son instrucciones representadas en Memoria RAM?
Qu es un registro fsico de informacin?
Cmo es en general el lenguaje de mquina?
El cdigo de bajo nivel como se relaciona con el cdigo de alto nivel?
Conoces sobre instrucciones de bajo nivel?
La sntesis del compilador enmarca los procesos que tienen que ver con conversin del cdigo
fuente al lenguaje natural o lenguaje de mquina, para realizar este proceso se deben relacionar
toda la estructura del hardware con las instrucciones de programacin y los recursos de
procesamiento. A continuacin se explica el proceso de forma resumida:
Generacin de Cdigo intermedio
Mantener la semntica del programa.
El programa traducido debe tener alta calidad
Uso efectivo de los recursos
Correr eficientemente = buen cdigo (generar la traduccin ptima es un problema
indecidible)
Producir cdigo correcto
Representacin Intermedia
Tabla de Smbolos
Programa traducido al lenguaje destino
Tres tareas del Generador de Cdigo:
Seleccin de las instrucciones
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 60

Localizacin de Registros y asignacin


Ordenar las instrucciones
Depende de:
Representacin Intermedia
Lenguaje Destino
Run-time system
Conjuntos de instrucciones y arquitecturas de Mquina usuales:
RISC (ReducedInstruction Set)
CISC (ComplexInstruction Set)
Basada en Pila (Stackbased)
Explicacin de las arquitecturas:
RISC (ReducedInstruction Set):
Muchos registros
Instrucciones de 3 direcciones
Modos de direccionamiento simples
Conjunto de instrucciones simple
CISC (ComplexInstruction Set):
Pocos registros
Instrucciones de 2 direcciones
Muchos modos de direccionamiento
Instrucciones de longitud variable
Basado en Pila (Stackbased):
Las operaciones se realizan sobre operandos que estn enel tope de la pila
Requiere muchas operaciones de intercambio y copia(swap, copy)
Ejemplo: JVM (Java Virtual Machine)
3.4.5 Optimizacin de cdigo
Localizacin y asignacin de Registros
Localizacin: que variables se asignan a registros
Asignacin: establecer la relacin variable-registro
La asignacin ptima es un problema NP-Completo.
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 61

Orden de Evaluacin
El orden puede afectar la eficiencia del cdigo
En algn orden se puede requerir menos registros que en otro
Encontrar un orden ptimo es un problema completo
Referencia tomada de:
(Pontificia U. Javeriana Cali - Ingeniera de Sistemas y Computacin Compiladores Prof. Ma.
Constanza Pabn
http://cic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp_sesion26.pdf)
3.4.6Generacin de cdigo de bajo nivel
Conversin de cdigo en macro asamblea arquitectura IA-32
Formato de Instruccin: La arquitectura IA-32 codifica sus instrucciones mquina con un formato
de longitud variable. Toda instruccin tiene una longitud entre 1 y 16 bytes. Las instrucciones
comienzan por un prefijo de hasta cuatro bytes, seguido de uno o dos bytes que codifican la
operacin, un byte de codificacin de acceso a operandos, un byte denominado escala-basendice, un desplazamiento de hasta cuatro bytes, y finalmente un operando inmediato de hasta
cuatro bytes. Excepto los bytes que codifican la operacin, el resto de componentes son todos
opcionales, es decir, su presencia depende del tipo de operacin.
Los prefijos son bytes que modifican la ejecucin normal de una instruccin de acuerdo a unas
propiedades predefinidas. El procesador agrupa
estos prefijos en cuatro categoras y se
pueden incluir hasta un mximo de uno por categora. Por ejemplo, el prefijo LOCK hace que
mientras se ejecuta la instruccin el procesador tiene acceso en exclusiva a cualquier dispositivo
que sea compartido. Este prefijo se utiliza en sistemas en los que se comparte memoria entre
mltiples procesadores.
Las instrucciones del lenguaje mquina de la arquitectura IA-32 pueden tener uno de los tres
siguientes formatos:
Operacin. Las instrucciones con este formato no precisan ningn operando, suelen ser
fijos y por tanto se incluyen de forma implcita. Por ejemplo, la instruccin RET retorna de
una llamada a una subrutina.
Operacin Operando. Estas instrucciones incluyen nicamente un operando. Algunas de
ellas pueden referirse de manera implcita a operandos auxiliares. Un ejemplo de este
formato es la instruccin INC %eax que incrementa en uno el valor de su nico operando.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 62

Operacin Operando1, Operando2. Un ejemplo de este tipo de instrucciones es ADD


$0x10, %eax que toma la constante 0x10 y el contenido del registro %eax, realiza la suma
y deposita el resultado en este mismo registro. Como regla general, cuando una operacin
requiere tres operandos, dos fuentes y un destino (por ejemplo, una suma), el segundo
operando desempea siempre las funciones de fuente y destino y por tanto se pierde su
valor inicial.
Ejemplo:
Push (%ecx)
Push 4(%ecx)
Push $msg
callprintf
add $12, %esp
Pop %edx
Pop %ecx
Pop %eax
Ret
Descripcin de la instruccin de suma de enteros en la arquitectura IA-32
ADDAdd
Opcode Instruction

Description

04 ib

ADD AL,imm8

Addimm8to AL

05 iw

ADD AX,imm16

Addimm16to AX

05 id

ADD EAX,imm32 Addimm32to EAX

80 /0 ib ADD r/m8,imm8 Add imm8 to r/m8


81
iw

/0 ADD
r/m16,imm16

Add imm16 to r/m16

81 /0 id

ADD
r/m32,imm32

Add imm32 to r/m32

83 /0 ib

ADD
r/m16,imm8

Add sign-extended imm8 to


r/m16

83 /0 ib

ADD
r/m32,imm8

Add sign-extended imm8 to


r/m32

00 /r

ADD r/m8,r8

Addr8tor/m8

01 /r

ADD r/m16,r16

Addr16tor/m16

01 /r

ADD r/m32,r32

Addr32tor/m32

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 63

02 /r

ADD r8,r/m8

Addr/m8tor8

03 /r

ADD r16,r/m16

Addr/m16tor16

03 /r

ADD r32,r/m32

Addr/m32tor32

Instrucciones aritmticas:
Instruccin
ADDL
contador

Comentario
$3,

Suma la constante 3 al nmero de 32 bits almacenado a partir de la posicin


contador. El tamao viene determinado por el sufijo, que en este caso es
imprescindible.

SUB
%eax, Deposita en memoria el nmero de 32 bits resultante de la operacin contadorcontador
%eax.
NEGL contador

Cambia de signo el nmero de 32 bits almacenado en memoria a partir de la


posicin contador.

Instruccin

Comentario

MULB $3

Multiplica el nmero natural 3 representado en 8 bits por el registro implcito


%al y deposita el resultado en %eax. El tamao de los operandos lo determina
el sufijo B.

IMUL %eax

Multiplica el nmero entero almacenado en %eax por s mismo (operando


implcito). El resultado se almacena en el registro de 64 bits %edx: %eax.

Multiplica el nmero natural de 32 bits almacenado a partir de la posicin de


MUL contador,
memoria representada por contador por el registro %edi en donde se
%edi
almacenan los 32 bits de menos peso del resultado.
Multiplica el nmero de 32 bits almacenado en memoria a partir de la posicin
IMUL
$123,
contador por la constante $123 y almacena los 32 bits menos significativos del
contador, %ecx
resultado en %ecx.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 64

El programa ensamblador:
En general, a los programas encargados de traducir de un lenguaje de programacin a otro se les
denomina compiladores y todos ellos trabajan de forma similar. Dado un conjunto de ficheros
escritos en un lenguaje, producen como resultado otro fichero que contiene la traduccin a un
segundo lenguaje. En el caso del ensamblador, la traduccin es de lenguaje ensamblador a
lenguaje mquina.
En adelante se utilizarn los trminos compilador y ensamblador de forma indistinta y siempre
en referencia al programa que traduce de lenguaje ensamblador a lenguaje mquina.
As como el lenguaje mquina de un procesador es nico e inmutable (a no ser que se redisee el
procesador), pueden coexistir mltiples lenguajes ensamblador que representen el mismo
lenguaje mquina. La representacin de las instrucciones mediante cadenas alfanumricas es un
convenio utilizado para facilitar su escritura, por lo que pueden existir mltiples convenios de
este tipo siempre y cuando se disponga del ensamblador los que traduzca al lenguaje mquina del
procesador.
El desarrollo de programas en ensamblador requiere un conocimiento en detalle de la
arquitectura del procesador y una meticulosidad extrema a la hora de decidir qu instrucciones y
datos utilizar. Al trabajar con el lenguaje mquina del procesador, la comprobacin de errores de
ejecucin es prcticamente inexistente. Si se ejecuta una instruccin con operandos incorrectos, el
procesador los interpretar tal y como estipula su lenguaje mquina, con lo que es posible que la
ejecucin del programa produzca resultados inesperados.
Traduccin de construcciones de alto nivel a ensamblador
Las construcciones que ofrecen los lenguajes de alto nivel como Java para escribir programas
distan mucho de la funcionalidad ofrecida por el lenguaje mquina del procesador. Por ejemplo,
en Java se permite ejecutar una porcin de cdigo de forma iterativa mediante las construcciones
for o while hasta que una condicin se deje de cumplir. El compilador es el encargado de producir
el cdigo ensamblador tal que su ejecucin sea equivalente a la especificada en el lenguaje Java.
A continuacin se muestra cmo la funcionalidad ofrecida por el procesador es suficiente para
traducir estas construcciones a secuencias de instrucciones ensamblador con idntico significado.
Traduccin de un if/then/else
Estructura de un if/then/else
If (expresin booleana) {
Bloque A
} Else {
Bloque B
}
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 65

Lo ms importante para traducir un bloque a ensamblador es saber su significado o semntica. La


semntica del bloque if/then/else es que se evala la expresin booleana y si el resultado es
verdadero se ejecuta el bloque A de cdigo y se ignora el bloque B, y si es falsa, se ignora el bloque
A y se ejecuta el bloque B.
El elemento clave para traducir esta construccin a ensamblador es la instruccin de salto
condicional. Este tipo de instrucciones permiten saltar a un destino si una condicin es cierta o
seguir la secuencia de ejecucin en caso de que sea falsa. Lo nico que se necesita es traducir la
expresin booleana de alto nivel a una condicin que pueda ser comprobada por una de las
instrucciones de salto condicional ofrecida por el procesador. Supngase que la expresin es falsa
si el resultado de la evaluacin es cero y cierta en caso contrario. Adems, tras ejecutar las
instrucciones de evaluacin, el resultado se almacena en %eax.
Traduccin de un if/then/else a ensamblador
# Evaluar la expresin booleana
# Resultado en %eax
cmp $0, %eax
jebloque b
# Traduccin del bloque A
# Fin del bloque A
jmpfinifthenelse
Bloque b: # Traduccin del bloque B
# Fin del bloque B
finifthenelse:
# Resto del programa
Tras la evaluacin de la condicin, el resultado previamente almacenado en %eax se compara, y si
es igual a cero se ejecuta el salto que evita la ejecucin del bloque A. En el caso de un if/then/else
sin el bloque B, el salto sera a la etiqueta finifthenelse.
Ejemplo:
Cdigo de alto nivel

Cdigo ensamblador

if ((x <= 3) && (i == (j + 1))) {


Bloque A
} else {
Bloque B
}

cmpl $3, x
jgbloqueB
mov j, %eax
inc %eax
cmp %eax, i
jnebloqueB

# Comparar si x <= 3
# Si falso ir a bloque B
# Obtener j + 1
# Comparar i == (j + 1)
# Si falso ir a bloque B

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 66

Cdigo de alto nivel

Cdigo ensamblador
# Traduccin del bloque A
jmpfinifthenelse # Evitar bloque B
bloqueB:
# Traduccin del bloque B
finifthenelse: # Final de traduccin

Estructura de un switch
switch (expresin) {
casevalor A:
Bloque A
Break; // Opcional
Casevalor B:
Bloque B
Break; // Opcional
Default:
Bloque por defecto // Opcional
La semntica de esta construccin establece que primero se evala la condicin y a continuacin
se compara el resultado con los valores de cada bloque precedido por la palabra clave case. Esta
comparacin se realiza en el mismo orden en el que se definen en el cdigo y si alguna de estas
comparaciones es cierta, se pasa a ejecutar el cdigo restante en el bloque (incluyendo el resto de
casos). Si ninguna de las comparaciones es cierta se ejecuta (si est presente) el caso con etiqueta
default. La palabra clave break se puede utilizar para transferir el control a la instruccin que sigue
al bloque switch
La estructura del cdigo ensamblador para implementar esta construccin debe comenzar por el
clculo del valor de la expresin. A continuacin se compara con los valores de los casos siguiendo
el orden en el que aparecen en el cdigo. Si una comparacin tiene xito, se ejecuta el bloque de
cdigo que le sigue. Si se encuentra la orden break se debe saltar al final del bloque. En el caso de
que ninguna comparacin tenga xito, se debe pasar a ejecutar el bloque default. Supngase que
la evaluacin de la expresin es un valor que se almacena en el registro %eax.
Traduccin de un switch a ensamblador
# Evaluar la expresin
# Resultado en %eax
mp $valorA, %eax
# Caso A
Je bloquea
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 67

cmp $valorB, %eax


# Caso B
jebloque b
Jmp default
Bloquea:
# Traduccin del bloque A
jmpfinswitch # Si bloque A tiene break
Bloque b:
jmpfinswitch # Si bloque B tiene brea
Default:
# Caso por defecto
finswitch:
# Resto del programa
Traduccin de un switch a ensamblador
Cdigo de alto nivel Cdigo ensamblador
switch (x + i + 3 + j) {
case 12:
Bloque A
break;
case 14:
case 16:
Bloque B
case 18:
Bloque C
break;
default:
Bloque D
}

mov x, %eax # Evaluar la expresin


add i, %eax
add $3, %eax
add j, %eax
cmp $12, %eax # Caso 12
je bloquea
cmp $14, %eax # Caso 14
je bloque b
cmp $16, %eax # Caso 16
je bloque b
cmp $18, %eax # Caso 18
je bloquec
jmp default
bloquea:
# Traduccin del bloque A#
jmpfinswitch # Bloque A tiene break
bloque b:
# Traduccin del bloque
bloquec:

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 68

Cdigo de alto nivel Cdigo ensamblador


# Traduccin del bloque C
jmpfinswitch # Bloque C tiene break
default:
# Bloque D
finswitch:
# Resto del programa
Estructura de un bucle while
While (expresin booleana) {
Cdigo interno}

En este bloque es importante tener en cuenta que la expresin booleana se evala al menos una
vez y se contina evaluando hasta que sea falsa. Supngase que la evaluacin de la expresin es
cero en caso de ser falsa y diferente de cero si es cierta y el valor resultante se almacena en
%eax.
Traduccin de un bucle while a ensamblador
eval: # Evaluar la expresin booleana
# Resultado en %eax
cmp $0, %eax
jefinwhile
# Traduccin del cdigo interno
Jmpeval
finwhile:
# Resto del programa
Tras evaluar la condicin se ejecuta una instruccin que salta al final del bloque si es falsa. En caso
de ser cierta se ejecuta el bloque de cdigo y tras l un salto incondicional a la primera instruccin
con la que comenz la evaluacin de la condicin. El destino de este salto no puede ser la
instruccin de comparacin porque es muy posible que las variables que intervienen en la
condicin hayan sido modificadas por lo que la evaluacin se debe hacer a partir de estos valores.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 69

Ejemplo Traduccin de un bucle while a ensamblador


Cdigo de alto nivel

Cdigo ensamblador

while ((x == i) || (y < x)) {


Cdigo interno
}

eval: # Comienza evaluacin


mov x, %eax
cmp i, %eax # Comparar si x == i
je codigointerno # Si cierto ejecutar cdigo
cmp y, %eax
jlefinwhile # Si falso ir al final
codigointerno:
# Cdigo interno
jmpeval # Evaluar de nuevo
finwhile: # Final de traduccin

Ultimo capitulo extrado de:


(http://ocw.uc3m.es/ingenieria-telematica/arquitectura-de-ordenadores/lecturas/html/sub.html,
Captulos 4, 5, 6, 7,8)

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 70

7. PISTAS DE APRENDIZAJE
Tener en cuenta: El estudio de los principales operadores y registros de bajo nivel para la
conversin de cdigo.
Tener en cuenta: La relacin entre el analizador lxico y el sintctico a la hora de realizar la
prctica de revisin de lneas.
Tener en cuenta: La definicin de estados en la mquina de estado finito para dar una solucin
conveniente a los problemas del analizador lxico.
Tener en cuenta: Que en las matrices de la mquina de pila se deben colocar claramente al final
de la fila en los estados cuales de esto son de aceptacin.
Tenga presente: que en una mquina de pila solo se acepta en el ltimo estado.
Tenga presente: que los reconocedores de pila siempre son de un solo estado y comienzan en la
pila con el smbolo inicial de la gramtica
Traiga a la memoria: que en el clculo de siguientes de un smbolo, se analiza su aparicin en el
lado derecho de todas las producciones.
Traiga a la memoria: que para construir reconocedores descendentes se deben hallar los
conjuntos de seleccin de las producciones de la gramtica.
Tener en cuenta: que para convertir cdigo debe saber la relacin entre las estructuras de
programacin de alto nivel y las de bajo nivel.
Traiga a la memoria: que una expresin regular es una representacin simblica de operadores y
operaciones que representa a un lenguaje regular.

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 71

8. GLOSARIO
Ascendente: Reconocimiento de gramticas que se hace de derecha a izquierda en la produccin.
Autmatas: Teora aplicada en la solucin de problemas del analizador lxico
Concatenacin: Operacin de las expresiones regulares que pega el primer conjunto al segundo
Descendente: Reconocimiento de gramticas que se hace de izquierda a derecha en una
produccin.
Ensamblador: Lenguaje que se encuentra al nivel de la mquina en el compilador y tiene su propio
cdigo de instruccin.
Gramticas: Conjunto de normas del lenguaje que permiten su generacin.
Identify: Principio de identificacin de smbolos en un reconocedor ascendente.
Lexemas: Componente generada por el analizador lxico que hace parte de la revisin por
caracteres.
Produccin: Es una norma escrita para una gramtica que combina terminales y no terminales con
el smbolo se define.
Replace: Operacin sobre la pila que permite reemplazar el tope por una cadena dada
Reduce: principio de reduccin usado por el reconocimiento Ascendente
Seleccin: Conjuntos usados por la teora de reconocimiento para saber dnde se aplica una
produccin.
Semntico: Parte del anlisis del compilador que determina si las componentes estn siendo bien
usadas o no dentro del cdigo de alto nivel.
Sintctico: Parte del anlisis del compilador que se encarga de revisar si las lneas estn bien
escritas
Token: Son las partes de los grandes grupos de componentes principales de los lenguajes de
programacin (ejemplo: variables, constantes y palabras claves).
Palote: Operacin de una expresin regular que representa la unin.
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 72

9. FUENTES
Fuentes Bibliogrficas
Lemote Karen A.(1996) Fundamentos de CompiladoresCECSA
Aho, A. Sethi, Ullman J (1990) Compiladores principios, tcnicas y herramientas , Addisonwesley
Grune Dick y otros (2000), Modern CompilerDesingWiley
Rosenkrantzstearns Lewis Compiler Desing Theory
Allen Holub ompilerDesig in Compiler
G. Snchez Dueas Compiladores e interpretes

J.A. Valverde Andrew, Un enfoque pragmtico


Fuentes Digitales o Electrnicas
http://www.todoprogramacion.com.ar/archives/2005/04/interpretes_y_c.html
http://www.slideshare.net/josehaar4920/compiladores-presentation
http://es.wikipedia.org/wiki/Compilador
http://www.infor.uva.es/~mluisa/talf/docs/aula/A7.pdf
http://faustol.wordpress.com/2007/04/10/fases-de-un-compilador/
http://www.slideshare.net/FARIDROJAS/compilador-presentation
http://www.angelfire.com/linux/eotto/comp_clase1.pdf
http://nereida.deioc.ull.es/~pl/perlexamples/node71.html
http://www.hardwarecult.com/foro/index.php?topic=2070.msg27800
http://www.slideshare.net/leopoldocapa/anlisis-lxico-presentation
Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia

Corporacin Universitaria Remington Direccin Pedaggica


Compiladores Pg. 73

http://www.angelfire.com/linux/eotto/comp_clase2.pdf
http://148.202.148.5/cursos/cc209/teoriacomp/MODULO_2/Teoria_2_2.htm
http://search.conduit.com/Results.aspx?q=expresiones+regulares+compiladores&ctid=CT
1854633&octid=CT2431232&SearchSource=1
http://www.scribd.com/doc/30646172/Expresiones-Regulares
http://www.lpsi.eui.upm.es/webtalf/Analisis%20sintactico.pdf
http://ocw.uc3m.es/ingenieria-telematica/arquitectura-deordenadores/lecturas/html/isasubset.html
http://www.dea.icai.upcomillas.es/daniel/asignaturas/EstComp_2_IINF/TranspEstComp_2
_IINF/Cap4ModDir.pdf
http://www.scribd.com/doc/30646172/Expresiones-Regulares

Corporacin Universitaria Remington - Calle 51 51-27 Conmutador 5111000 Ext. 2701 Fax: 5137892. Edificio Remington
Pgina Web: www.remington.edu.co - Medelln - Colombia