Está en la página 1de 16

REPÚBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN


UNIVERSITARIA, CIENCIA Y TECNOLOGÍA
UNIVERSIDAD ALONSO DE OJEDA
ESCUELA DE INGENIERÍA
INGENIERÍA EN COMPUTACION
ASIGNATURA: COMPILADORES

COMPILADORES. CORTE III

Autor:
JESUS OLIVERO
CI: 26239448
Profesor: Ing.
MARIO VALBUENA

Maracaibo, Mayo 2020


INTRODUCCION

a. Características de las fases de un Compilador.


b. Análisis Semántico.
c. Generación de Código Intermedio.
d. Generación de Código.
e. Optimización de Código.
f. Organización y Administración de la Memoria durante la ejecución.
g. Estrategias para la Asignación de Memoria.
                                      
2.    Defina el comportamiento de algunos Compiladores:
a.  Fortran.
b.  Pascal.
c.   C++.
d.  Java
                                      

CONCLUSION
REFERENCIAS BIBLIOGRAFICAS
INTRODUCCIÓN

En el próximo informe se estudiará todo lo relacionado a los sistemas de


base de datos, entendiéndose así que una base de datos se define como una
colección de datos relacionados entre sí y que tienen un significado implícito.
Las bases de datos son un elemento fundamental en el entorno informático
hoy en día y tienen aplicación en la práctica totalidad de campos. Concebidas con
un propósito general, son de utilidad para toda disciplina o área de aplicación en la
que exista una necesidad de gestionar datos, tanto más cuanto más voluminosos
sean estos.
Características de las fases de un Compilador
El proceso de compilación es una secuencia de varias fases. Cada fase dura
entrada de su etapa anterior, tiene su propia representación del programa de
origen, y alimenta su resultado a la siguiente fase del compilador. Nos permiten
entender las fases de un compilador.

 Análisis Léxico
La primera fase de escáner funciona como un texto escáner. Esta fase busca en el
código fuente como una secuencia de caracteres y la convierte en un lexema
resultante-. Analizador Léxico representa estos lexema resultante- en forma de
fichas:

<token-name, attribute-value>

 Sintaxis Análisis
La siguiente fase se denomina la sintaxis análisis o análisis. Toma el token de
análisis léxico como entrada y genera un árbol analizar (o árbol de sintaxis). En
esta fase, token arreglos se contrastan con el código fuente gramática, es decir, el
analizador comprueba si la expresión de los tokens es sintácticamente correcto.

 Análisis semántico
Análisis semántico comprueba si el análisis árbol construido sigue las reglas del
idioma. Por ejemplo, la asignación de valores es entre tipos de datos compatibles,
y añadiendo cadena en un número entero. Además, el analizador semántico
realiza un seguimiento de los identificadores, sus tipos y expresiones; si los
identificadores se declaran antes de su uso, o no, etc. El analizador semántico
produce un árbol de sintaxis anotado como una salida.

 Generación de código intermedio


Tras análisis semántico el compilador genera un código intermedio del código
fuente para el equipo de destino. Es un programa para algunos la máquina
abstracta. , Está entre el lenguaje de alto nivel y el lenguaje de máquina. Este
código intermedio debe ser generado de tal manera que hace que sea más fácil de
traducir en la máquina de destino.
 Optimización de código
La siguiente fase de optimización de código es el código intermedio. La
optimización puede ser asumida como algo que elimina código innecesario, y
organiza la secuencia de declaraciones con el fin de acelerar la ejecución del
programa sin desperdicio de recursos (CPU, memoria).

 Generación de código
En esta fase, el generador de código optimizado la representación del código
intermedio y la asigna a la máquina de destino. El generador de código se traduce
el código intermedio en una secuencia de (generalmente) reubicables código
máquina. Secuencia de instrucciones de código máquina realiza la tarea como el
código intermedio.

 Tabla de símbolos
