Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
22Activity
0 of .
Results for:
No results containing your search query
P. 1
¿Que es un compilador?

¿Que es un compilador?

Ratings:

4.0

(1)
|Views: 2,478 |Likes:
Published by Michel Ruiz Tejeida
Éste documento se publicó con el propósito de compartir un fragmento del proyecto: “¿Qué es un compilador?”, un trabajo de investigación desarrollado durante el estudio de la carrera Ingeniería en Informática que se imparte en la UPIICSA-IPN para la asignatura Compiladores y aspectos generales incluidos en la tesis “Desarrollo de un compilador para pseudocódigo en lenguaje español”.
Éste documento se publicó con el propósito de compartir un fragmento del proyecto: “¿Qué es un compilador?”, un trabajo de investigación desarrollado durante el estudio de la carrera Ingeniería en Informática que se imparte en la UPIICSA-IPN para la asignatura Compiladores y aspectos generales incluidos en la tesis “Desarrollo de un compilador para pseudocódigo en lenguaje español”.

More info:

Published by: Michel Ruiz Tejeida on Jan 27, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/12/2014

pdf

text

original

 
1
 Resumen
 —Un compilador es un programa que traduce uncódigo de entrada comúnmente escrito en un lenguaje de programación a otro lenguaje que será interpretado por lamáquina destino para su ejecución.
 Palabras clave
 —Compilador, análisis léxico, análisissintáctico, análisis semántico, generador de código.[1] I
 NTRODUCCIÓN
no de los principales mecanismos de interacción entreuna computadora y un usuario viene dado por elenvío y recepción de mensajes textuales, el usuarioingresa ciertos comandos por medio del teclado y observa losresultados en una pantalla. Aunque en la actualidad larespuesta de un equipo de cómputo se refleja en una novedosainterfaz de usuario, podemos decir que cualquier acción que serealice sobre éstas interfaces se traducen a secuencias decomandos que se interpretan como si fuesen ingresadas por elteclado, ésta función se define como traducción.
U
[2] D
EFINICIÓN
“Un traductor se define como un programa que traduce oconvierte desde un texto o programa escrito en un lenguajefuente hasta un texto o programa equivalente escrito en unlenguaje destino produciendo, si cabe, mensajes de error.”(Galvez Rojas & Mora Mata, 2005).Los traductores engloban tanto a los compiladores como alos intérpretes del cual podemos definir:Éste documento se publicó con el propósito de compartir un fragmento del proyecto: “¿Qué es un compilador?”, untrabajo de investigación desarrollado durante el estudio de lacarrera Ingeniería en Informática que se imparte en laUPIICSA-IPN para la asignatura Compiladores y aspectosgenerales incluidos en la tesis “Desarrollo de un compilador  para pseudocódigo en lenguaje español”.
 Autor— 
Michel Ruiz Tejeida, Ingeniero en Informática,México, Ciudad de México. Estudió en la Unidad ProfesionalInterdisciplinaria de Ingeniería y Ciencias Sociales yAdministrativas (UPIICSA – IPN), actualmente desarrollador de software, (sitio:http://upiicsa.dyndns.org/miruizt/
 
).Un compilador, “es aquel traductor que tiene como entradauna sentencia en lenguaje formal y como salida tiene unfichero ejecutable, es decir, realiza una traducción de unlenguaje de alto nivel a código máquina, (también se entiende por compilador aquel programa que proporciona un ficheroobjeto en lugar del ejecutable final)”Por otro lado, un intérprete, “es como un compilador, soloque la salida es una ejecución. El programa de entrada sereconoce y ejecuta a la vez. No se produce un resultado físico(código máquina) sino lógico (una ejecución).”[3] A
 NTECEDENTES HISTÓRICOS
Durante la cada de los os 40 se crea la primer computadora digital, una computadora es una herramientaelectrónica que permite almacenar, organizar y procesar información; sin embargo para su funcionamiento debe ser  programada, es decir, el usuario debe indicar las órdenesnecesarias para realizar alguna tarea específica.En un principio las órdenes no eran más que un alfabetonumérico mejor conocido como código binario o lenguajemáquina, las operaciones que se realizaban eran de muy bajonivel: mover datos de una ubicación a otra, sumar el contenidode registros, comparar datos, entre otras cosas, éste tipo de programación era lenta, tediosa y propensa a errores, sinmencionar el problema de mantener un sistema o peor aún,modificarlo. A razón de este hecho se implementaron clavess ciles de recordar que los digos nuricos,traduciéndolas manualmente a lenguaje máquina.Estas claves constituían el llamado lenguaje ensamblador,el cual se generaliza al automatizarse los procesos detraducción. Aunque estas palabras permitían reducir el númerode neas al realizar un programa, todavía resultabacomplicado poder estructurar una lógica de programación.En la búsqueda de un método que permitiera facilitar eldesarrollo de aplicaciones un grupo de trabajo de IBM(International Business Machines) comenzó el desarrollo deuna cnica que sustituyera los comandos del lenguajeensamblador por expresiones con una lógica más natural alhabla o la escritura; aunque en un principio se rechazó la ideade crear programas a partir de un código en el que no seapreciaban las sentencias directas que la máquina ejecutaría,con el uso del lenguaje y la comprobación del funcionamiento,se convirtió en el primer lenguaje de alto nivel, mejoconocido como FORTRAN y con esto la aparición del primer compilador.
¿Qué es un compilador?
Michel Ruiz Tejeida, Ciudad de México, 2011
 
