Académique Documents
Professionnel Documents
Culture Documents
Materia:
Fundamentos de Programación.
Producto Académico:
Investigación documental de la unidad I, tema:
“Editores de texto y Compiladores e intérpretes”
Presenta:
Jiménez García Guillermo, Galván Cruz Sergio Daniel,
Duran Toledo José Eduardo
Docente:
I.S.C. Gregorio Martínez Vásquez.
1
Índice
Índice ……………………………………………………………………………………………………… 2
Objetivo …………………………………………………………………………………………………… 3
Introducción ……………………………………………………………………………………………. 4
¿Qué es un editor de texto? …………………………………………………………………… 5
Historia ……………………………………………………………………………………………………. 5
Tipos de editores de texto ……………………………………………………………………….. 5
Uso de los editores de texto …………………………………………………………………….. 6
Compiladores …………………………………………………………………………………………… 7
Partes de un compilador ………………………………………………………………………….. 7
Historia de los compiladores ………………………………………………………............... 8
Tipos de compiladores ……………………………………………………………………………… 8
Proceso de compilación ……………………………………………………………………………. 9
Etapas del proceso …………………………………………………………………………………… 9
Intérpretes ………………………………………………………………………………………………. 11
2
Objetivo
Con este trabajo se busca comprender lo que es un editor de textos y los compiladores
e interpretes así como aprender la importancia de cada uno en programación y sus
aplicaciones.
3
Introducción
En este documento encontrara las principales funciones y características de los
editores de texto y compiladores e interpretes así como los tipos que cada uno tiene y
principales diferencias que tienen entre si.
4
¿Qué es un editor de texto?
Un editor de texto es un programa que permite crear y modificar archivos digitales
compuestos únicamente por texto sin formato, conocidos comúnmente como archivos
de texto o texto plano. El programa lee el archivo e interpreta los bytes leídos según
el código de caracteres que usa el editor. Hoy en día es comúnmente de 7- ó 8-bits
en ASCII o UTF-8, rara vez EBCDIC.
Por ejemplo, un editor ASCII de 8 bits que lee el número binario 0110 0001 (decimal
97 ó hexadecimal 61) en el archivo lo representará en la pantalla por la figura a, que el
usuario reconoce como la letra "a" y ofrecerá al usuario las funciones necesarias para
cambiar el número binario en el archivo.
El archivo creado por un editor de texto incluye por convención en DOS y Microsof
Windows la extensión ".txt", aunque pueda ser cambiada a cualquier otra con
posterioridad. Tanto Unix como Linux dan al usuario total libertad en la denominación
de sus archivos.
Historia
Antes que existieran los editores de texto, los datos y el código fuente de los programas
debía ser entregado a la máquina por medio de tarjetas perforadas. El programa, un
fajo de tarjetas, era leído por un lector de tarjetas perforadas. Cada carácter era
representado por una o más perforaciones en una columna de 8 o 10 posibles
perforaciones. No más de 80 caracteres podían ser representados en una tarjeta.
Con los teletipos aparecieron también los primeros editores de texto que en un
comienzo solo mostraban una línea del texto. Mandatos especiales movían el "cursor"
en las cuatro direcciones.
El siguiente paso se dio con la aparición del monitor de tubo de rayos catódicos que
permitió la edición a "pantalla completa" es decir mostrando varias líneas a la vez. El
aumento de productividad fue enorme, por la rapidez y simplicidad del mecanismo.
Uno de los primeros editores de texto fue O26, escrito para la consola del operador de
la serie de computadoras CDC 6000 a mediados de la década de 1960. Otro precursor
es el vi, escrito en la década de 1970 que aún es el estándar para los sistemas
operativos Unix y Linux.
1) Editores de líneas. Esta clase de editores fueron los precursores de los editores de
pantalla completa. Permitían al programador editar una sola línea a la vez. El
programador debe especificar qué línea se debe editar.
2) Editores de pantalla completa. Los editores de pantalla completa son más fáciles de
5
usar que los editores de líneas, porque los programadores editan cualquier línea en
cualquier momento.
Bloc de notas, editor integrado en Windows, también conocido como Notepad (en
inglés).
Gedit, editor libre que se distribuye junto con GNOME para sistemas tipo Unix.
También disponible para Windows.
Los editores de texto están orientados a manipular y crear archivos de texto plano, los
cuales tienen una enorme utilidad dentro de la Informática, sobre todo en el área de la
programación, ya que el código fuente de los programas está hecho en texto plano, así
como también los script interpretados de algunos lenguajes, como JavaScript, Perl,
Python, shell, etc.
Con estas aplicaciones, también podemos crear ediciones de archivos byte por byte,
como por ejemplo, cambiar algunas de las propiedades de una imagen o de algún
dibujo, claro está, que para realizar estas acciones debemos conocer el código de
caracteres ASCII.
En el ámbito del desarrollo de sofware los editores de texto son una parte
fundamental, ya que permiten al programador introducir el código de sus aplicaciones
y modificarlo a placer, con suma facilidad. Otra utilidad importante de los editores de
texto, es que permiten crear fácilmente listas y bases de datos que podemos cargar a
cualquier gestor, como MySQL, con una facilidad y velocidad sorprendentes y sin tener
que cargar aplicaciones especiales para realizar esta tarea.
6
Compiladores
Un compilador es un programa informático que traduce un programa escrito en
un lenguaje de programación a otro lenguaje de programación, generando un
programa equivalente que la máquina será capaz de interpretar. Usualmente el
segundo lenguaje es lenguaje de máquina, pero también puede ser un código
intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce
como compilación.
Partes de un compilador
La construcción de un compilador involucra la división del proceso en una serie de
fases que variará con su complejidad. Generalmente estas fases se agrupan en dos
tareas: el análisis del programa fuente y la síntesis del programa objeto.
Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden
agrupar en Front-end y Back-end:
Esta división permite que el mismo Back End se utilice para generar el código
máquina de varios lenguajes de programación distintos y que el mismo Front End que
sirve para analizar el código fuente de un lenguaje de programación concreto sirva para
7
generar código máquina en varias plataformas distintas. Suele incluir la generación y
optimización del código dependiente de la máquina.
El código que genera el Back End normalmente no se puede ejecutar directamente,
sino que necesita ser enlazado por un programa enlazador (linker)
Tipos de compiladores
Compiladores cruzados: Generan código para un sistema distinto del que están
funcionando.
Compiladores de una sola pasada: Generan el código máquina a partir de una única
lectura del código fuente.
8
Compiladores de varias pasadas: Necesitan leer el código fuente varias veces antes de
poder producir el código máquina.
Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del
código según se necesitan.
Proceso de compilación
Es el proceso por el cual se traducen las instrucciones escritas en un determinado
lenguaje de programación a lenguaje máquina. Además de un traductor, se pueden
necesitar otros programas para crear un programa objeto ejecutable. Un programa
fuente se puede dividir en módulos almacenados en archivos distintos. La tarea de
reunir el programa fuente a menudo se confía a un programa distinto,
llamado preprocesador. El preprocesador también puede expandir abreviaturas,
llamadas a macros, a proposiciones del lenguaje fuente.
Normalmente la creación de un programa ejecutable (un típico.exe para Microsof
Windows o DOS) conlleva dos pasos. El primer paso se llama compilación (propiamente
dicho) y traduce el código fuente escrito en un lenguaje de programación almacenado
en un archivo a código en bajo nivel (normalmente en código objeto, no directamente
a lenguaje máquina). El segundo paso se llama enlazado en el cual se enlaza el código
de bajo nivel generado de todos los ficheros y subprogramas que se han mandado
compilar y se añade el código de las funciones que hay en las bibliotecas del
compilador para que el ejecutable pueda comunicarse directamente con el sistema
operativo, traduciendo así finalmente el código objeto a código máquina, y generando
un módulo ejecutable.
Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de
compilación en archivos objetos (un típico.obj para Microsof Windows, DOS o
para Unix); para enlazarlos en fases posteriores, o crear directamente el ejecutable;
con lo que la fase de compilación se almacena sólo temporalmente. Un programa
podría tener partes escritas en varios lenguajes (por ejemplo C, C++ y Asm), que se
podrían compilar de forma independiente y luego enlazar juntas para formar un único
módulo ejecutable.
9
del código fuente, y puesto que esta entrada a menudo involucra un importante gasto
de tiempo, el analizador léxico debe funcionar de manera tan eficiente como sea
posible.
Análisis sintáctico
En esta fase los caracteres o componentes léxicos se agrupan jerárquicamente en
frases gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si
lo obtenido de la fase anterior es sintácticamente correcto (obedece a la gramática del
lenguaje). Por lo general, las frases gramaticales del programa fuente se representan
mediante un árbol de análisis sintáctico.
La estructura jerárquica de un programa normalmente se expresa utilizando
reglas recursivs. Por ejemplo, se pueden dar las siguientes reglas como parte de la
definición de expresiones:
Las reglas 1 y 2 son reglas básicas (no recursivas), en tanto que la regla 3 define
expresiones en función de operadores aplicados a otras expresiones.
La división entre análisis léxico y análisis sintáctico es algo arbitraria. Un factor para
determinar la división es si una construcción del lenguaje fuente es inherentemente
recursiva o no. Las construcciones léxicas no requieren recursión, mientras que las
construcciones sintácticas suelen requerirla. No se requiere recursión para reconocer
los identificadores, que suelen ser cadenas de letras y dígitos que comienzan con una
letra. Normalmente, se reconocen los identificadores por el simple examen del flujo de
entrada, esperando hasta encontrar un carácter que no sea ni letra ni dígito, y
agrupando después todas las letras y dígitos encontrados hasta ese punto en un
componente léxico llamado identificador. Por otra parte, esta clase de análisis no es
suficientemente poderoso para analizar expresiones o proposiciones. Por ejemplo, no
podemos emparejar de manera apropiada los paréntesis de las expresiones, o las
palabras begin y end en proposiciones sin imponer alguna clase de estructura
jerárquica o de anidamiento a la entrada.
Análisis semántico
La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores
semánticos y reúne la información sobre los tipos para la fase posterior de generación
de código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis
sintáctico para identificar los operadores y operandos de expresiones y proposiciones.
Un componente importante del análisis semántico es la verificación de tipos. Aquí, el
compilador verifica si cada operador tiene operandos permitidos por la especificación
del lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de
programación requieren que el compilador indique un error cada vez que se use
10
un número realcomo índice de una matriz. Sin embargo, la especificación del lenguaje
puede imponer restricciones a los operandos, por ejemplo, cuando un operador
aritmético binario se aplica a un número entero y a un número real. Revisa que los
arreglos tengan definido el tamaño correcto.
Fase de síntesis
Consiste en generar el código objeto equivalente al programa fuente. Sólo se genera
código objeto cuando el programa fuente está libre de errores de análisis, lo cual no
quiere decir que el programa se ejecute correctamente, ya que un programa puede
tener errores de concepto o expresiones mal calculadas. Por lo general el código objeto
es código de máquina relocalizable o código ensamblador. Las posiciones de memoria
se seleccionan para cada una de las variables usadas por el programa. Después, cada
una de las instrucciones intermedias se traduce a una secuencia de instrucciones de
máquina que ejecuta la misma tarea. Un aspecto decisivo es la asignación de variables
a registros.
Generación de código intermedio
Después de los análisis sintáctico y semántico, algunos compiladores generan una
representación intermedia explícita del programa fuente. Se puede considerar esta
representación intermedia 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 al programa objeto.
La representación intermedia puede tener diversas formas. Existe una forma
intermedia llamada código de tres direcciones que es como el lenguaje
ensamblador de una máquina en la que cada posición de memoria puede actuar como
un registro. El código de tres direcciones consiste en una secuencia de instrucciones,
cada una de las cuales tiene como máximo tres operandos. Esta representación
intermedia tiene varias propiedades:
Optimización de código
La fase de optimización de código consiste en mejorar el código intermedio, de modo
que resulte un código máquina más rápido de ejecutar. Esta fase de la etapa de síntesis
es posible sobre todo si el traductor es un compilador (difícilmente
un interprete puede optimizar el código objeto). Hay mucha variación en la cantidad de
optimización de código que ejecutan los distintos compiladores. En los que hacen
mucha optimización, llamados «compiladores optimizadores», una parte significativa
del tiempo del compilador se ocupa en esta fase. Sin embargo, hay optimizaciones
sencillas que mejoran sensiblemente el tiempo de ejecución del programa objeto sin
retardar demasiado la compilación.
11
Intérpretes
En ciencias de la computación, intérprete o interpretador es un programa informático
capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los
intérpretes se diferencian de los compiladores en que mientras estos traducen un
programa desde su descripción en un lenguaje de programación al código de
máquina del sistema, los intérpretes sólo realizan la traducción a medida que sea
necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el
resultado de dicha traducción.
Usando un intérprete, un solo archivo fuente puede producir resultados iguales incluso
en sistemas sumamente diferentes (ej. una PC y un PlayStation 3). Usando un
compilador, un solo archivo fuente puede producir resultados iguales solo si es
compilado a distintos ejecutables específicos a cada sistema.
Los programas interpretados suelen ser más lentos que los compilados debido a la
necesidad de traducir el programa mientras se ejecuta, pero a cambio son más flexibles
como entornos de programación y depuración (lo que se traduce, por ejemplo, en una
mayor facilidad para reemplazar partes enteras del programa o añadir módulos
completamente nuevos), y permiten ofrecer al programa interpretado un entorno no
dependiente de la máquina donde se ejecuta el intérprete, sino del propio intérprete
(lo que se conoce comúnmente como máquina virtual).
Para mejorar el desempeño, algunas implementaciones de programación de lenguajes
de programación pueden interpretar o compilar el código fuente original en una más
compacta forma intermedia y después traducir eso al código de máquina
(ej. Perl, Python, MATLAB, y Ruby). Algunos aceptan los archivos fuente guardados en
esta representación intermedia (ej. Python, UCSD Pascal y Java).
Comparando su actuación con la de un ser humano, un compilador equivale a un
traductor profesional que, a partir de un texto, prepara otro independiente traducido a
otra lengua, mientras que un intérprete corresponde al intérprete humano, que
traduce de viva voz las palabras que oye, sin dejar constancia por escrito.
En la actualidad, uno de los entornos más comunes de uso de los intérpretes
informáticos es Internet, debido a la posibilidad que estos tienen de ejecutarse
independientemente de la plataforma.
Los intérpretes se diferencian de los compiladores en que mientras estos traducen un
programa desde su descripción en un lenguaje de programación al código de máquina
del sistema, los intérpretes sólo realizan la traducción a medida que sea necesaria,
típicamente, instrucción por instrucción, y normalmente no guardan el resultado de
dicha traducción.
Conclusión
12
Los editores de texto son importantes ya que gracias a ellos el programador puede
introducir el código fuente de sus aplicaciones.
Intérpretes y compiladores son caminos para llegar a la solución de problemas
mediante programas. Ambos presentan diversas ventajas e inconvenientes que los
hacen complementarios.
Fuentes de información
Fuentes electrónicas
www.wikipedia.com
www.emagister.com
13