Sunteți pe pagina 1din 14

Compiladores.

Gua 1

Facultad:
Ingeniera
Escuela:
Computacin
Asignatura: Compiladores

Tema:
Introduccin
Lenguaje Micro C

Compiladores

al

Contenido
En esta gua se presenta una breve introduccin a los
conceptos bsicos que se utilizan en el mbito de los
compiladores y se familiarizara al alumno con los
lenguajes que se utilizaran en el curso.

Objetivos Especficos

Entender los conceptos bsicos de compiladores


Conocer los lenguajes que se utilizaran en las siguientes
prcticas

Material y Equipo

Gua No 1

Introduccin Terica
Lenguajes de Programacin
La
programacin
de
computadoras
se
realiza
en
los
llamados
lenguajes
de programacin,
stos
posibilitan
la
comunicacin
entre
el
programador
y
la computadora,
a
travs
de
un
conjunto
de
instrucciones u rdenes especificadas por el lenguaje.
Un lenguaje de programacin puede definirse como una
notacin formal para describir algoritmos o funciones que
sern ejecutados por el ordenador
Segn su grado de independencia de la maquina, los lenguajes
de programacin se clasifican en:
Lenguaje maquina: Es la notacin que entiende directamente
el ordenador, por eso sus instrucciones estn escritas con
cdigo binario. El repertorio de sus instrucciones, as

Compiladores. Gua 1

como la estructura de estas, estn ligadas directamente a


la arquitectura de la maquina.
Lenguaje
ensamblador:
es
esencialmente
una
versin
simblica de un lenguaje maquina. Cada cdigo de operacin
se indica por un cdigo simblico. Por ejemplo ADD para
adicin y MUL para multiplicacin.
Lenguajes
de
nivel
medio:
tienen
algunas
de
las
caractersticas de los lenguajes de bajo nivel (por
ejemplo acceso directo a posiciones de memoria), aadidas
a posibilidades de manejo de estructuras de control y de
datos de lenguajes de alto nivel.
Lenguajes de alto nivel: facilitan la escritura de
programas
con
estructuras
de
datos
complejas,
la
utilizacin de bloques, y procedimientos o subrutinas.
Dentro de estos lenguajes destacan un tipo de lenguajes,
denominados lenguajes orientados a objetos, que permiten
definir tipos abstractos de datos.
Lenguajes de orientados a problemas concretos: se utilizan
para la resolucin de problemas en un campo especfico.

Procesadores de lenguaje
Procesadores de lenguajes es el nombre genrico que reciben
todas las aplicaciones informticas en las cuales uno de los
datos fundamentales de entrada es un lenguaje. La definicin
anterior afecta una gran variedad de herramientas software,
entre las cuales tenemos:
Traductores: Es un programa que procesa un texto fuente y
genera un texto objeto
Ensamblador: Si el lenguaje fuente es el lenguaje
ensamblador y el lenguaje objeto es el lenguaje maquina,
entonces al traductor se le llama ensamblador.
Compiladores: Un traductor que transforma texto fuente de
lenguajes de alto nivel a lenguajes de bajo nivel se le
denomina compilador.
Intrprete: Son programas que simplemente ejecutan las
instrucciones que se encuentran en el texto fuente.
Traductores
Como ya se menciono, un traductor es un programa que procesa
un texto fuente y genera un texto objeto. El traductor est
escrito en lenguaje de implementacin (LI) o tambin
denominado lenguaje host. El texto fuente est escrito en
lenguaje fuente (LF), por ejemplo un lenguaje de alto nivel.
El texto objeto est escrito en lenguaje objeto (LO), por

Compiladores. Gua 1 3

ejemplo un lenguaje de mquina, ensamblador u otro lenguaje


de alto nivel. Se suele utilizar la notacin T, la cual se
muestra en la siguiente figura

LF

LO
LI

La notacin T tambin se puede representar de forma abreviada


