We use cookies to give you the best experience possible. By continuing we’ll assume you’re on board with our cookie policy

See Pricing

What's Your Topic?

Hire a Professional Writer Now

The input space is limited by 250 symbols

What's Your Deadline?

Choose 3 Hours or More.
Back
2/4 steps

How Many Pages?

Back
3/4 steps

Sign Up and See Pricing

"You must agree to out terms of services and privacy policy"
Back
Get Offer

Conceptos de Compiladores

Hire a Professional Writer Now

The input space is limited by 250 symbols

Deadline:2 days left
"You must agree to out terms of services and privacy policy"
Write my paper

TRABAJO DE CONCEPTOS CARLOS ALFONSO CARRILLO DUARTE MIGUEL ANGEL GARZON TRIANA NICOLAS SNAIDER SEGURA AMADOR Asignatura: Ingenieria de Software II Docente: Ing. EMIRO SANABRIA CHOCONTA UNIVERSIDAD DE CUDINAMARCA FACULTAD DE INGENIERIA INGENIERIA DE SISTEMAS FUSAGASUGA 2010 CONTENIDO 1. COMPILADOR vs. INTERPRETADOR vs. ENCADENADOR3 2. TOKEN vs. VARIABLE5 3. DIAGRAMA DE CARRILERA vs. DIAGRAMA DE TRANSICION O ESTADOS7 4. GENERADOR DE CODIGOS vs. GENERADOR DE APLICACIONES10 5. LENGUAJE DE BAJO NIVEL vs. LENGUAJE DE ALTO NIVEL11 6. LIBRERIA vs. BIBLIOTECA13 7. PROCEDIMIENTO O FUNCION vs.

SUBPROGRAMA15 8. TABLA DE SIMBOLOS vs.

Don't use plagiarized sources. Get Your Custom Essay on
Conceptos de Compiladores
Just from $13,9/Page
Get custom paper

PALABRAS RESERVADAS16 9. ESTRUCTURA DE DATOS vs. ESTRUCTURAS DE COMPILACON18 1. COMPILADOR vs. INTERPRETADOR vs. ENCADENADOR COMPILADOR: Es un programa que traduce desde un lenguaje (codigo fuente) a un programa equivalente en otro lenguaje es decir a un lenguaje objeto, que se puede definir como una transicion entre el codigo fuente y el ejecutable en donde se incluyen todas las librerias y funciones externas al codigo principal, posteriormente el encadenador crea un archivo ejecutable el cual es el que finalmente se va a implementar.

Este archivo ejecutable envia instrucciones al hardware en un nivel mas bajo donde las instrucciones son mucho mas simples para el procesador, pero a la vez aumenta la complejidad ya que estas instrucciones son casi imposibles de comprender para el programador. Cabe anotar que cada compilador esta especialmente disenado para un lenguaje de programacion especifico. Como parte importante del proceso de traduccion, el compilador reporta al usuario la presencia de errores en el programa fuente.

La variedad de compiladores es bastante ya que hay cientos de lenguajes fuente, desde lenguajes tradicionales como Fortran y Pascal hasta lenguajes especializados que han surgido en cada area de la computacion aplicada, igualmente existen varios lenguajes objeto, los cuales pueden ser otros lenguajes de programacion, o lenguaje maquina. La clasificacion de los compiladores se puede dar como de una sola pasada, multi-pasada, depuracion, optimizacion, dependiendo de como han sido estructurados o la funcion que deban desarrollar.

El proceso de compilacion se podria dividir en dos etapas, la primera es la parte que analiza el codigo fuente, comprueba su validez, genera el arbol de derivacion y rellena los valores de la tabla de simbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar. Y la segunda es la que genera el codigo maquina, especifica de una plataforma, a partir de los resultados de la fase de analisis.

Esta division permite que en la segunda etapa (sintesis) se utilice para generar el codigo maquina de varios lenguajes de programacion distintos y que en la primera etapa (analisis) se analice el codigo fuente de un lenguaje de programacion concreto. El codigo que se genera en la etapa de sintesis normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un “LINKER” o programa encadenador. INTERPRETADOR: Es un programa que ejecuta instrucciones escritas en un lenguaje de programacion. El compilador puede ser un programa que: 1.

Ejecute el codigo fuente directamente 2. Traduzca el codigo fuente en alguna representacion intermedia de codigo eficiente e inmediatamente lo ejecuta 3. Explicitamente ejecute codigo pre-compilado almacenado, hecho por un compilador el cual es parte del sistema interpretador PHP, Perl, Python, MATLAB, y Ruby son ejemplos del tipo 2, mientras que lenguajes como Pascal y Java del tipo 3: Programas fuente que son previamente compilados y almacenados como un codigo independiente de la maquina, el cual es posteriormente encadenado y ejecutado por un interprete y/o compilador.

Algunos lenguajes como Smalltalk, BASIC y otros combinan el tipo 2 y 3. Analiza el programa fuente y lo ejecuta directamente, sin generar ningun codigo equivalente. Su accion equivale a la de un interprete humano, que traduce las frases que oye sobre la marcha, sin producir ningun escrito permanente. Como es logico el proceso se enlentece, por ejemplo si una operacion esta dentro de la estructura conocida como ciclo y este se repite 100 veces, el lenguaje tiene que traducirlo 100 veces al codigo de la maquina.

No todo son desventajas, pues la parte buena de este tipo de lenguajes es que los errores se pueden corregir al momento y seguir facilmente la ejecucion del programa, por lo cual son idoneos para aprender a programar, proceso en el que da lo mismo la lentitud. ENCADENADOR: Es un programa que engancha los archivos de codigo objeto generados en los primeros pasos del proceso de compilacion y los convierte en un fichero ejecutable o en una biblioteca. En el caso de los programas enlazados dinamicamente, el enlace entre el programa ejecutable y las bibliotecas se realiza en tiempo de carga o ejecucion del programa.

Los programas de computador generalmente contienen varios modulos, estas partes no estan en un solo archivo objeto, y en tal caso se refieren unos a otros por medio de simbolos. Tipicamente un archivo objeto puede contener 3 tipos de simbolos. * Simbolos definidos, permiten ser llamados por otros modulos * Simbolos indefinidos, los que llaman otros modulos donde estan definidos dichos simbolos * Simbolos locales, usados internamente con el archive objeto para facilitar la realocacion.

Cuando un programa compromete multiples archivos objeto el encadenador combina esos archivos en un programa ejecutable, resolviendo los simbolos en la marcha. Los encadenadores pueden tomar objetos de una coleccion llamada libreria. Algunos encadenadores no incluyen la libreria completa en la salida; solamente incluyen los simbolos que se hayan referenciado desde los archivos objeto. Las librerias existen por diversos propositos y una o mas librerias del sistema se enlazan por defecto.