2El desarrollo del compilador utilizado por el lenguajeFROTAN tardó poco más de una década en suimplementación, uno de los principales problemas que presentaron durante ese tiempo fue la arquitectura de lamáquina en que se utilizaría.A finales de la década de los años 50, se ofreció unasolución al problema de que un compilador fuera utilizable por varias máquinas, ésta consistía en dividir el compilador en dosetapas, una inicial (análisis) y otra final (de síntesis) que sedenominaron “front-end” y “back-end”. En la etapa inicial seanaliza el programa fuente y la etapa final es la encargada degenerar el código utilizado por la máquina objeto. La unión deestas dos etapas se realiza por medio de un lenguajeintermedio universal, este lenguaje, ampliamente discutido pero nunca implementado, se denominó UNCOL (UniversalComputer Oriented Language).[4] E
STRUCTURA DE UN COMPILADOR 
 A.Analizador léxico
La primera fase de un compilador es leer el lenguaje deentrada, en este punto el analizador léxico se encarga deagrupar los caracteres en lexemas y producir una salida ensecuencia de tokens para cada lexema en el programa fuente.Durante este proceso de reconocimiento de lexemas elanalizador léxico envía el flujo de tokens al analizadosintáctico e interactúa con la tabla de símbolos, de tal formaque por cada identificador que encuentre, debe introducirseese lexema en la tabla de símbolos.Como el analizador xico es el encargado de leer el programa fuente, además de formar los lexemas se ocupa deeliminar los cometarios y espacios en blanco (caracteres deespacio, tabuladores, retorno de línea o cualquier caracter quesepare los tokens).
 B.Analizador sintáctico
Todos los lenguajes de programación tienen reglas precisas,las cuales definen una estructura sintáctica de los programas bien formados; un programa por ejemplo, puede estar formado por procedimientos, éstos a su vez por instrucciones y unainstrucción por una secuencia de palabras que tienen unaexpresión regular declarada.La segunda fase del compilador es el análisis sintáctico o
 parsing.
El parser utiliza los primeros componentes de lostokens producidos por el analizador léxico para crear unarepresentación en forma de árbol que describa la estructuragramatical del flujo de tokens.Existen tres tipos de analizadores sintácticos para lasgramáticas:1. Universales:
 
Son aquellos analizadores capaces deanalizar cualquier tipo de gramática, (ejemplos: Cocke-Younger-Kasami y Earley).2. Descendentes:
 
Se caracterizan por construir el árbol deanálisis sintáctico de la parte superior (raíz) a la parte inferior (hojas).3. Ascendentes:
 
Se caracterizan por construir los árbolesempezando por las hojas y avanzan hasta la raíz.
C.Analizador semántico
Se compone de un conjunto de rutinas independientes,llamadas por los analizadores léxico y sintáctico.El análisis sentico utiliza como entrada el árbolsintáctico detectado por el análisis sintáctico para comprobar restricciones de tipo y otras limitaciones semánticas y preparar la generación de código.En compiladores de un solo paso, las llamadas a las rutinassemánticas se realizan directamente desde el analizadosintáctico y son dichas rutinas las que llaman al generador decódigo. El instrumento más utilizado para conseguirlo es lagramática de atributos.En compiladores de dos o más pasos, el análisis semánticose realiza independientemente de la generación de código, pasándose información a través de un archivo intermedio, quenormalmente contiene información sobre el árbol sintáctico enforma lineal (para facilitar su manejo y hacer posible sualmacenamiento en memoria auxiliar).En cualquier caso, las rutinas semánticas suelen hacer usode una pila (la pila semántica) que contiene la informaciónsentica asociada a los operandos (y a veces a losoperadores) en forma de registros semánticos.
 D.Generador de digo intermedio
Generalmente un compilador cuenta con un front-endencargado de realizar las fases de compilación antes vistas y lageneración de un código intermedio, a partir del cual un back-end genera el código destino.Existen dos representaciones intermedias principales:1.Notación sufija2.CuádruplasLos operadores diádicos (o binarios) pueden especificarsemediante tres notaciones principales:a) Prefija: el operador diádico es analizado antes que susoperandos. b) Infija: el operador diádico es analizado entre susoperandos.

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->