Es una estructura de datos mantendrá en todas las fases de un compilador. Todos
los nombres de identificador junto con sus tipos se almacenan aquí. La tabla de
símbolos hace que sea más fácil para que el compilador pueda buscar con rapidez
el registro de código y recuperarla. La tabla de símbolos se utiliza también para el
campo.

Análisis Semántico.

Semántica de un lenguaje dar sentido a sus construcciones, como los


tokens estructura y sintaxis. Semántica ayudan a interpretar los símbolos, sus
tipos y sus relaciones con los demás. Análisis semántico los jueces si la sintaxis
estructura construida en el programa de origen se deriva el significado o no.

CFG + semantic rules = Syntax Directed Definitions

Por ejemplo:
int a = “value”;
No debe emitir un error léxico y la sintaxis en fase de análisis, ya que es léxico y
estructuralmente correcto, pero se debe generar un error semántico como del tipo
de asignación es diferente. Estas normas están definidas por la gramática de la
lengua y evaluado en análisis semántico. Las siguientes tareas deben realizarse
en análisis semántico:

 Resolución de Ámbito
 Comprobación de tipos
 Matriz de control

 Errores semánticos
Hemos mencionado algunos de los errores que la semántica analizadora
semántico se espera para reconocer:

 No coinciden los tipos


 Variable no declarada
 Identificador reservado uso indebido.
 Declaración de variables múltiples en un ámbito.
 Acceder a una variable fuera de alcance.
 Parámetro formal y real no coincide.

Generador de código intermedio


En el proceso de traducir un programa fuente a código destino, un
compilador puede construir una o más representaciones intermedias, las cuales
pueden tener una variedad de formas. Los árboles sintácticos son una forma de
representación intermedia; por lo general, se utilizan durante el análisis sintáctico y
semántico.

Después del análisis sintáctico y semántico del programa fuente, muchos


compiladores generan un nivel bajo explícito, o una representación intermedia
similar al código máquina, que podemos considerar como un programa para una
máquina abstracta. Esta representación intermedia debe tener dos propiedades
importantes: debe ser fácil de producir y fácil de traducir en la máquina destino.
Existe una forma intermedia llamada código de tres direcciones, que
consiste en una secuencia de instrucciones similares a ensamblador, con tres
operandos por instrucción. Cada operando puede actuar como un registro

Generador de código
Un generador de código se espera que tenga una comprensión de la
máquina de destino entorno de ejecución y su conjunto de instrucciones. El
generador de código debe tomar las siguientes cosas en cuenta para generar el
código:

Idioma de destino: el generador de código ha de ser consciente de la


naturaleza del idioma de destino para que el código se ha transformado. Que el
lenguaje puede facilitar algunas de las instrucciones específicas para ayudar a el
compilador genera el código en una forma más cómoda. El equipo de destino
puede tener procesador RISC o CISC arquitectura.

Optimización de código
Optimización es un programa transformación técnica, que trata de mejorar el
código por lo que consumen menos recursos (es decir CPU, memoria) y ofrecer
una alta velocidad.
En la optimización de alto nivel general de programación son sustituidos por
construcciones muy eficiente de bajo nivel los códigos de programación. Un
código proceso en fase de optimización debe seguir las tres normas que se
explican a continuación:
 El código de salida no debe, de ninguna manera, cambiar el sentido del
programa.
 Optimización debe aumentar la velocidad del programa y si es posible, el
programa debe exigir menos cantidad de recursos.
 Optimización debe ser rápido y no debe retrasar el proceso de compilación
general.
 El esfuerzo para un código optimizado puede ser utilizado en los distintos
niveles de elaboración del proceso.

Optimización independiente de la máquina


En esta optimización, el compilador toma en el código intermedio y transforma una
parte del código que no implique un registros de la CPU y/o ubicaciones de
memoria absoluta. Por ejemplo:

do
{
item = 10;
value = value + item;
} while(value<100);

Este código implica repetir la asignación de elemento identificador, que si