El enlace de nuestro codigo objeto con las funciones de libreria puede hacerse de dos maneras: Enlace estatico: Consiste en unir durante el enlace el codigo objeto de las librerias con el codigo del programa, generando asi el ejecutable. El programa ejecutable crece notablemente de tamano respecto de los archivos objeto, ya que incorpora el codigo de todas las funciones de las librerias. El enlace estatico es el que normalmente se utiliza a menos que indiquemos otra cosa. Enlace dinamico: El codigo de las librerias no se une al del programa, sino que se busca durante la ejecucion, unicamente cuando es requerido.

El enlace dinamico produce, por lo tanto, ejecuciones mas lentas, ya que cada vez que se use una funcion de libreria dinamica es necesario buscar el archivo en el que se encuentra y ejecutar su codigo. Ademas, pueden producirse errores de enlace durante la ejecucion del programa. Sin embargo, el enlace dinamico tiene las ventajas de reducir el tamano del archivo ejecutable y permitir la comparticion de librerias entre diferentes aplicaciones. CONCLUSION COMPILADOR vs. INTERPRETADOR vs. ENCADENADOR| Similitudes| Diferencias | El compilador y interpretador traducen desde un lenguaje fuente a un lenguaje de bajo nivel * El encadenador al igual que el interprete y el compilador traduce de un lenguaje a otro en el caso del encadenador a lenguaje maquina. * Tanto el compilador como el interprete muestran errores en el codigo fuente. | * El interprete no produce ningun lenguaje objeto sino que a traves de una maquina virtual produce el lenguaje de maquina * El interprete solo puede mostrar de a un error, en cambio el compilador los muestra todos, y el encadenador no los muestra solo ejecuta el lenguaje objeto. El tiempo de ejecucion en el interprete es mas lento que el compilador| Mientras que la interpretacion y la compilacion son los dos principales medios por los cuales se implementa un lenguaje de programacion, estas no son categorias completamente distintas, la mayoria de sistemas interpretadores tambien ejecutan una traduccion como lo hacen los compiladores, Interpretes y compiladores tienen diversas ventajas e inconvenientes que los hacen complementarios: Un interprete facilita la busqueda de errores, pues la ejecucion de un programa puede interrumpirse en cualquier momento para estudiar el entorno valores de las variables, entre otros.

Ademas, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar la ejecucion. Un compilador suele generar programas mas rapidos y eficientes, ya que el analisis del lenguaje fuente se hace una sola vez, durante la generacion del programa equivalente. En cambio, un interprete se ve obligado generalmente a analizar cada instruccion tantas veces como se ejecute incluso miles o millones de veces. Un interprete permite utilizar funciones y operadores mas potentes, como por ejemplo ejecutar codigo contenido en una variable en forma de cadenas de caracteres.

Usualmente, este tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que incluyen este tipo de operadores y que, por tanto, exigen un interprete, se llaman interpretativos. Los lenguajes compilativos, que permiten el uso de un compilador, prescinden de este tipo de operadores. EL uso del encadenador esta sujeto a los compiladores, en el caso de los interpretadores se prescinde de este, ya que generalmente se hace uso de una maquina virtual quien se encarga de convertir a lenguaje maquina el fuente. 2. TOKEN vs. VARIABLE

TOKEN: Un token es una cadena de caracteres, llamados componentes lexicos, categorizados de acuerdo a las reglas como un simbolo: un identificador, un numero, una coma etc… El proceso de obtener los tokens a partir de una cadena de caracteres de entrada es llamado “tokenization” (analisis lexico), y se categorizan de acuerdo al tipo de simbolo. Un token es cualquier cosa que sea util para el procesamiento de una cadena de texto o archivo. Un analizador lexico generalmente no hace nada con las combinaciones de tokens, esa tarea queda para el parser.

Por ejemplo un analizador lexico tipico reconoce los parentesis como tokens, pero no hace nada por asegurarse que cada ‘(‘ corresponda a un ‘)’. Los tokens se definen frecuentemente por expresiones regulares, las cuales son procesadas por un analizador lexico. El analizador lexico, lee en una cadena de caracteres, identifica los lexemas y los categoriza en tokens. Si encuentra un token invalido, se reportara el error. El proceso que le sigue es el de parsing o escaneo.

A partir de alli los datos interpretados pueden ser cargados en estructuras de datos para uso general, interpretacion o compilacion. VARIABLE: Son estructuras de datos que pueden cambiar de contenido a lo largo de la ejecucion de un programa. Una variable corresponde a un area reservada en la memoria principal (RAM) del ordenador pudiendo ser de longitud fija o variable. Fija cuando el tamano de la misma no variara a lo largo de la ejecucion del programa. Todas las variables tienen longitud fija, salvo algunas excepciones como las cadenas o arreglos.

Cuando son de longitud variable el tamano de la misma puede variar a lo largo de la ejecucion. Tipicamente colecciones de datos Una variable puede representar cualquier tipo de dato que sea almacenado en un equipo de computo, desde un simple dato booleano (verdadero/falso), nombres, imagines, sonidos, grandes segmentos de audio/video, arreglos de informacion describiendo entidades multi-dimensionales y su comportamiento. Ejemplos clasicos son cantidades de dinero, contadores, totales y subtotales, campos alfanumericos, y textos descriptivos.

Una variable tiene 3 atributos esenciales: un nombre simbolico (tambien llamado identificador), una locacion de los datos (generalmente en almacenamiento o memoria, direccion y longitud), y el valor, representado por el contenido de datos en dicha locacion. Estos atributos se asignan en tiempos separados durante la ejecucion del programa. Las variables a menudo tienen otro atributo un tipo o clase el cual especifica el tipo de informacion que la variable almacena. El tipo afecta el formato en el cual es almacenada, la cantidad de memoria que ocupa y la forma en la que los contenidos seran manipulados, interpretados y expresados.

Una variable puede ser clasificada como numerica o no numerica, o definida en varios subtipos (Entera, decimal, flotante, String, boolean etc…), y en varios rangos y tamanos conteniendo valores unicos o multiples, dependiendo de lo que soporte el lenguaje de programacion. Mientras que el nombre de la variable, tipo y locacion permanecen fijos, los datos almacenados en dicha locacion pueden ser alterados durante la ejecucion del programa, causando que su valor carie, de ahi el nombre.

Una variable se referencia por un nombre simbolico, en los lenguajes de programacion contemporaneos identificadores diferentes pueden referirse a la misma variable su locacion y contenidos. CONCLUSION TOKEN vs. VARIABLE| Similitudes| Diferencias| * Apartir de los tokens se pueden reconocer las variables| * Una variable es una representacion de un dato, el token permite que se pueda reconocer en un lenguaje fuente que ha sido definida cierta variable. * Todos los tokens no son necesariamente variables, hay tokens de operadores, estructuras de control, simbolos entre otros. |