como: LFLILO.
Estructura general de un traductor
Todas las fases de un traductor se pueden agrupar en dos
reas: el anlisis del programa fuente y su sntesis en el
correspondiente programa objeto.
El anlisis consiste en verificar la correccin del programa
fuente, para lo cual se descompone el programa fuente en
trozos elementales o unidades mnimas sintcticas denominadas
componentes lxicos o tokens. Los tokens se pueden agrupar
para comprobar su disposicin correcta en las distintas
construcciones y sentencias del lenguaje a analizar (anlisis
sintctico y semntico). Comprobndose de esta forma la
validez sintctica y semntica del programa fuente. En caso
contrario se emiten los errores oportunos (manejo de
errores). La informacin tambin se utiliza durante la fase
de anlisis (por ejemplo ara comprobar si una variable se
intent declarar dos veces).
La tarea de sntesis tiene por objeto la generacin del
cdigo del lenguaje objeto. En el caso particular de los
compiladores suele incluirse tambin la generacin de cdigo
intermedio,
como
un
medio
para
garantizar
la
transportabilidad entre distintas maquina objeto o como
mtodo
para
poder
utiliza
el
mismo
back-end,
entre
compiladores de lenguajes diferentes.
La generacin de cdigo intermedia se apoya directamente en
la informacin recogida en la tabla de smbolos durante la
fase de anlisis. La generacin de cogi para la mquina
objeto definitiva tan solo se apoya en el cdigo intermedio.
Tambin es necesario un tratamiento de errores para la fase
de sntesis.
La siguiente figura muestra las fases de un traductor

Compiladores. Gua 1

Procedimiento
MUSIM/0
Los componentes lxicos o tokens que conforman el lenguaje
son los siguientes:
Identificadores, que solo son nombres de variables y estn
compuestos por una nica letra minscula de rango a-z.
Constantes numricas de un solo digito, de rango 0-9.
Operadores: +,-,*,/, y %.

Compiladores. Gua 1 5

Smbolo de asignacin: = (igual).


Parntesis: ( y ).
Separador de sentencias: ; (punto y coma).
Indicadores de principio y fin de bloque: { y }.
Palabras reservadas que estn formadas por una letra
mayscula. Tan solo son tres: R (lectura), W(escritura) y
M(programa principal).

Puede observarse que este lenguaje solo permite tres tipos de


sentencias: lectura, asignacin y escritura. Tiene un solo
tipo de datos: entero. Las variables estn formadas por una
nica letra minscula, y las constantes son de un dgito.
Tiene
cinco
operadores
+(adicin),
-(diferencia),
*(producto), /(divisin entera), y %(modulo). Se permite el
uso de parntesis.
Ejemplo 1:
M
{
R
R
c
W
}

a;
b;
= a + b;
c;

Analicemos lo que hace este programa.


R a y R b indica que le leen las variables a y b.
c = a + b indica que en la variable c se asignara el
resultado de la suma de a y b.
W c indica que se escribir la variable c.
En pocas palabras, este programa leer dos variables, las
sumara y finalmente mostrar el resultado en pantalla.
Ejercicio 1
M
{
R a; R b; R c;
p = (a + b + c)/3;
W p;
}
Describa lo que hace el programa anterior segn las
definiciones del lenguaje:
_____________________________________________________________
_____________________________________________________________

Compiladores. Gua 1

_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
Ejercicio 2
M
{
R a;
R b;
r = (a * a) + (b * b);
W r;
}
Describa lo que hace el programa anterior:
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
Ejercicio 3
Escriba un programa en MUSIM/0 que lea un nmero, calcule y
muestre en pantalla cuanto es ese nmero elevado al cubo.
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
Ejercicio 4
Escriba un programa en MUSIM/0 que lea 5 nmeros, calcule y
muestre en pantalla: la sumatoria, promedio y multiplicatoria
de los 5 nmeros.
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________

Compiladores. Gua 1 7

Ejercicio 5
Escriba un programa en MUSIM/0 que lea un nmero y determine
si este es par o impar. Si es par deber mostrar 0 en
pantalla, mientras que si es impar deber mostrar 1
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
ENSAMPOCO/0
Como lenguaje objeto se utiliza un lenguaje intermedio que es
un pequeo ensamblador, que se denomina ENSAMPOCO/0. Este
ensamblador trabaja sobre una maquina abstracta, en este caso
particular es una mquina de pila. La maquina tendr una
memoria de 26 celdas cuyas direcciones se nombrarn con las
letras de la a a la z, y una pila LIFO donde se
realizarn las operaciones aritmticas.
A continuacin se describe
distintas instrucciones.
Instruccin
.CODE
PUSHC
PUSHA