ponemos esta forma:

Item = 10;
do
{
value = value + item;
} while(value<100);

No sólo debe guardar los ciclos de la CPU, pero puede ser utilizada en cualquier
procesador.

Optimización dependientes de la máquina


Dependientes de La Máquina optimización se realiza después de que el código de
destino se ha generado y cuando el código se transforman de acuerdo a la
arquitectura del equipo de destino. Registros de la CPU se trata y puede tener
referencias de memoria absoluta en lugar de referencias relativas. Optimizadores
dependientes de la máquina que los esfuerzos para aprovechar al máximo de
jerarquía de memoria.
Optimización de la memoria
La parte del sistema operativo que administra la memoria se llama administrador
de memoria. La memoria principal es un depósito de datos a los que se puede
acceder rápidamente y que son compartidos por la cpu y los dispositivos de E/S.
Funciones: Que memoria se esta usando, quien la usa, que procesos pueden
cargarse, asignación y liberaciones de memoria.
Cuando un programa se carga en memoria principal se convierte en procesos.
Las técnicas que existen para la carga de programas en la memoria son: partición
fija, que es la división de la memoria libre en varias partes (de igual o distinto
tamaño) y la partición dinámica, que son las particiones de la memoria en tamaños
que pueden ser variables, según la cantidad de memoria que necesita cada
proceso.
Entre las principales operaciones que desarrolla la administración de memoria se
encuentran la reubicación, que consiste en trasladar procesos activos dentro y
fuera de la memoria principal para maximizar la utilización del procesador; la
protección, mecanismos que protegen los procesos que se ejecutan de
interferencias de otros procesos; uso compartido de códigos y datos, con lo que el
mecanismo de protección permite que ciertos procesos de un mismo programa
que comparten una tarea tengan memoria en común.
Estrategias para la asignación de memoria
Un método de asignación de memoria es la manera mediante la cual el Sistema
Operativo lleva el control de la memoria tratando de que sea lo más eficiente
posible. Los métodos de asignación más comunes son: SEGMENTACIÓN. Este
método consiste en la asignación de bloques de memoria de tamaño variable,
llamados segmentos.
Una de las funciones básicas que debe implementar un SO es la Administración
de la Memoria para tener un control sobre los lugares donde están almacenados
los procesos y datos que actualmente se están utilizando.
Un mecanismo de asignación determina la cantidad de bloques (particiones) que
serán administrados en la memoria. Existen tres:
 ASIGNACIÓN DE UNA PARTICIÓN. En la memoria se considera la
existencia de una sola partición, esto es, se tiene la capacidad de ejecutar
un proceso. La partición es toda la memoria, cuya administración corre por
cuenta del usuario, o sea, no hay un sistema operativo.

 ASIGNACIÓN DE DOS PARTICIONES. La memoria se divide en 2 bloques.


En una partición se carga el Sistema Operativo y en la otra el programa del
usuario. Es el concepto de Sistema Operativo Monousuario.

 ASIGNACIÓN DE MULTIPLES PARTICIONES. La memoria es dividida en


varias particiones una para el Sistema Operativo y las demás para los
procesos de usuarios u otras funciones especiales del Sistema Operativo.
Este es el concepto teórico de asignación de memoria en los Sistemas
Operativos de Multiparticiones y de Multitarea.

Una estrategia de asignación de memoria determina el lugar donde será


cargado un nuevo proceso en base a un criterio.
Las estrategias de asignación son:

 PRIMER AJUSTE. El Sistema Operativo asigna el primer bloque de


memoria libre con espacio suficiente para satisfacer la información. La
búsqueda de este bloque es de manera secuencial.
 MEJOR AJUSTE. El sistema operativo busca el bloque de memoria que
represente el menor desperdicio según el requerimiento.
 PEOR AJUSTE. El sistema operativo asigna el bloque mas grande que