Los tokens nos sirven en la fase de analisis lexico como insumo fundamental para la traduccion de un codigo fuente, Las variables y otros elementos como estructuras de control, identificadores, operadores, simbolos entre otros, se identifican a partir de los tokens, que ingresan al proceso de traduccion llamese interpretacion o compilacion, y posteriormente pasan al analizador sintactico y semantico donde cobran un valor real, para posteriormente asignarles direcciones de memoria, alojar su contenido en la memoria del computador, o ejecutar los procedimientos correspondientes.

Los tokens podrian definirse como una cadena de caracteres que tiene un significado coherente para determinado lenguaje de programacion. Las variables son un concepto diferente al de los tokens, ya que las variables son estructuras de datos que pueden cambiar de contenido a lo largo de la ejecucion de un programa. Una variable corresponde a un area reservada en la memoria principal del computador pudiendo, son representaciones de direcciones de memoria y los contenidos que alli puedan ubicarse. 3. DIAGRAMA DE CARRILERA vs. DIAGRAMA DE TRANSICION O ESTADOS DIAGRAMA DE CARRILERA / SINTAXIS:

Los diagramas de sintaxis o de carrilera (railroad diagrams) son una manera de representar una gramatica libre de contexto, representan una alternativa grafica a el BNF, (Backus–Naur Form o EBNF). Los primeros libros que usaron estos diagramas fueron “Pascal User Manial” escrito por Niklaus Wirth. Los diagramas sintacticos son una forma grafica de expresar la BNF extendida. Cada regla esta representada por un camino que va desde la entrada ubicada a la izquierda, hasta la salida, ubicada a la derecha. Cualquier trayecto desde la entrada a la salida representa un string generado por esa regla.

Las categorias sintacticas (no-terminales) se representan por rectangulos y los simbolos terminales por circulos u ovalos. En el campo de la compilacion, las representaciones textuales como el BNF o sus variantes son usualmente preferidas. El BNF es bien comprendido por los escritores y por los compiladores, pero no es bien entendido por la mayoria de los usuarios de los lenguajes. Los diagramas de carrileras son mejor comprendidos y mas legibles para la mayoria de las personas. La representacion de la gramatica esta compuesta de un conjunto de diagramas de sintaxis.

Cada diagrama define una no-terminal. Hay un diagrama principal el cual define el lenguaje de la siguiente manera: para pertenecer al lenguaje una palabra debe describir un camino en el diagrama principal. Cada diagrama tiene un punto de entrada y uno de fin. El diagrama describe los caminos posibles entre estos dos referentes yendo a traves de puntos no terminales y terminales. Las terminales son representadas por cajas redondas mientras las no terminales por cajas cuadradas. Ejemplo: DIAGRAMA DE TRANSICION / ESTADOS: Es usado para describir el comportamiento de sistemas. Los diagramas de stado requieren que el sistema descrito sea compuesto de un numero finito de estados; algunas veces, este es el caso, otras veces esta es u abstraccion razonable. El comportamiento es analizado y representado en series de eventos, que podrian ocurrir en uno o mas estados posibles. “Cada diagrama representa objetos de una sola clase y sigue los diferentes estados de sus objetos a traves del sistema” Los diagramas de estado son usado para representar graficamente estados de maquinas finitas. Estos diagramas fueron presentados por Taylor Booth en su libro “Sequential Machines and Automata Theory” en 1967.

Otra posible representacion es el Estado en una tabla de transiciones. Son grafos dirigidos que especifican el reconocimiento de un token como elemento del lenguaje. En un diagrama de transicion (DT) se compila un token. Las partes principales son: Estado inicial Estado Estado final Transicion Arista Se dice que un token se compila en un DT, si este es reconocido o cumple una ruta desde el estado inicial hasta un estado de aceptacion (estado final). DT basicos: * ER: a | b L (a | b) = L(a) | L(b) = {a,b} * ER: ab L (ab) = L(a) L(b) = {ab} * ER: a*

L (a*) = L(a)* = {?, a, aa, aaa, aaaa, … } * ER: a+ L (a+) = L(a)+ = {a, aa, aaa, aaaa, … } a+ ? aa* CONCLUSION DIAGRAMA DE CARRILERA vs. DIAGRAMA DE TRANSICION O ESTADOS| Similitudes| Diferencias | * Ambos se usan para representar de manera grafica etapas del proceso de traduccion de un lenguaje de programacion. | * El diagrama de carrilera o sintaxis, se usa principalmente para representar la gramatica del lenguaje * El diagrama de estados/transicion se usa para representar el reconocimiento de tokens como elementos del lenguaje|

En la etapa de diseno de un compilador es importante contar con herramientas que de manera grafica nos ayuden a comprender lo que se desea realizar en el lenguaje de programacion determinado, para establecer las reglas de gramatica, existen herramientas como el BNF que es una manera textual de describir las reglas y estamentos, tambien el diagrama de carrilera o sintaxis que de manera grafica nos permite estipular las reglas de sintaxis que debera seguir el lenguaje.

Para escribir compiladores es mas utilizado el BNF, pero para efectos de aprendizaje se obtienen mejores resultados con el diagrama de carrilera. Por otra parte los diagramas de estados/transicion permiten establecer los procedimientos y los momentos en los que se ejecuta el reconocimiento de tokens pertenecientes a determinado lenguaje de programacion; son grafos dirigidos que especifican el reconocimiento de un token como elemento del lenguaje. 4. GENERADOR DE CODIGOS vs. GENERADOR DE APLICACIONES GENERADOR DE CODIGOS:

Es el proceso por el cual un compilador convierte una representacion interna de codigo fuente en un formato por ejemplo codigo maquina que puede ser ejecutado facilmente por una maquina generalmente un computador. Los compiladores sofisticados tipicamente realizan multiples pasadas sobre formatos intermedios. Este proceso multi-etapa es usado porque varios algoritmos para la optimizacion de codigo son mas faciles de implementar uno a la vez, o porque la entrada a una optimizacion se apoya en el proceso realizado por una optimizacion anterior.

Esta organizacion tambien facilita la creacion de un solo compilador que puede servir para varias arquitecturas, ya que solo las ultimas etapas de generacion de codigo necesitan cambiar de objetivo a objetivo. La entrada al generador de codigos consiste generalmente en un arbol de escaneo, o un arbol de sintaxis abstracto. El arbol es convertido a una secuencia lineal de instrucciones, usualmente en un lenguaje intermedio como el codigo de direcciones de arbol.

En etapas posteriores de la compilacion pueden o no estar referenciadas como generacion de codigo, dependiendo de si involucran un cambio significativo en la representacion del programa. Las tareas que son parte tipica de una fase de generacion de codigo en un compilador incluyen: * Seleccion de instrucciones: Que instrucciones usar. * Agendamiento de instrucciones: En que orden poner dichas instrucciones. Es una rapida optimizacion. * Alojamiento de registros: Alojamiento de las variables a los registros del procesador. GENERADOR DE APLICACIONES:

Se refiere a software que genera programas de aplicacion a partir de descripciones del problema en lugar de hacerlo desde una programacion tradicional. Esta a un nivel mas alto que un lenguaje de programacion de alto nivel como COBOL o C/C++. Una sentencia o linea descriptiva puede generar una enorme rutina o todo un programa. Los generadores usados para el desarrollo de programas complejos permiten la programacion de estructuras del tipo if-then-else ser expresadas por la simple descripcion de las entradas y las salidas requeridas.

Los resultados pueden ser lentos a la hora de ejcutarlos. El problema radica en que el codigo generado en ocasiones no es optimo y que ciertas funciones sencillamente no pueden ser ejecutadas en absoluto. Como resultado los programas comerciales raramente se escriben en estos lenguajes. Los generadores de aplicaciones son usados para los negocios o sistemas de informacion, pero a menudo solamente para la creacion de prototipos que despues seran programados en lenguajes como C++ o JAVA.

El Generador de aplicaciones se integra con los archivos del marco de aplicaciones que crea el Asistente para aplicaciones, de forma que le permite llevar a cabo las siguientes operaciones: * Agregar, modificar o quitar componentes especificos de la aplicacion, tales como tablas, formularios e informes. * Especificar estilos visuales para los formularios e informes. * Agregar elementos comunes de las aplicaciones como son la pantalla de bienvenida, un cuadro de dialogo Acerca de, un menu Favoritos, un cuadro de dialogo de Inicio de sesion de usuario y una barra de herramientas estandar. Especificar los titulos de credito y la informacion de version de la aplicacion. * Ver una base de datos de la ficha Datos CONCLUSION GENERADOR DE CODIGOS vs. GENERADOR DE APLICACIONES| Similitudes| Diferencias| * Tanto el generador de codigo como el generador de aplicaciones ayudan en la creacion de codigo. | * El generador de codigo se encarga de optimizar codigo antes de encadenarlo, mientras que el generador de aplicaciones crea un programa desde su codigo fuente y lo compila. El generador de aplicaciones es un Software que genera programas de aplicacion a partir de descripciones del problema en lugar de hacerlo desde una programacion tradicional. | En la produccion de codigo fuente suelen existir errores de implementacion de la logica de los algoritmos, asi que en esos casos es de ayuda el generador de codigos el cual optimiza dicho codigo para que a la hora de ser traducido a lenguaje maquina se ejecute mas rapido, para la generacion de codigo, se busca en las reglas establecidas, la proposicion que coincida con la entrada actual; la entrada actual proviene de un arbol.

Entonces el compilador recibe una entrada de caracteres, por lo general escrita por el programador; el compilador realiza los analisis: lexico, sintactico y semantico, para generar seguidamente el codigo intermedio, el codigo intermedio se genera con principios de busqueda de patrones y aplicacion de reglas. Despues se hace la optimizacion del codigo intermedio; seguidamente se realiza la generacion de codigo objeto en lenguaje de maquina. El uso de un generador de aplicaciones puede reducir el tiempo que se necesita para disenar un programa de aplicacion. Los generadores de plicaciones constan de procedimientos que realizan las funciones fundamentales que se utilizan en la mayoria de los programas. En pocas palabras ambos nos brindan facilidades a la hora de crear un programa o aplicacion. 5. LENGUAJE DE BAJO NIVEL vs. LENGUAJE DE ALTO NIVEL LENGUAJE DE BAJO NIVEL: Es un lenguaje de programacion que provee poca abstraccion al conjunto de instrucciones de la arquitectura del computador. La palabra bajo se refiere a pequenas o nulas cantidades de abstraccion entre un lenguaje y el lenguaje maquina; a causa de esto, los lenguajes de bajo nivel son descritos como cerrados al hardware.

Un lenguaje de bajo nivel no necesita un compilador o interprete para correr; el procesador para el cual el lenguaje fue escrito es capaz de ejecutar el codigo sin usar ninguno de los mencionados anteriormente. Los lenguajes de programacion de bajo nivel se dividen en primera generacion, es el lenguaje de codigo maquina. Es el unico lenguaje que un microprocesador entiende de forma nativa. El lenguaje maquina no puede ser escrito o leido usando un editor de texto, y por lo tanto es raro que una persona lo use directamente. Y de segunda generacion 2GL es el lenguaje ensamblador.

Es el que proporciona un conjunto de instrucciones aritmetico-logicas sin la capacidad de encapsular dichas instrucciones en funciones que no esten ya contempladas en la arquitectura del hardware. Los lenguajes de bajo nivel son mas faciles de utilizar que los lenguajes maquina, pero, al igual que ellos, dependen de la maquina en particular. El lenguaje de bajo nivel por excelencia es el Assembler. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotecnicos. Por ejemplo, nemotecnicos tipicos de operaciones aritmeticas son: en ingles, ADD, SUB, DIV.

Un programa escrito en un lenguaje ensamblador tiene el inconveniente de que no es comprensible para la computadora, ya que, no esta compuesto por ceros y unos. Para traducir las instrucciones de un programa escrito en un lenguaje ensamblador a instrucciones de un lenguaje maquina hay que utilizar un programa ensamblador. LENGUAJE DE ALTO NIVEL: El lenguaje de alto nivel aquel que se aproxima mas al lenguaje natural humano que al lenguaje binario de las computadoras, el que se conoce como lenguaje de bajo nivel. Posee una fuerte abstraccion de los detalles del computador.

Esta gran abstraccion y ocultamiento de detalles se hace para hacer al lenguaje amigable con el usuario, ya que incluye coneptos desde el dominio del problema encambio de los que usa la maquina. Un lenguaje de alto nivel aleja la semantica de ejecucion de la arquitectura del computador de las especificaciones del programa, haciendo el proceso de desarrollo un programa simple y mas entendible con respecto a los detalles involucrados en un lenguaje de bajo nivel. En la medida que se aumenta dicha abstraccion se aumenta el nivel del lenguaje.

Su funcion principal radica en que a partir de su desarrollo, existe la posibilidad de que se pueda utilizar el mismo programa en distintas maquinas, es decir que es independiente de un hardware determinado. La unica condicion es que la PC tenga un programa conocido como traductor o compilador, que lo traduce al lenguaje especifico de cada maquina. Al utilizar palabras del lenguaje humano (por lo general el ingles) es mas practico y facil de manipular para el programador de manera que no corre tantos riesgos de equivocarse como si es mas factible de caer en el error con el binario.

