Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Programacion de Sistemas
Manual Programacion de Sistemas
Manual Programacion de Sistemas
UNIDAD 1............................................................................................................. 5
Introduccin a la programacin de sistemas...............................................................5
1.1
1.2
1.3
Lenguajes................................................................................................. 8
1.3.1
Lenguajes naturales.............................................................................8
1.3.2
Lenguajes artificiales............................................................................9
1.3.3
Proceso de la comunicacin..................................................................9
1.4
Traductor y su estructura..........................................................................11
1.4.1
Ensambladores................................................................................. 11
1.4.2
Compiladores................................................................................... 12
1.4.3
Interpretes........................................................................................ 14
1.5
UNIDAD 2........................................................................................................... 16
Introduccin al diseo de los lenguajes de programacin...........................................16
2.1
2.2
Consideraciones Preliminares...................................................................18
2.3
2.4
Diseo detallado...................................................................................... 20
2.5
Caso de estudio...................................................................................... 20
UNIDAD 3........................................................................................................... 21
Anlisis Lxico..................................................................................................... 21
3.1
3.2
Analizador de lxico................................................................................. 21
3.3
3.4
3.5
3.6
UNIDAD 4........................................................................................................... 25
Anlisis sintctico................................................................................................. 25
4.1
4.2
Diagramas de sintaxis.............................................................................. 26
4.3
Precedencia de operadores.......................................................................26
4.4
Analizador sintctico................................................................................ 26
4.4.1
4.4.2
4.5
4.6
4.7
UNIDAD 5........................................................................................................... 26
Anlisis semntico................................................................................................ 26
5.1
Analizador semntico............................................................................... 26
5.2
5.3
Conversin de tipos................................................................................. 26
5.4
5.5
5.6
5.7
UNIDAD 6........................................................................................................... 26
Generacin de cdigo intermedio........................................................................... 26
6.1
Lenguajes intermedios.............................................................................. 27
6.2
Notaciones............................................................................................. 27
6.2.1
Infija................................................................................................ 27
6.2.2
Postfija............................................................................................. 27
6.2.3
Prefija.............................................................................................. 27
6.3
6.3.1
Notacin Polaca................................................................................ 27
6.3.2
Codigo P.......................................................................................... 27
6.3.3
Triplos.............................................................................................. 27
6.3.4
Cudruplos....................................................................................... 27
6.4
Esquemas de generacin..........................................................................27
6.4.1
Expresiones...................................................................................... 27
6.4.2
6.4.3
Estatuto de asignacin.......................................................................27
6.4.4
Estatuto condicional...........................................................................27
6.4.5
Estatuto de ciclos.............................................................................. 27
6.4.6
Arreglos........................................................................................... 27
6.4.7
Funciones........................................................................................ 27
UNIDAD 7........................................................................................................... 27
Optimizacin........................................................................................................ 27
7.1
Tipos de optimizacin............................................................................... 27
7.1.1
Locales............................................................................................ 27
7.1.2
Bucles............................................................................................. 27
7.1.3
Globales.......................................................................................... 27
7.1.4
De mirilla.......................................................................................... 27
7.2
Costos................................................................................................... 27
7.2.1
Costo de ejecucin............................................................................27
7.2.2
7.2.3
UNIDAD 8........................................................................................................... 28
Generacin de cdigo objeto.................................................................................. 28
8.1
Lenguaje mquina................................................................................... 28
8.1.1
Caractersticas.................................................................................. 28
8.1.2
Direccionamiento............................................................................... 28
8.2
Lenguaje ensamblador............................................................................. 28
8.2.1
Caractersticas.................................................................................. 28
8.2.2
Almacenamiento............................................................................... 28
8.3
Registros................................................................................................ 28
8.3.1
Distribucin...................................................................................... 28
8.3.2
Asignacin........................................................................................ 28
8.4
Administracin de memoria.......................................................................28
UNIDAD 1
Introduccin a la programacin de sistemas
1.1 Qu es y qu estudia la programacin de sistemas?
QU ES?
Un sistema es un conjunto de componentes que interaccionan entre si para
lograr un objetivo comn. Las personas se comunican con el lenguaje, que es un
sistema muy desarrollado formado por palabras y smbolos que tienen significado
para el que habla y para quienes lo escuchan, lo mismo es para las computadoras
las cuales tienen sistemas y se comunican por medio de computadoras.
La programacin es el proceso de convertir las especificaciones a grandes
rasgos de los sistemas en instrucciones de maquina que produzcan los resultados
deseados.
QU ESTUDIA?
El trabajo de un programador de sistemas es seleccionar, modificar y mantener
el complejo software del sistema operativo. Por lo tanto, los programadores de
sistemas desempean una funcin de apoyo al mantener el ambiente del software
del sistema operativo en el que trabajan los programadores de aplicaciones y los
operadores de las computadoras. Tambin participan en las decisiones relativas a
reducciones o ampliaciones de hardware y/o software. Programacin de Sistemas
Conceptos y Aplicaciones Se entiende por programacin de sistemas el conjunto
de programas necesario para que una computadora de una imagen coherente y
monoltica ante sus usuarios. Es un rea especializada dentro de las ciencias de la
computacin. As, mediante la programacin de sistemas, no solo se manejan las
computadoras por medio del lenguaje maquina (0 y 1) sino por otros sistemas
operativos, sin lo cual sera muy difcil la interaccin con la maquina.
En esta rea se estudia la teora de mquinas y su aplicacin en el diseo de
sistemas digitales y de arquitectura de computadoras. reas especficas: Sistemas
digitales para arquitecturas paralelas y control de procesos y sistemas
reconfigurables.
Inteligencia artificial aplicada a trabajo cooperativo En las aplicaciones
cooperativas realizadas en el entorno Web, es viable hacer uso de las
herramientas de inteligencia artificial. Se estn diseando y construyendo
herramientas para elaborar un sistema sin costura que opere en Web con la
finalidad de proporcionar a un grupo de coautores el soporte necesario para
producir conjunta y simultneamente un mismo documento.
1.3 Lenguajes.
Se llama lenguaje a cualquier tipo de cdigo semitico estructurado, para el
que existe un contexto de uso y ciertos principios combinatorios formales. Existen
muchos contextos tanto naturales como artificiales donde aparecen lenguajes.
El lenguaje humano se basa en la capacidad de los seres humanos para
comunicarse mediante de signos. Principalmente lo hacemos utilizando el signo
lingstico. An as, hay diversos tipos de lenguaje. El lenguaje humano puede
estudiarse en cuanto a su desarrollo desde dos puntos de vista complementarios:
la ontogenia, que remite al proceso de adquisicin del lenguaje por el ser humano,
y la filogenia El lenguaje animal se basa en el uso de seales sonoras, visuales y
olfativas a modo de signos para referirse a un referente o un significado diferente
de dichas seales. Dentro del lenguaje animal estn los gritos de alarma, el
lenguaje de las abejas, etc. Los lenguajes formales son construcciones artificiales
humanas, que se usan en matemtica y otras disciplinas formales, incluyendo
lenguajes de programacin. Estas construcciones tienen estructuras internas que
comparten con el lenguaje humano natural, por lo que pueden ser en parte
analizados con los mismos conceptos que ste.
1.3.1
Lenguajes naturales.
Este tipo de lenguaje es el que nos permite el designar las cosas actuales y
razonar a cerca de ellas, fue desarrollado y organizado a partir de la experiencia
humana y puede ser utilizado para analizar situaciones altamente complejas y
razonar muy sutilmente. La riqueza de sus componentes semnticos da a los
lenguajes naturales su gran poder expresivo y su valor como una herramienta para
razonamiento sutil. Por otro lado la sintaxis de un LN puede ser modelada
fcilmente por un lenguaje formal, similar a los utilizados en las matemticas y la
lgica. Otra propiedad de los lenguajes naturales es la polisemntica, es decir la
posibilidad de que una palabra en una oracin tenga diversos significados.
En un primer resumen, los lenguajes naturales se caracterizan por las
siguientes propiedades:
Desarrollados por enriquecimiento progresivo antes de cualquier intento de
formacin de una teora.
La importancia de su carcter expresivo debido grandemente a la riqueza del
componente semntico (polisemntica).
Dificultad o imposibilidad de una formalizacin completa.
Partes de un compilador:
1.4.3 Interpretes.
UNIDAD 2
Introduccin al diseo de los lenguajes de programacin
2.1 Visin del problema.
mes luego habr de asentarse todava los puntos secundarios del diseo del
idioma y la implementacin no habr obtenido casi en ningn lugar.
2.2 Consideraciones Preliminares.
Debemos tomar en cuenta las palabras reservadas del lenguaje, los
operadores, los tipos de datos.
Debemos considerar el objetivo del lenguaje, si es un lenguaje de enseanza,
si es un lenguaje para profesionales, si el cdigo desarrollado va a ser mejor.
Los factores fundamentales en la calidad del software son:
La eficiencia: capacidad para el aprovechamiento ptimo de los recursos que
emplea.
La portabilidad: facilidad para ser ejecutados en distintos entornos lgicos o
fsicos.
La verificabilidad: capacidad para soportar procedimientos de pruebas, test o
ensayos.
La integridad: nivel de proteccin frente a procesos que traten de alterarlo.
La facilidad de uso: comodidad y claridad en la interaccin con el usuario.
La exactitud: nivel de precisin que alcanzan los resultados obtenidos.
La robustez: capacidad para funcionar correctamente en situaciones extremas.
La extensibilidad: capacidad para adaptar su funcionamiento al incremento en
sus objetivos.
La compatibilidad: facilidad de poder ser aplicados en conjuncin con otros
programas.
La reutilizacin: posibilidad de utilizarlos (total o parcialmente) en nuevos
contextos.
Autmata:
Un autmata finito o mquina de estado finito es un modelo matemtico de un
sistema que recibe una cadena constituida por smbolos de un alfabeto y
determina si esa cadena pertenece al lenguaje que el autmata reconoce.
Definicin formal
Formalmente, un autmata finito (AF) puede ser descrito como una 5-tupla
(S,,T,s,A) donde:
* S un conjunto de estados;
* es un alfabeto;
* T es la funcin de transicin:
* s es el estado inicial;
* A es un conjunto de estados de aceptacin o finales.
3.2 Analizador de lxico.
El analizador lxico es la primera fase de un compilador, lee caracteres de
entrada para formar componentes e identificarlos o clasificarlos y pasar la
informacin de los componentes al analizador sintctico.
Realiza adems funciones como eliminar espacios en blanco, saltos de lnea,
tabuladores, ignorar comentarios, deteccin y recuperacin de errores. Los errores
que un analizador lxico reconoce son smbolos no vlidos o no reconocidos por el
lxico del lenguaje o que no forman parte de ningn componente lxico.
Existen diversos mtodos para construir una analizador lxico, un mtodo es
usar un AFD para describir el patrn de cada componente. Para este mtodo se
parte de una tabla descriptiva de los componentes lxicos que reconocer el
analizador, en donde se clasifican los diversos tipos de componentes.
Para cada componente se construye un AFD que permita identificar el patrn
de smbolos que deber recibir y donde deber terminar ese patrn que seale
que ah se encontr un componente. Todos los AFDs se integran en un solo
diagrama. Finalmente se determina la matriz de transicin de estados, que no es
ms que transcripcin del AFD integrado, en donde las columnas son los smbolos
que acepta el analizador, incluyendo una columna para \b \t \n y otra columna para
otro que representa a cualquier caractr o smbolo diferente de los sealados por
el analizador. Lo que resta es crear un algoritmo de reconocimiento de cadenas y
aadir mediante una seleccin de casos para tomar la accin correspondiente
segn la cadena encontrada.
3.3 Manejo de localidades temporales de memoria (buffers).
La forma ms fcil de leer un programa es carcter por carcter pero es
ineficiente.
UNIDAD 4
Anlisis sintctico
4.1 Introduccin a las Gramticas libres de contexto y rboles de derivacin.
Gramticas de Contexto Libre:
La flexibilidad proporcionada por las gramticas de contexto libre es tal que es
la ms usada para definir la sintaxis de los lenguajes de programacin.
Una definicin formal de una gramtica de contexto sensitivo es la siguiente:
Es un cudruplo G= (V, S , P, S) donde V es un conjunto finito de variables, S
es un conjunto finito de smbolos terminales, P es un conjunto finito de reglas y S
es el smbolo inicial.
Cada produccin tiene la forma uVv, donde u es una variable del conjunto V, y
v es un miembro de (V S)* . Esto quiere decir En la parte izquierda dela
produccin viene siempre una variable (smbolo no terminal) y en la parte derecha
pueden venir cualquier nmero de smbolos terminales y no terminales incluyendo
la cadena nula.
Una gramtica de contexto libre produce un lenguaje tambin de contexto libre:
G L(G).
Arboles De Derivacin:
Existen bsicamente dos formas de describir cmo en una cierta gramtica una
cadena puede ser derivada desde el smbolo inicial. La forma ms simple es listar
las cadenas de smbolos consecutivas, comenzando por el smbolo inicial y
finalizando con la cadena y las reglas que han sido aplicadas. Si introducimos
estrategias como reemplazar siempre el no terminal de ms a la izquierda primero,
entonces la lista de reglas aplicadas es suficiente. A esto se le llama derivacin por
la izquierda.
La distincin entre derivacin por la izquierda y por la derecha es importante
porque en la mayora de analizadores la transformacin de la entrada es definida
dando una parte de cdigo para cada produccin que es ejecutada cuando la regla
es aplicada. De modo que es importante saber qu derivacin aplica el analizador,
por que determina el orden en el que el cdigo ser ejecutado.
Una derivacin tambin puede ser expresada mediante una estructura
jerrquica sobre la cadena que est siendo derivada.
/* { */
}
for (i=0; i<j; i++) { a=j-i+1; b=2*a+i; }
}
}
Se nos olvida poner la tercera llave. La llave siguiente cierra el segundo bloque. i
est indefinida en el primer bloque. El bucle for nos dara cinco veces el mensaje
variable i indefinida.
Solucin: crear un identificador llamado i en la tabla de smbolos con los atributos
correctos. Esto elimina los mensajes subsiguientes. Atencin: esto podra hacer
que no se detecte un error real que nos interesara atrapar. Otra alternativa sera
imprimir un solo mensaje diciendo que el identificador i ha sido utilizado sin
declaracin previa en las lneas nmero a,b,c
Recuperacin de errores en un intrprete
Hay que sealar el error y detener la ejecucin, permitiendo al programador
revisar las variables
revisar el cdigo
modificar el cdigo
reanudar la ejecucin
saltarse lneas
abandonar la ejecucin del ltimo programa
abandonar totalmente la ejecucin
y asegurarse de que todo sigue correctamente. En lenguaje simblico se puede
manipular la pila de ejecucin, salir automticamente de rutinas pendientes, sin
continuar la ejecucin, etc .
4.7 Generadores Codigo para Analizadores Sintacticos Yacc Bison
La entrada a programas de computacin generalmente tiene una estructura
determinada; de hecho, cada programa de computacin que recibe una entrada
puede ser visto como definidor de un lenguaje de entrada que acepta. Un
lenguaje de entrada puede ser tan complejo como un lenguaje de programacin, o
tan simple como una secuencia de nmeros. Desafortunadamente, las facilidades
usuales para la entrada son limitadas, difciles de usar y generalmente negligentes
en cuanto al chequeo y validacin de la entrada.
|
|
b
^ int
int --------|
|
c
2
int int
Si la expresin hubiera sido
a/(b+c^2)
El rbol sintctico sera el mismo, sustituyendo 2 por 2. Sin embargo, la
propagacin de atributos sera diferente:
/ real
--------|
|
a
+ real
int --------|
|
b
^ real
int --------|
|
c
2
int int
En algn caso podra llegar a producirse error (p.e. si / representara slo la
divisin entera).
Si la expresin hubiera sido
int a,b,c,d;
a/(b+c^d)
El rbol sintctico sera el mismo, sustituyendo 2 por d. Sin embargo, la
propagacin de atributos sera incompleta:
/ {int,real}
--------|
|
a
+ {int,real}
int --------|
|
b
^ {int,real}
int --------|
|
c
d
int int
El analizador semntico podra reducir los tipos inseguros al tipo mximo (real) o
utilizar un tipo interno nuevo (ej. arit={int,real}, una unin).
Lo anterior es un ejemplo de propagacin bottom-up. La propagacin top-down
tambin es posible: lo que se transmite son las restricciones y los tipos de las
hojas sirven de comprobacin. Por ejemplo, si la divisin slo puede ser entera,
transmitimos hacia abajo la restriccin de que sus operandos slo pueden ser
enteros. Al llegar a d, esa restriccin se convierte en que d debe ser positiva. Si no
lo es, error.
La implantacin de todos los casos posibles de operacin con tipos mixtos podra
ser excesivamente cara. En su lugar, se parte de operaciones relativamente
simples (ej. int+int, real+real) y no se implementan las restantes (ej. int+real,
real+int), aadiendo en su lugar operaciones mondicas de cambio de tipo (ej.
intreal).
Esta decisin puede introducir ambigedades. Por ejemplo, sea el programa
real a;
int b,c;
a:=b+c
El rbol sintctico es:
:=
--------|
|
a
+
real --------|
|
b
c
int int
Existen dos conversiones posibles:
:= real
:= real
----------------|
|
|
|
a
+ real
a
+ int
real --------real --------|
|
|
|
b
c
b
c
int int
int int
Clasificacin de Errores
Durante un proceso de resolucin de problemas existen varias formas en que
pueden surgir errores, las cuales se reflejan en el cdigo fuente del programa.
Desde el punto de vista del compilador, los errores se pueden dividir en dos
categoras:
Errores visibles y Errores invisibles
Los errores invisibles en un programa son aquellos que no puede detectar el
compilador, ya que no son el resultado de un uso incorrecto del lenguaje de
programacin, sino de decisiones errneas durante el proceso de especificacin o
de la mala formulacin de algoritmos. Por ejemplo, si se escribe
a : = b + c ; en lugar de a : = b * c ;
el error no podr ser detectado por el compilador ni por el sistema de ejecucin.
Estos errores lgicos no afectan la validez del programa en cuanto a su correccin
sintctica. Son objeto de tcnicas formales de verificacin de programas que no se
consideran aqu. Para conocer ms sobre la verificacin de programas, consulte,
por ejemplo, [LOEC 87].
Los errores visibles, a diferencia de los errores lgico, pueden ser detectados por
el compilador o al menos por el sistema de ejecucin. Estos errores se pueden
caracterizar de la siguiente manera:
Errores de ortografa y
Errores que ocurren por omitir requisitos formales del lenguaje de programacin.
Estos errores se presentar porque los programadores no tienen el cuidado
suficiente al programador. Los errores del segundo tipo tambin pueden ocurrir
porque el programador no comprende a la perfeccin el lenguaje que se utiliza o
porque suele escribir sus programas en otro lenguaje y, por tanto, emplea las
construcciones de dicho lenguaje (estos problemas pueden presentarse al usar a
la vez lenguajes de programacin como PASCAL y MODULA-2, por ejemplo).
Clasificacin de Ocurrencias
Por lo regular, los errores visibles o detectables por el compilador se dividen en
tres clases, dependiendo de la fase del compilador en el cual se detectan:
Errores Lxicos;
Errores Sintcticos;
Errores Semnticos;
Por ejemplo, un error lxico puede ocasionarse por usar un carcter invlido (uno
que no pertenezca al vocabulario del lenguaje de programacin) o por tratar de
reconocer una constante que produce un desbordamiento.
cierra el comentario hasta que el analizador lxico llegue al final del archivo o al
smbolo de fin de otro comentario (si no se permiten comentarios anidados).
Si se sabe que el siguiente componente lxico debe ser una palabra reservada, es
posible corregir una palabra reservada mal escrita. Esto se hace mediante
funciones de correccin de errores, bien conocidas en los sistemas de lenguajes
naturales, o simplemente aplicando una funcin de distancia mtrica entre la
secuencia de entrada y el conjunto de palabras reservadas.
Por ltimo, el proceso de compilacin puede terminar si se detecta un fin de
archivo dentro de un componente lxico.
Manejo de Errores en el Anlisis Sintctico
El analizador sintctico detecta un error de sintaxis cuando el analizador lxico
proporciona el siguiente smbolo y ste es incompatible con el estado actual del
analizador sintctico. Los errores sintcticos tpicos son:
Parntesis o corchetes omitidos, por ejemplo, x : = y * (1 + z;
Operadores u operando omitidos, por ejemplo, x : = y (1 + z );
Delimitadores omitidos, por ejemplo, x : = y + 1 IF a THEN y : = z.
No hay estrategias de recuperacin de errores cuya validez sea general, y la
mayora de las estrategias conocidas son heursticas, ya que se basan en
suposiciones acerca de cmo pueden ocurrir los errores y lo que probablemente
quiso decir el programador con una determinada construccin. Sin embargo, hay
algunas estrategias que gozan de amplia aceptacin:
Recuperacin de emergencia (o en modo pnico): Al detectar un error, el
analizador sintctico salta todos los smbolos de entrada hasta encontrar un
smbolo que pertenezca a un conjunto previamente definido de smbolos de
sincronizacin. Estos smbolos de sincronizacin son el punto y como, el smbolo
end o cualquier palabra clave que pueda ser el inicio de una proposicin nueva,
por ejemplo. Es fcil implantar la recuperacin de emergencia, pero slo reconoce
un error por proporcin. Esto no necesariamente es una desventaja, ya que no es
muy probable que ocurran varios errores en la misma proposicin (vase [IPL 78],
por ejemplo). Esta suposicin es un ejemplo tpico del carcter heurstico de esta
estrategia.
Recuperacin por insercin, borrado y reemplazo: ste tambin es un mtodo fcil
de implantar y funciona bien en ciertos casos de error. Usemos como ejemplo una
declaracin de variable en PASCAL . cuando una coma va seguida por dos
puntos, en lugar de un nombre de variable, es posible eliminar esta coma. En
forma similar, se puede insertar un punto y coma omitido o reemplazar un punto y
coma por una coma en una lista de parmetros.
padrede(C,B),
A \== B.
% A y B son familiares si A es padre de B o A es hijo de B o A es hermano de B
familiarde(A,B) :padrede(A,B).
familiarde(A,B) :hijode(A,B).
familiarde(A,B) :hermanode(A,B).
consultas
% juan es hermano de marcela?
?- hermanode(juan, marcela).
yes
% carlos es hermano de juan?
?- hermanode(carlos, juan).
no
% pablo es abuelo de maria?
?- abuelode(pablo, maria).
yes
% maria es abuelo de pablo?
?- abuelode(maria, pablo).
no
Ejemplo sobre Listas Prolog
% Si queremos hallar la longitud de una lista.
% La longitud de una lista vacia es 0.
% La longitud de cualquier lista es la longitud de la cola + 1.
longitud([],0).
longitud([H|T],N):-longitud(T,N0), N is N0 + 1.
?- longitud([a,b,c],L).
3
?- longitud([a,b,c],4).
No
% Si queremos determinar si un elemento es pertenece a una lista.
% El elemento pertenece a la lista si coincide con la cabeza de la lista.
% El elemento pertenece a la lista si es se encuentra en la cola de la lista.
pertenece(X,[X|_]).
pertenece(X,[_|R]):- pertenece(X,R).
?- pertenece(b,[a,b,c]).
Yes
?- pertenece(b,[a,[b,c]]).
No
?- pertenece([b,c],[a,[b,c]]).
Yes
% Si queremos eliminar un elemento de la lista.
% Si X es la cabeza de la lista, la cola T es la lista sin X
% Si X no es la cabeza de la lista, conservamos la cabeza de la lista
% como parte de la respuesta y continuamos eliminando X de la cola T.
elimina (X,[X|T],T).
elimina (X,[H|T],[H|T1]):- elimina (X,T,T1).
?- elimina(1,[1,2,3,4],R).
R = [2,3,4]
?- elimina(1,R,[2,3]).
R = [1, 2, 3]
R = [2, 1, 3]
R = [2, 3, 1]
% Si queremos calcular la inversa de una lista.
% La inversa de una lista vacia es una lista vacia.
% La inversa de H|T es la inversa de T concatenada con H.
inversa([],[]).
inversa([H|T],L):- inversa(T,R), concatenar(R,[H],L).
?- inversa([a,b,c,d],[d,c,b,a]).
6.3.3 Triplos Lenguajes Intermedios
6.3.4 Cudruplos Lenguajes Intermedios
6.4 Esquemas de Generacin Lenguajes Intermedios
Cuando una empresa desarrolla un compilador para un lenguaje fuente y un
lenguaje objeto determinados, normalmente no es el nico compilador que la
empresa piensa desarrollar; es ms muchos fabricantes de microprocesadores
tienen una divisin de dedicada a desarrollar compiladores para los nuevos chips
que construya.
Cuando el nmero de lenguaje fuente crece hasta un nmero grande M, y/o
cuando el nmero de lenguajes objeto tambin crece hasta un nmero grande N,
es necesario encontrar una tcnica para evitar tener que disear M x N
compiladores. La solucin consiste en utilizar un lenguaje intermedio o una
representacin intermedia; de esta forma slo hay que construir M programas que
traduzcan de cada lenguaje fuente al lenguaje intermedio (los front ende), y N
programas que traduzcan del lenguaje intermedio a cada lenguaje objeto (los back
end).
La matemtica (del lat. mathematca, y este del gr. , derivado de
, conocimiento) es una ciencia formal que estudia las propiedades y las
relaciones que se pueden establecer entre los entes abstractos, como los
smbolos, los nmeros y las figuras geomtricas.[1]
Aunque la matemtica sea la supuesta Reina de las Ciencias, algunos
matemticos no la consideran una ciencia natural. Principalmente, los
matemticos definen e investigan estructuras y conceptos abstractos por razones
puramente internas a la matemtica, debido a que tales estructuras pueden
proveer, por ejemplo, una generalizacin elegante, o una herramienta til para
clculos frecuentes. Adems, muchos matemticos consideran la matemtica
como una forma de arte en vez de una ciencia prctica o aplicada. Sin embargo,
las estructuras que los matemticos investigan frecuentemente s tienen su origen
en las ciencias naturales, y muchas veces encuentran sus aplicaciones en ellas,
particularmente en la fsica.
No existe un nico lenguaje intermedio en todos los compiladores, sino que cada
empresa que disea compiladores suele tener su propio lenguaje intermedio. La
utilizacin de un lenguaje intermedio permite construir en, mucho menos tiempo un
compilador para otra mquina y tambin permite construir compiladores para otros
lenguajes fuente generando cdigos para la misma mquina. La matemtica es un
arte, pero tambin una ciencia de estudio. Informalmente, se puede decir que es el
estudio de los nmeros y smbolos. Es decir, es la investigacin de estructuras
abstractas definidas a partir de axiomas, utilizando la lgica y la notacin
matemtica. Es tambin la ciencia de las relaciones espaciales y cuantitativas. Se
trata de relaciones exactas que existen entre cantidades y magnitudes, y de los
mtodos por los cuales, de acuerdo con estas relaciones, las cantidades buscadas
son deducibles a partir de otras cantidades conocidas o presupuestas.
Vase tambin: Filosofa de la matemtica No es infrecuente encontrar a quien
describe la matemtica como una simple extensin de los lenguajes naturales
humanos, que utiliza una gramtica y un vocabulario definidos con extrema
precisin, cuyo propsito es la descripcin y exploracin de relaciones
conceptuales y fsicas. Recientemente, sin embargo, los avances en el estudio del
lenguaje humano apuntan en una direccin diferente: los lenguajes naturales
(como el espaol y el francs) y los lenguajes formales (como la matemtica y los
lenguajes de programacin) son estructuras de naturaleza bsicamente diferente.
Unidad 7 Optimizacin
7.1 Tipos Optimizacin
La optimizacin va a depender del lenguaje de programacin y es directamente
proporcional al tiempo de compilacin; es decir, entre ms optimizacin mayor
tiempo de compilacin.
Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones
se realizan en base al alcance ofrecido por el compilador de programacin y es
directamente proporcional al tiempo de compilacin; es decir, entre ms
optimizacin mayor tiempo de compilacin.
Como el tiempo de optimizacin es gran consumidor de tiempo (dado que tiene
que recorrer todo el rbol de posibles soluciones para el proceso de optimizacin)
la optimizacin se deja hasta la fase de prueba final.
Algunos editores ofrecen una versin de depuracin y otra de entrega o final.
La optimizacin es un proceso que tiene a minimizar o maximizar alguna variable
de rendimiento, generalmente tiempo, espacio, procesador, etc.
Desafortunamente no existen optimizador que hagan un programa ms rpido y
que ocupe menor espacio.
La optimizacin se realiza reestructurando el cdigo de tal forma que el nuevo
cdigo generado tenga mayores beneficios. La mayora de los compiladores
tienen una optimizacin baja, se necesita de compiladores especiales para
realmente optimizar el cdigo.
Segunda generacin
El lenguaje de programacin de segunda generacin (por sus siglas en ingls,
2GL), es el lenguaje ensamblador. Se considera de segunda generacin porque,
aunque no es lenguaje nativo del microprocesador, un programador de lenguaje
ensamblador debe conocer la arquitectura del microprocesador (como por ejemplo
las particularidades de sus registros o su conjunto de instrucciones).
salvar varios registros en la pila de una sola vez mover grandes bloques de
memoria operaciones aritmticas complejas o de punto flotante (seno, coseno,
raz cuadrada ) El nivel de lenguaje Assembly tiene aspectos importantes de los
niveles de microarquitectura, en los cuales se encuentra (ISA y sistema operativo)
estos dos se utilizan para la traduccin en lugar de la interpretacin. Algunas
caractersticas del lenguaje se describen a continuacin Los programas que sirven
para traducir algn programa para el usuario se llama traductores, el lenguaje en
que esta escrito el programa original se llama lenguaje fuente, el lenguaje original
que sea modificado se llama lenguaje objeto.
Se usa la traduccin cuando se cuenta con un procesador (ya sea hardware o un
interprete) para el lenguaje objeto pero no para el lenguaje fuente, Si la traduccin
se realiza correctamente, la ejecucin del programa traducido dar exactamente
los mismos resultados que habra dado la ejecucin del programa fuente. Hay dos
diferencias entre traduccin e interpretacin, en la traduccin no se ejecuta
directamente el programa original, en el lenguaje fuente se convierte en un
programa equivalente llamado programa objeto o programa binario ejecutable y
este funciona solo cuando se ha acabado la traduccin.
El cdigo mquina, un simple patrn de bits, es hecho legible reemplazando
valores crudos por smbolos denominados mnemnicos. Se invent para facilitar la
tarea de los primeros programadores que hasta ese momento tenan que escribir
directamente en cdigo binario. antes an era peor, ya que el cdigo de ceros y
unos (el programa) deba introducirse en una tarjeta perforada. La posicin
ocupada por cada punto equivala a un 1 o a un 0 segn hubiera un hueco o
no. Lo cual supona una forma casi idntica en la que hoy se escriben los datos
binaros en soportes tales como los CDs y DVDs.
Mientras que una computadora reconoce la instruccin de mquina IA-32
10110000 01100001
para los programadores de microprocesadores x86 es mucho ms fcil reconocer
dicha instruccin empleando lenguaje Assembly:
movb 061,%al
(que significa mover el valor hexadecimal 61 (97 decimal) al registro al.)
Cada instruccin de la mquina se transforma en una nica instruccin en cdigo
simblico.
Pero adems, para mejorar la legibilidad del programa, el cdigo simblico
introduce instrucciones adicionales, que no corresponden a ninguna instruccin de
la mquina y que proporcionan informacin. Se llaman pseudoinstrucciones.
El cdigo simblico puede parecer de difcil acceso, pero es ms fcil de recordar
e interpretar que el binario o el hexadecimal.