encuentre.
Funcionamiento del compilador fortran
Fortran (previamente FORTRAN,1contracción del inglés The IBM
Mathematical Formula Translating System) es un lenguaje de programación de
alto nivel de propósito general,2 procedimental3 e imperativo, que está
especialmente adaptado al cálculo numérico y a la computación científica.

Desarrollado originalmente por IBM en 1957 para el equipo IBM 704, y


usado para aplicaciones científicas y de ingeniería, el FORTRAN vino a dominar
esta área de la programación desde el principio y ha estado en uso continuo por
más de medio siglo en áreas de cómputo intensivo tales como la predicción
numérica del tiempo, análisis de elementos finitos, dinámica de fluidos
computacional (CFD), física computacional y química computacional.

Es uno de los lenguajes más populares en el área de la computación de


alto rendimiento y es el lenguaje usado para programas que evalúan el
desempeño (benchmark) y el ranking de los supercomputadores más rápidos del
mundo.4
El FORTRAN abarca un linaje de versiones, cada una de las cuales evolucionó
para añadir extensiones al lenguaje mientras que usualmente retenía
compatibilidad con las versiones previas. Versiones sucesivas han añadido
soporte para procesamiento de datos basados en caracteres (FORTRAN 77),
programación de arreglos, programación modular y programación orientada a
objetos (Fortran 90/95), y programación genérica (Fortran 2003).

Free Pascal
El Free Pascal es un compilador Pascal portable, libre y de código abierto,
que representa una alternativa a los productos comerciales Turbo Pascal y Delphi.
Free Pascal es un compilador tanto de 32 como de 64 bits para múltiples
arquitecturas de CPU y múltiples sistemas operativos. El compilador implementa
los dialectos de Pascal de Borland Turbo Pascal y Delphi, además de algunas
construcciones de MacPascal. Está disponible para la mayoría de los sistemas
operativos populares
El FPC adoptó los dialectos estándar de facto de los programadores Pascal,
los dialectos de Borland, específicamente Borland Pascal 7 y Delphi 2 para la
versión 1.0.x del FPC, y Delphi 6/7 para la versión 2.0.x del FPC.

Sin embargo el proyecto tiene un concepto de "modo de compilación", y el


equipo hizo claro que incorporaría los parches para los dialectos estandarizados
ANSI/ISO para crear un modo conforme con el estándar.

También, se ha hecho un pequeño esfuerzo de soportar algo de la sintaxis


del Apple Pascal, para la fácil interconexión con el Mac OS (X).
Funcionalidad de Delphi faltante en Free Pascal:
• Delegación usando la palabra clave "implements"
• Interfaces duales COM IDispatch automáticas (dispinterfaces)
• dispid en interfaces normales
• Paquetes:el compilador soporta importación y exportación de clases desde
y hacia librerías compartidas (útil, por ejemplo, para Lazarus, el cual implementa el
empaquetado de componentes)
• set types pueden tener diferentes tamaños

Compilador C++
C++ es un lenguaje en el que se diferencian las minúsculas y las
mayúsculas (case sensitive). También es un lenguaje de formato libre, es decir,
que se admiten espacios, tabuladores, saltos de línea y comentarios en cualquier
parte del código.
Las palabras clave del lenguaje son reservadas, aunque cada grupo de alumnos
sólo ha de tener en cuenta las palabras asignadas al grupo.

C++ es un lenguaje con estructura de bloques, que se definen mediante la


utilización de las llaves { }. Los nombres declarados dentro de un bloque son
locales a dicho bloque. Los bloques vienen definidos por las funciones, clases y
métodos. Los nombres declarados fuera de cualquier función, método o clase son
globales y pueden ser utilizados desde cualquier método o función que esté
definida con posterioridad.

No se permite la definición de funciones o métodos anidados. C++ es un


lenguaje con recursividad, por lo que cualquier función o método puede ser
recursivo. El paso de parámetros puede ser por valor o por referencia.
No es necesario considerar para el Proyecto las directivas del preprocesador de
C++.