De esta manera, el programador puede concentrarse mas en el programa en si que en el lenguaje y, por otra parte, se reducen los tiempos de creacion del programa, incluso en caso de que tenga que hacer modificaciones, son mucho mas faciles de hacer. En la actualidad existe gran diversidad de ellos (RUBY, PHP, PASCAL, BASIC, FORTRAN, C++, COBOL entre muchos otros). En los primeros lenguajes de alto nivel la limitacion era que se orientaban a un area especifica y sus instrucciones requerian de una sintaxis predefinida. CONCLUSION LENGUAJE DE BAJO NIVEL vs. LENGUAJE DE ALTO NIVEL| Similitudes| Diferencias| Tanto el lenguaje de bajo nivel como el lenguaje de alto nivel sirven para realizar variadas operaciones, y con ellos crear programas o aplicaciones. * Ambos proporcionan instrucciones para llevarlas a cabo para cumplir un proposito mediante el uso de un dispositivo tecnologico. | * El lenguaje de bajo nivel esta mas proximo a lo que entiende la maquina y el lenguaje de alto nivel mas proximo a lo que entiende el ser humano. * El lenguaje de alto nivel debe ser compilado necesariamente el de bajo nivel puede ser ejecutado sin realizarse un proceso de compilacion o interpretacion. En el lenguaje de Alto nivel el tiempo de formacion de los programadores es relativamente corto comparado con otros lenguajes. * El lenguaje de alto nivel puede solucionar un problema de procesamiento de datos de una manera mas facil y rapida. | Un lenguaje de alto nivel aleja la semantica propia de la arquitectura del computador de las especificaciones del programa haciendo el proceso de desarrollo mas sencillo. Los lenguajes de bajo nivel por lo contrario usan mas detalles y especifican mas la forma como la maquina realiza la ejecucion de los programas, el nivel de un lenguaje esta dado por la abstraccion que realiza de dichos detalles.

Los lenguajes de programacion no son simplemente un detalle mas del amplio mundo de la informatica, sino que deben ser vistos como el fundamento la base del desarrollo y avance de la computacion. Estudiar los conceptos basicos, clasificacion, diferencias, propiedades y funcionamiento de los lenguajes de programacion es elemental para cualquier estudiante o profesional dedicado a la computacion, pues de esa manera se logra tener una perspectiva global y mucho mas amplia de la implementacion de determinado lenguaje y sus aplicaciones. 6. LIBRERIA vs. BIBLIOTECA LIBRERIA / BIBLIOTECA:

Es una coleccion de subrutinas o clases usadas para desarrollar software. Las bibliotecas contienen codigo y datos, que proporcionan servicios a programas independientes, es decir, pasan a formar parte de estos. Esto permite que el codigo y los datos se compartan y puedan modificarse de forma modular. Algunos programas ejecutables pueden ser a la vez programas independientes y bibliotecas, pero la mayoria de estas no son ejecutables. Ejecutables y bibliotecas hacen referencias (llamadas enlaces) entre si a traves de un proceso conocido como enlace, que por lo general es realizado por un software denominado enlazador.

La mayoria de los sistemas operativos modernos proporcionan bibliotecas que implementan la mayoria de los servicios del sistema. De esta manera, estos servicios se convierten en los insumos que cualquier aplicacion moderna espera que el sistema operativo ofrezca. Como tal, la mayor parte del codigo utilizado por las aplicaciones modernas se ofrece en estas bibliotecas o librerias. En general una libreria es un conjunto de recursos. Normalmente es codigo que contiene funciones que son frecuentemente utilizadas y que no necesita ser modificado. Cuando se desarrollan aplicaciones se utilizan diversas librerias.

El codigo correspondiente a esas librerias que se usan (y no el codigo de las que no se usan) se anade al programa principal cuando se compila esto tiene la ventaja de que el programa solo va a contener el codigo necesario. Los archivos de cabecera, o las bibliotecas, son paginas de codigo, a veces legible y otra veces solo ejecutable, segun el idioma de programacion, y en el se declaran funciones y procedimientos, los cuales al ser llamados (con o sin argumento) hacen una determinada tarea o devuelven un valor. Una Biblioteca es un conjunto de subprogramas utilizados para desarrollar software.

Las bibliotecas se dividen en categorias: Bibliotecas estaticas: consiste en un conjunto de rutinas que se copian en una aplicacion por el compilador o el enlazador, produciendo archivos con codigo objeto y un fichero ejecutable independiente. Este proceso, y el archivo ejecutable, se conoce como una construccion estatica de la aplicacion objetivo. Bibliotecas dinamicas: las subrutinas de una biblioteca son cargadas en un programa en tiempo de ejecucion, en lugar de ser enlazadas en tiempo de compilacion, y se mantienen como archivos independientes separados del fichero ejecutable del programa principal.

El enlazador realiza una minima cantidad de trabajo en tiempo de compilacion, registra que rutinas de la biblioteca necesita el programa y el indice de nombres o numeros de las rutinas en la biblioteca. La mayor parte de la labor de enlazado se realiza en el momento en que la aplicacion se carga (tiempo de carga o loadtime) o durante la ejecucion (tiempo de ejecucion o runtime). Una de las mayores desventajas del enlace dinamico es que el funcionamiento correcto de los ejecutables depende de una serie de bibliotecas almacenadas de forma aislada.

Si la biblioteca es borrada, movida o renombrada, o si una version incompatible de DLL es copiada en una ubicacion que aparece antes en la ruta de busqueda, el ejecutable no se podra cargar. En Windows esto se conoce como DLL hell. CONCLUSION LIBRERIA vs. BIBLIOTECA| Similitudes| Diferencias| * El termino hace referencia al mismo significado coleccion de subrutinas o clases utilizadas para desarrollar software. * Segun algunos academicos la biblioteca esta compuesta por librerias| * La palabra libreria es una mala acepcion del idioma ingles, lo correcto es usar el termino biblioteca. Las librerias son de gran ayuda a la hora de realizar programas ya que nos evitan el tener que realizar las mismas funciones una y otra vez, con ellas se comparten piezas de codigo que pueden ser reutilizadas y asi disminuir los tiempos de desarrollo haciendo que los programadores se dediquen unicamente a codificar la logica de negocio o del proposito que esta realizando y no desgastarse realizando funciones que ya han sido implementadas muchas veces por otras personas.

Ademas esto permite la modularizacion del codigo y facilita su mantenimiento. Segun algunos academicos las librerias son los llamados especificos a ciertos bloques de codigo especificos y las bibliotecas son el conjunto de librerias. Habitualmente se emplea el termino libreria para referirse a una biblioteca, por la similitud con el original ingles library.