LOAD

STORE

la

forma

de

trabajo

de

las

Descripcin
Indica el comienzo del cdigo
Coloca una constante en la pila. El operando
es una constante
Coloca en la pila la direccin de una
variable. El operando es una variable, dado
que las direcciones se denominan con el
nombre de las variables
Asume que el ltimo valor insertado en la
pila es una direccin. Esta direccin es
extrada de la pila y en su lugar se pone el
valor ubicado en dicha direccin. No tiene
operando
Usa los dos ltimos elementos de la pila. Uno
es la direccin de una celda y memoria y el
otro el valor a almacenar en dicha celda. El
ltimo elemento de la pila es el valor y el
otro la direccin. Despus de ejecutada la
instruccin, los dos elementos implicados son

Compiladores. Gua 1

NEG
ADD

MUL

DIV

MOD

INPUT

OUTPUT
END

extrados de la pila, dejndolos en el mismo


lugar. No tiene operando.
Cambia el signo del ltimo valor introducido
en la pila, dejndolo en el mismo lugar. No
tiene operando
Opera
con
los
dos
ltimos
elementos
introducidos en la pila, extrayndolos y
dejando en su lugar el resultado. Por lo
tanto
la
pila
habr
disminuido
en
un
elemento. No tiene operando.
Opera
con
los
dos
ltimos
elementos
introducidos en la pila, extrayndolos y
dejando en su lugar el producto. Por tanto la
pila habr disminuido en un elemento. No
tiene operando.
Opera
con
los
dos
ltimos
elementos
introducidos en la pila, extrayndolos y
dejando en su lugar el producto. Por lo tanto
la pila habr disminuido en un elemento. No
tiene operando.
Opera
con
los
dos
ltimos
elementos
introducidos en la pila, extrayendo primero
el denominador y despus el numerador y
dejando en su lugar el modulo. Por tanto, la
pila habr disminuido en un elemento. No
tiene operando.
Toma el valor del buffer de entrada, en este
caso el teclado, y lo coloca en la direccin
asignada a la variable. La pila no sufre
cambios.
Toma el valor de la direccin indicada y lo
lleva al buffer de salida, en este caso la
pantalla. La pila no sufre cambios.
Indica el fin de programa.

Ejemplo 3
A continuacin se muestran un programa fuente en MUSIM/0, y
su traduccin al cdigo intermedio ENSAMPOCO/0
Cdigo en MUSIM/0
M
{
R a;
R b;
z = a + b;
W z;
}

Compiladores. Gua 1 9

Traduccion a ENSAMPOCO/0
.CODE
INPUT a
INPUT b
PUSHA z
PUSHA a
LOAD
PUSHA b
LOAD
ADD
STORE
OUTPUT z
END
Ejercicio 6
Traducir el siguiente cdigo en MUSIM/0 A ENSAMPOCO/0
M
{
R a;
R b;
z = a + b - 2;
W z;
}
Traduccin a ENSAMPOCO/0
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________

10 Compiladores. Gua 1

Ejercicio 7
Traducir el siguiente cdigo en MUSIM/0 a ENSAMPOCO/0
M{ R a; R b; R c;
q = (a * a) + (b * b) + (c * c);
W q; }
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________

Compiladores. Gua 1 11

Lenguaje Micro C o C-:


El lenguaje Micro C es un subconjunto pequeo del lenguaje de
programacin C. Como referencia utilice el Apndice A
Proyecto
de
Compilador
del
libro
Construccin
de
Compiladores de Kenneth C. Louden, el cual define al lenguaje
de programacin denominado C Minus o C-.
Micro-C es un lenguaje case sensitive, es decir que el
compilador de este lenguaje trata a las letras maysculas y
minsculas como caracteres diferentes.
Los comentarios y caracteres ignorados.
Los comentarios son secuencias de carcter incluido dentro de
par de secuencias de /**/ pareados. Los comentarios pueden
extender sobre varias lneas, pero los comentarios anidados
no se reconocen, es decir que el primer encontrado */ dentro
de un comentario lo cierra. Otros
caracteres
ignorados
incluyen el newline, la tabulacin horizontal, el CR,
y el espacio blanco.
Tokens
Las secuencias de caracteres encerrados dentro de dos
apstrofes (') son smbolos
terminales.
Cualquier
otra
secuencia de caracteres denota el nombre de una clase lxica,
por ejemplo:
En secciones posteriores
lxicas siguientes:

utilizaremos

las

definiciones

letra = ' _ ' | ' a ' | ' b ' |... | ' z ' | ' A ' | ' B '
|... | ' Z '
dgito = ' 0 ' | ' 1 ' |... | ' 9 '
Observe que el carcter underscore (_) es tratando como una
letra.
Identificadores:
Un identificador es una secuencia finita de letras y de
dgitos que comienzan con una letra. Los identificadores
pueden
ser
de
cualquier
longitud,
sin
embargo,
los

12 Compiladores. Gua 1

identificadores sin diferencia en sus primeros 8 caracteres


correspondientes se consideran iguales.
Identificador = (letra) (letra | dgito) *.

Constantes numricas.
Un integer_constant es una secuencia de dgitos
comenzar con un 0, a menos que sea el nmero 0).

(no debe

integer_constant = digit+
Una constante numrica se debe separar de un identificador o
de una palabra clave.
Constantes de carcter.
Un chat_constant se define como una comilla simple de
apertura (), un carcter ASCII extendido imprimible y una
comilla simple de cierre.
Strings Constantes.
Una constante de string es una secuencia de los caracteres
incluidos dentro de dos comillas dobles ("). Una constante de
string puede incluir la secuencia \ que representa un
carcter de
comillas doble en la secuencia en la cual
ocurre, tal que no termina el string. La secuencia \n
representa el carcter del NEWLINE, mientras que la secuencia
\ \ representa el carcter del backslash y se puede
incluir en un string tambin. Una secuencia consistente
de un backslash seguido por cualquier carcter a excepcin de
'n', '\ ', o ' " ' es ilegal. Por consiguiente, un string
constante no debe extenderse ms all del extremo
de la
lnea. Un par de /**/ dentro de un string constante no se
trata como comentario.
Operadores

add_op = ' + ' | ' - '


mul_op = ' * ' | '/'
eq_op = ' = = ' | '! = '
rel_op = ' < ' | ' < = ' | ' > = ' | ' > '

Compiladores. Gua 1 13

Investigacin complementaria.
1) Investigar que es lxico y en qu consiste el anlisis
lxico de un traductor.
2) Investigar que es MICRO C, cules son sus definiciones
lxicas (Identificadores, constantes numricas, constantes
de carcter, operadores, otros smbolos, entre otros).
3) Escribir un programa fuente en MICRO C que lea una
temperatura en grados Celsius, lo convierta a temperatura
absoluta y este resultado lo muestre en pantalla.
4) Escribir un programa en MICRO C que calcule el factorial
de un nmero.
5) Investigar con el tutorial de Jflap como implementar
Autmatas Finitos Deterministas (AFD).

14 Compiladores. Gua 1

Hoja de cotejo:

Gua 1: Introduccin a Compiladores


y al Lenguaje Micro C
Alumno:

Mquina No:

Docente:

GL:

1
1

Fecha:

EVALUACION
%
CONOCIMIENTO

Del 20
al 30%

APLICACIN
DEL
CONOCIMIENTO

Del 40%
al 60%

1-4

5-7

8-10

Conocimie
nto
deficient
e de los
fundament
os
tericos

Conocimiento
y explicacin
incompleta de
los
fundamentos
tericos

Conocimiento
completo y
explicacin
clara de los
fundamentos
tericos

No tiene
actitud
proactiva
.

Actitud
propositiva y
con
propuestas no
aplicables al
contenido de
la gua.

Tiene actitud
proactiva y sus
propuestas son
concretas.

ACTITUD
Del 15%
al 30%

TOTAL

100%

Nota

S-ar putea să vă placă și