En C++ es necesario declarar previamente todo lo que se utilice. Las


declaraciones y sentencias finalizan en punto y coma, a menos que la sentencia
finalice con un bloque (entre llaves).

Este resumen presenta las principales características de C++ que hay que
implementar para el Proyecto de la asignatura de Compiladores. Solo es necesario
considerar los elementos de C++ mencionados en este resumen. Entre corchetes
se dan indicaciones sobre la obligatoriedad u opcionalidad de incluir en este
Proyecto algunas partes del lenguaje. Con el fin de facilitar la implementación del
compilador, las características mostradas en esta página pueden no coincidir al
100% con el estándar del lenguaje, por lo que, en caso de duda, se deberá
implementar el comportamiento aquí descrito.

Java
Es un lenguaje de programación y una plataforma informática que fue
comercializada por primera vez en 1995 por Sun Microsystems. Hay muchas
aplicaciones y sitios web que no funcionarán, probablemente, a menos que tengan
Java instalado y cada día se crean más. Java es rápido, seguro y fiable. Desde
portátiles hasta centros de datos, desde consolas para juegos hasta computadoras
avanzadas, desde teléfonos móviles hasta Internet, Java está en todas partes, si
es ejecutado en una plataforma no tiene que ser recompilado para correr en otra.
Java es, a partir de 2012, uno de los lenguajes de programación más populares en
uso, particularmente para aplicaciones de cliente-servidor de web, con unos diez
millones de usuarios reportados.
El lenguaje de programación Java fue desarrollado originalmente por James
Gosling, de Sun Microsystems (constituida en 1983 y posteriormente adquirida el
27 de enero de 2010 por la compañía Oracle),4 y publicado en 1995 como un
componente fundamental de la plataforma Java de Sun Microsystems. Su sintaxis
deriva en gran medida de C y C++, pero tiene menos utilidades de bajo nivel que
cualquiera de ellos. Las aplicaciones de Java son compiladas a bytecode (clase
Java), que puede ejecutarse en cualquier máquina virtual Java (JVM) sin importar
la arquitectura de la computadora subyacente.

La compañía Sun desarrolló la implementación de referencia original para


los compiladores de Java, máquinas virtuales y librerías de clases en 1991, y las
publicó por primera vez en 1995. A partir de mayo de 2007, en cumplimiento de
las especificaciones del Proceso de la Comunidad Java, Sun volvió a licenciar la
mayoría de sus tecnologías de Java bajo la Licencia Pública General de GNU.
Otros han desarrollado también implementaciones alternas a estas tecnologías de
Sun, tales como el Compilador de Java de
CONCLUSIÓN
Los sistemas gestores de bases de datos son la herramienta más
adecuada para almacenar los datos en un sistema de información debido a sus
características de seguridad, recuperación ante fallos, gestión centralizada,
estandarización del lenguaje de consulta y funcionalidad avanzada.
Luego de realizar esta investigación, se puede decir que una base de datos
es una colección de datos o información usados para dar servicios a muchas
aplicaciones al mismo tiempo.
En cuanto al requerimiento se define que cumple las mismas tareas de
análisis que del software y tiene como característica relacionar la información
como vía organización y asociación donde la base de datos tiene una ventaja que
es utilizar la plataforma para el desarrollo del sistema de aplicación en las
organizaciones.
REFERENCIAS BIBLIOGRAFICAS

 Hhistoria de la base de datos, blog de la informática.


https://histinf.blogs.upv.es/2011/01/04/historia-de-las-bases-de-datos/

 Tipos de base de datos. optimización del marketing.


https://rockcontent.com/es/blog/tipos-de-base-de-datos/

 Conexiones de base de datos


https://www.ibm.com/support/knowledgecenter/es/SSMKHH_10.0.0/com.ibm.etool
s.mft.doc/ac00406_.htm

También podría gustarte