Ambos terminos, biblioteca y libreria, son correctos segun las definiciones (biblioteca, libreria ) de la RAE, aunque en terminos formales, la acepcion correcta es biblioteca, porque es la traduccion correcta de library, mientras que el termino ingles para libreria es bookstore o book shop (literalmente: tienda de libros), o bien bookshelf (estanteria o mueble para guardar libros, libreria o librero). Tambien es habitual referirse a ella con el termino de origen anglosajon toolkit (conjunto, equipo, maletin, caja, estuche, juego (kit) de herramientas).

Asi, a pesar de que el termino libreria se haya difundido en ambitos informales, no es estrictamente correcto. 7. PROCEDIMIENTO O FUNCION vs. SUBPROGRAMA PROCEDIMIENTO / FUNCION: Un procedimiento es un bloque de codigo nombrado como una subrutina, pero con algunas caracteristicas adicionales. Por ejemplo puede aceptar parametros. Tradicionalmente un procedimiento retorna un valor llamado una funcion sin embargo, muchos lenguajes modernos utilizan la palabra procedimiento para referirse a funciones o bloques de codigo etiquetados.

Un procedimiento es un subprograma que realiza una determinada accion. A diferencia de las funciones, un procedimiento no tiene como objetivo devolver un valor obtenido por calculo. Un procedimiento es una forma de subprograma que agrupa una sentencia o grupo de sentencias que realizan una accion, y permiten darles un nombre por el que se puedan identificar posteriormente. Estas sentencias se pueden parametrizar mediante una serie de argumentos. En la definicion de un procedimiento pueden usarse tambien sentencias de retorno, pero con un significado algo diferente que en el caso de las funciones.

RETURN. Ahora se escribe sin ninguna expresion que lo acompane, ya que no tiene que devolver ningun valor. La diferencia principal entre procedimiento y funcion es que no se declara el tipo de valor del resultado, ya que no existe. SUBPROGRAMA: Una subrutina (tambien llamada procedimiento, metodo funcion o rutina) es una porcion de codigo dentro de un gran programa que ejecuta una tarea especifica y es relativamente independiente del resto del codigo.

Como el nombre lo dice “subprograma”, una subrutina se comporta como un programa de computador usado como un paso dentro de un gran programa, u otro programa. Una subrutina se codifica de manera tal que pueda ser llamada varias veces y desde diferentes lugares, durante una ejecucion del programa, incluyendo otras subrutinas, y despues retornar a la siguiente instruccion despues de la llamada, una vez la tarea la subrutina se haya completado. Las subrutinas son poderosas herramientas de programacion, y la sintaxis de varios lenguajes de programacion incluyen soporte para escribir y usarlas.

El uso de subrutinas (como lo es el objetivo de la programacion estructurada) reducira el costo de desarrollo y mantenimiento de un gran programa e incrementaran su calidad y confiabilidad. Las subrutinas son coleccionadas en Bibliotecas, y son un importante mecanismo para compartir e intercambiar software. La programacion orientada a objetos se basa en “objetos” y metodos los cuales no son mas que subrutinas ligadas a esos objetos o clases. En la tecnica de compilacion llamada “threaded code, o codigo por hilos” el programa ejecutable es basicamente una secuencia de subrutinas.

Un subprograma es una parte de un programa que se desarrolla por separado y se utiliza invocandolo mediante un nombre simbolico. CONCLUSION PROCEDIMIENTO O FUNCION vs. SUBPROGRAMA| Similitudes| Diferencias | * Son bloques de codigo utilizados para ejecutar tareas especificas y que pueden ser llamados desde diferentes partes de un programa. * Facilitan el mantenimiento del codigo fuente ya que se presta mas para la modularidad, lo que facilita la correccion de errores. Ambos pueden ser almacenados en bibliotecas| * A diferencia de las funciones, un procedimiento no tienen siempre como objetivo devolver un valor obtenido por calculo * Un subprograma puede contener funciones y/o procedimientos como parte de su codigo. | Tanto los procedimientos o funciones como los subprogramas o subrutinas lo que hacen es trabajar bajo la premisa divide y venceras, se solucionan problemas complejos al dividirlos en subprogramas y luego dividirlos estos en otros mas simples, hasta que estos sean mas faciles de resolver.

El problema principal denominado controlador o conductor (drive) y la solucion de los subproblemas conocidos como procedimientos (subrutinas) o funciones. Esta tendencia comenzo con los paradigmas de diseno estructurado y ha evolucionado hasta lo que hoy conocemos como diseno orientado a objetos y su aplicacion practica conocida como Programacion Orientada a Objetos, en donde se tienen una serie de clases las cuales pueden ser invocadas en cualquier parte del programa y con ellas los metodos de dichas clases. . TABLA DE SIMBOLOS vs. PALABRAS RESERVADAS TABLA DE SIMBOLOS: Es una estructura de datos usada por un traductor de lenguaje tal como un compilador o un interprete, donde cada identificador en un programa fuente esta asociado con la informacion relacionada a su declaracion o aparicion en el fuente, tal como su tipo, nivel de ambito y su ubicacion. Una implementacion comun de una tabla de simbolos puede ser una tabla hash, la cual sera mantenida a lo largo de todas las fases del proceso de compilacion.

Puede tratarse como una estructura transitoria o volatil, que sea utilizada unicamente en el proceso de traduccion de un lenguaje de programacion, para luego ser descartada, o integrada en la salida del proceso de compilacion para una explotacion posterior, como puede ser por ejemplo, durante una sesion de depuracion, o como recurso para obtener un informe de diagnostico durante o despues la ejecucion de un programa. Los simbolos en la tabla de simbolos pueden referirse a constantes, a funciones o a tipos de datos en el codigo fuente de un programa. Usos: Un archivo bjeto contendra una tabla de simbolos de los identificadores que contiene, que son externamente visibles. Durante el encadenamiento de diferentes archivos objeto, un encadenador usara la tabla de simbolos para resolver cualquier referencia no resuelta. Una tabla de simbolos puede existir unicamente durante el proceso de traduccion, o puede ser embebida en la salida de ese proceso para una exploracion posterior, como por ejemplo una sesion interactiva de depuracion, o como una fuente para dar formato y diagnosticar reportes durante o despues de la ejecucion de un programa.

En general en la TDS se realizan dos operaciones: la insercion y la busqueda. En C la operacion de insercion se realiza cuando se procesa una declaracion. Hay dos posibilidades: que la TS este ordenada (o sea, nombres de variables por orden alfabetico) o que no este ordenada. Si esta ordenada, entonces la operacion de insercion llama a un procedimiento de busqueda para encontrar el lugar donde colocar los atributos del identificador a insertar, por lo que en este caso la insercion lleva tanto tiempo como la busqueda.

En cambio, si no esta ordenada la TDS, la insercion se simplifica mucho aunque se complica la busqueda, pues debe examinar toda la tabla. En la busqueda, se detectan los identificadores que no hayan sido declarados previamente, emitiendo un mensaje de error si se encuentran simbolos que no esten dentro de la tabla. PALABRAS RESERVADAS: Son un tipo de construccion gramatical en los lenguajes de programacion. Estas palabras tienen significado especial para el lenguaje, y estan predefinidas en las especificaciones formales del lenguaje.

Tipicamente las palabras reservadas incluyen etiquetas para los tipos primitivos de datos en lenguajes que soportan tipos de datos, e identifica constructores de programacion como ciclos, bloques, condicionales y ramificaciones. La lista de palabras reservadas en un lenguaje esta definida cuando un lenguaje es desarrollado. Ocasionalmente, dependiendo de la flexibilidad de las especificaciones del lenguaje, los fabricantes de los compiladores pueden extender las especificaciones incluyendo caracteristicas no estandar.

Las palabras reservadas no pueden ser redefinidas por el programador, como si se puede con las funciones predefinidas metodos o subrutinas, las cuales a menudo son sobrescritas. El nombre de funcion predefinida, metodo o subrutina esta categorizado como un identificador en vez de con una palabra reservada. CONCLUSION TABLA DE SIMBOLOS vs. PALABRAS RESERVADAS| Similitudes| Diferencias | * Son elementos que se tienen en cuenta a la hora de traducir un programa. * Las palabras reservadas se tienen en cuenta en una primera etapa de la traduccion llamese interpretacion o compilacion, y la Una tabla de simbolos puede existir unicamente durante el proceso de traduccion, o puede ser embebida en la salida de ese proceso para una exploracion posterior. * La tabla de simbolos incluye palabras reservadas, y ademas identificadores, operadores y otros elementos declarados en el codigo fuente|

En los lenguajes de programacion, una palabra reservada es una cadena de caracteres que tiene un significado gramatical especial y no puede ser utilizada como un identificador en ese lenguaje por otro lado la tabla de simbolos engloba otros identificadores y elementos adicionales a las palabras reservadas propios de cada programa de cada fuente y es de gran utilidad en el analisis lexico y sintactico a la hora de realizar una traduccion de lenguajes, ya que reconoce los identificadores plasmados en el fuente para ser tenidos en cuenta en el proceso de traduccion ya sea compilacion o interpretacion. . ESTRUCTURA DE DATOS vs. ESTRUCTURAS DE COMPILACON ESTRUCTURA DE DATOS: Son usadas en la mayoria de software. Las estructuras de datos especificas son ingredientes esenciales para la construccion de algoritmos eficientes, y hacen posible la gestion de grandes cantidades de datos, tales como bases de datos y servicios de indexado de internet. Algunos metodos formales de diseno y lenguajes de programacion enfatizan en las estructuras de datos, mas que en los algoritmos, como el factor clave para el diseno de software.

Diferentes clases de estructuras de datos se utilizan dentro de diversas aplicaciones, y algunas son altamente especializadas para tareas especificas. Por ejemplo los arboles binarios, son altamente utilizados en bases de datos, y para los compiladores son altamente utilizados las tablas de hash estas se implementan para buscar identificadores. Una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulacion. Un dato elemental es la minima informacion que se tiene en un sistema.

Las estructuras de datos estan basadas en la habilidad de un computador para recoger y almacenar datos en cualquier lugar en su memoria, especificados por una direccion una cadena de bits que puede ser almacenada en memoria y manipulada por el programa. La implementacion de una estructura de datos generalmente requiere escribir un conjunto de procedimientos que crearan y manipularan las instancias de dicha estructura. La eficiencia de una estructura de datos no puede ser analizada por separado de dichas operaciones.

Esta observacion motiva el concepto teorico de tipo de datos, una estructura esta definida indirectamente por las operaciones que pueden ser ejecutadas sobre ella, y las propiedades matematicas de esas operaciones incluyendo su espacio y costo de tiempo. Una estructura de datos define la organizacion e interrelacion de estos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones basicas son: * Ingreso: adicionar un nuevo valor a la estructura. * Eliminacion: borrar un valor de la estructura. Busqueda: encontrar un determinado valor en la estructura para realizar una operacion con este valor, en forma secuencial o binaria (siempre y cuando los datos esten ordenados). Otras operaciones que se pueden realizar son: * Ordenamiento: de los elementos pertenecientes a la estructura. * Apareo: dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas. Los diferentes tipos de estructura ofrecen ventajas y desventajas en relacion a la simplicidad y eficiencia para la realizacion de cada operacion.

De esta forma, la eleccion de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operacion sobre los datos contenidos en ellas. Dependiendo del numero de punteros y de las relaciones entre nodos, podemos distinguir varios tipos de estructuras dinamicas. Enumeraremos ahora solo de los tipos basicos: * Listas abiertas: cada elemento solo dispone de un puntero, que apuntara al siguiente elemento de la lista o valdra NULL si es el ultimo elemento. Pilas: son un tipo especial de lista, conocidas como listas LIFO (Last In, First Out: el ultimo en entrar es el primero en salir). Los elementos se “amontonan” o apilan, de modo que solo el elemento que esta encima de la pila puede ser leido, y solo pueden anadirse elementos encima de la pila. * Colas: otro tipo de listas, conocidas como listas FIFO (First In, First Out: El primero en entrar es el primero en salir). Los elementos se almacenan en fila, pero solo pueden anadirse por un extremo y leerse por el otro. * Listas circulares: o listas cerradas, son parecidas a las listas abiertas, pero el ultimo elemento apunta al primero.

De hecho, en las listas circulares no puede hablarse de “primero” ni de “ultimo”. Cualquier nodo puede ser el nodo de entrada y salida. * Listas doblemente enlazadas: cada elemento dispone de dos punteros, uno a punta al siguiente elemento y el otro al elemento anterior. Al contrario que las listas abiertas anteriores, estas listas pueden recorrerse en los dos sentidos. * Arboles: cada elemento dispone de dos o mas punteros, pero las referencias nunca son a elementos anteriores, de modo que la estructura se ramifica y crece igual que un arbol. * Arboles binarios: son arboles donde cada nodo solo puede apuntar a dos nodos. Arboles binarios de busqueda (ABB): son arboles binarios ordenados. Desde cada nodo todos los nodos de una rama seran mayores, segun la norma que se haya seguido para ordenar el arbol, y los de la otra rama seran menores. * Arboles AVL: son tambien arboles de busqueda, pero su estructura esta mas optimizada para reducir los tiempos de busqueda. * Arboles B: son estructuras mas complejas, aunque tambien se trata de arboles de busqueda, estan mucho mas optimizados que los anteriores. * Tablas HASH: son estructuras auxiliares para ordenar listas. * Grafos: es el siguiente nivel de complejidad, odemos considerar estas estructuras como arboles no jerarquizados. * Diccionarios. ESTRUCTURAS DE COMPILACION: Permite demostrar que una secuencia de caracteres es una determinada categoria sintactica dentro de las principales estructuras de compilacion tenemos las tablas has y los arboles sintacticos. Una tabla hash o mapa hash es una estructura de datos que asocia llaves o claves con valores. La operacion principal que soporta de manera eficiente es la busqueda: permite el acceso a los elementos (telefono y direccion, por ejemplo) almacenados a partir de una clave generada (usando el nombre o numero de cuenta, por ejemplo).

Funciona transformando la clave con una funcion hash en un hash, un numero que la tabla hash utiliza para localizar el valor deseado. Las tablas hash se suelen implementar sobre vectores de una dimension, aunque se pueden hacer implementaciones multi-dimensionales basadas en varias claves. Como en el caso de los arrays, las tablas hash proveen tiempo constante de busqueda promedio O(1),1 sin importar el numero de elementos en la tabla. Sin embargo, en casos particularmente malos el tiempo de busqueda puede llegar a O(n), es decir, en funcion del numero de elementos.

Comparada con otras estructuras de arrays asociadas, las tablas hash son mas utiles cuando se almacenan grandes cantidades de informacion. Las tablas hash almacenan la informacion en posiciones pseudo-aleatorias, asi que el acceso ordenado a su contenido es bastante lento. Otras estructuras como arboles binarios auto-balanceables son mas rapidos en promedio (tiempo de busqueda O(log n)) pero la informacion esta ordenada en todo momento. Las operaciones basicas implementadas en las tablas hash son: * insercion(llave, valor) busqueda(llave) que devuelve valor La mayoria de las implementaciones tambien incluyen borrar(llave). Tambien se pueden ofrecer funciones como iteracion en la tabla, crecimiento y vaciado. Algunas tablas hash permiten almacenar multiples valores bajo la misma clave. Para usar una tabla hash se necesita: * Una estructura de acceso directo (normalmente un array). * Una estructura de datos con una clave * Una funcion resumen (hash) cuyo dominio sea el espacio de claves y su imagen (o rango) los numeros naturales.

El arbol sintactico por lo regular se construye como una estructura estandar basada en un puntero que se asigna de manera dinamica a medida que se efectua el analisis sintactico. El arbol entero puede entonces conservarse como una variable simple que apunta al nodo raiz. Cada nodo en la estructura es un registro cuyos campos representan la informacion recolectada tanto por el analizador sintactico como, posteriormente, por el analizador semantico. Por ejemplo, el tipo de datos de una expresion puede conservarse como un campo en el nodo del arbol sintactico para la expresion.

En ocasiones, para ahorrar espacio, estos campos se asignan de manera dinamica, o se almacenan en otras estructuras de datos, tales como la tabla de simbolos, que permiten una asignacion y desasignacion selectivas. En realidad, cada nodo del arbol sintactico por si mismo puede requerir de atributos diferentes para ser almacenado, de acuerdo con la clase de estructura del lenguaje que represente. En este caso, cada nodo en el arbol sintactico puede estar representado por un registro variable, con cada clase de nodo conteniendo solamente la informacion necesaria para ese caso. CONCLUSION

ESTRUCTURA DE DATOS vs. ESTRUCTURAS DE COMPILACON| Similitudes| Diferencias | * Ambas almacenan informacion y parten del mismo concepto de estructura de datos * Sobre ambas estructuras se pueden ejecutar funciones de insercion y busqueda. | * Las estructuras de datos estan presentes en la mayoria de lenguajes de programacion para hacer abstracciones de entidades del mundo real, las estructuras de compilacion se utilizan unicamente durante el proceso de traduccion de un lenguaje de programacion y sirven para resolver identificadores que permiten resolver la sintaxis de determinado lenguaje. A la hora de realizar la abstraccion de un problema contamos con una poderosa ayuda llamada estructura de datos, la cual nos permiten simular el comportamiento del flujo de informacion y sus atributos haciendo alusion a entidades del mundo real, cuando se trata de estructuras de compilacion gualmente son usadas para almacenar los datos que requerimos para efectuar el analisis sintactico y gramatico del lenguaje de programacion que se desea traducir brindandonos ademas de la capacidad de almacenar informacion de manera organizada la posibilidad de ejecutar acciones particulares sobre cada una de ellas como la insercion eliminacion, busqueda ordenamiento, funciones que son de vital importancia en ambas situaciones las de compilacion y las de generacion de programas de aplicacion. REFERENCIAS BIBLIOGRAFICAS

Compiler textbook references A collection of references to mainstream Compiler Construction Textbooks Aho, Alfred V. ; Sethi, Ravi; and Ullman, Jeffrey D. , Compilers: Principles, Techniques and Tools (ISBN 0-201-10088-6) link to publisher. Conocido como el “Libro del Dragon” Phd R J Quirarte, Libreria vs Biblioteca, http://markmail. org/message/wmbiefpoln7lvg4n? q=libreria+vs+biblioteca&page=1&refer=wmbiefpoln7lvg4nAcalaracion sobre la mala utilizacion del termino libreria y biblioteca. Wikipedia Hash Table,http://en. wikipedia. rg/wiki/Hash_table Definicion de biblioteca: http://en. wikipedia. org/wiki/Library_(computing) Diagramas de carrilera: http://en. wikipedia. org/wiki/Syntax_diagram Generacion de codigos http://en. wikipedia. org/wiki/Code_generation_(compiler) Allen, Frances E. , “A History of Language Processor Technology in IBM”, IBM Journal of Research and Development, v. 25, no. 5, September 1981. Allen, Randy; and Kennedy, Ken, Optimizing Compilers for Modern Architectures, Morgan Kaufmann Publishers, 2001. ISBN 1-55860-286-0 Appel, Andrew Wilson

Modern Compiler Implementation in Java, 2nd edition. Cambridge University Press, 2002. ISBN 0-521-82060-X Modern Compiler Implementation in ML, Cambridge University Press, 1998. ISBN 0-521-58274-1 Bornat, Richard, Understanding and Writing Compilers: A Do It Yourself Guide, Macmillan Publishing, 1979. ISBN 0-333-21732-2 Terry, Patrick D. , Compilers and Compiler Generators: An Introduction with C++, International Thomson Computer Press, 1997. ISBN 1-85032-298-8, Wirth, Niklaus, Compiler Construction (ISBN 0-201-40353-6), Addison-Wesley, 1996, 176 pages. Revised

Cite this Conceptos de Compiladores

Conceptos de Compiladores. (2017, Jul 19). Retrieved from https://graduateway.com/conceptos-de-compiladores-34367/

Show less
  • Use multiple resourses when assembling your essay
  • Get help form professional writers when not sure you can do it yourself
  • Use Plagiarism Checker to double check your essay
  • Do not copy and paste free to download essays
Get plagiarism free essay

Search for essay samples now

Haven't found the Essay You Want?

Get my paper now

For Only $13.90/page