Está en la página 1de 54

Pregunta1

#1

Lenguaje de programacin

Captura de la microcomputadora Commodore PET-32 mostrando un programa en el lenguaje de programacin BASIC, bajo el emulador VICE en una distribucin GNU/Linux.

Un lenguaje de programacin es un idioma artificial diseado para expresar procesos que pueden ser llevadas a cabo por mquinas como lascomputadoras. Pueden usarse para crear programas que controlen el comportamiento fsico y lgico de una mquina, para expresar algoritmoscon precisin, o como modo de comunicacin humana.1 Est formado por un conjunto de smbolos y reglas sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el cdigo fuente de un programa informtico se le llama programacin. Tambin la palabra programacin se define como el proceso de creacin de un programa de computadora, mediante la aplicacin de procedimientos lgicos, a travs de los siguientes pasos:

El desarrollo lgico del programa para resolver un problema en particular. Escritura de la lgica del programa empleando un lenguaje de programacin especfico (codificacin del programa).

Ensamblaje o compilacin del programa hasta convertirlo en lenguaje de mquina. Prueba y depuracin del programa. Desarrollo de la documentacin.

Existe un error comn que trata por sinnimos los trminos 'lenguaje de programacin' y 'lenguaje informtico'. Los lenguajes informticos engloban a los lenguajes de programacin y a otros ms, como por ejemplo HTML (lenguaje para el marcado de pginas web que no es propiamente un lenguaje de programacin, sino un conjunto de instrucciones que permiten disear el contenido de los documentos). Permite especificar de manera precisa sobre qu datos debe operar una computadora, cmo deben ser almacenados o transmitidos y qu acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a travs de un lenguaje que intenta estar relativamente prximo al lenguaje humano o natural. Una caracterstica relevante de los lenguajes de programacin es precisamente que ms de un programador pueda usar un conjunto comn de instrucciones que sean comprendidas entre ellos para realizar la construccin de un programa de forma colaborativa.

Contenido
[ocultar]

1 Historia 2 Elementos

o o o o o o o

2.1 Variables y Vectores 2.2 Condicionantes 2.3 Bucles 2.4 Funciones 2.5 Sintaxis 2.6 Semntica esttica 2.7 Sistema de tipos

2.7.1 Lenguajes tipados versus lenguajes no tipados 2.7.2 Tipos estticos versus tipos dinmicos 2.7.3 Tipos dbiles y tipos fuertes

3 Implementacin 4 Tcnica

4.1 Paradigmas

5 Vase tambin 6 Referencias 7 Enlaces externos

[editar]Historia

Cdigo Fortran en una tarjeta perforada, mostrando el uso especializado de las columnas 1-5, 6 y 73-80.

Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje especfico conocido como cdigo mquina, el cual la mquina comprende fcilmente, pero que lo hace excesivamente complicado para las personas. De hecho slo consiste en cadenas extensas de nmeros 0 y 1. Para facilitar el trabajo, los primeros operadores de computadoras decidieron hacer un traductor para reemplazar los 0 y 1 por palabras o abstraccin de palabras y letras provenientes del ingls; ste se conoce como lenguaje

ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesaadd (sumar). El lenguaje ensamblador sigue la misma estructura del lenguaje mquina, pero las letras y palabras son ms fciles de recordar y entender que los nmeros. La necesidad de recordar secuencias de programacin para las acciones usuales llev a denominarlas con nombres fciles de memorizar y asociar:ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le denomin "instrucciones", y a este conjunto de instrucciones se le llam lenguaje ensamblador. Posteriormente aparecieron diferentes lenguajes de programacin, los cuales reciben su denominacin porque tienen una estructura sintctica similar a los lenguajes escritos por los humanos, denominados tambin lenguajes de alto nivel. La primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las matemticas a Ada quien, despus de conocer aCharles Babbage, tradujo y ampli una descripcin de su mquina analtica. Incluso aunque Babbage nunca complet la construccin de cualquiera de sus mquinas, el trabajo que Ada realiz con stas le hizo ganarse el ttulo de primera programadora de computadoras del mundo. El nombre del lenguaje de programacin Ada fue escogido como homenaje a esta programadora. A finales de 1953, John Backus someti una propuesta a sus superiores en IBM para desarrollar una alternativa ms prctica al lenguaje ensamblador para programar la computadora central IBM 704. El histrico equipo Fortran de Backus consisti en los programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt yDavid Sayre.2 El primer manual para el lenguaje Fortran apareci en octubre de 1956, con el primer compilador Fortran entregado en abril de 1957. Esto era un compilador optimizado, porque los clientes eran reacios a usar un lenguaje de alto nivel a menos que su compilador pudiera generar cdigo cuyo desempeo fuera comparable al de un cdigo hecho a mano en lenguaje ensamblador. En 1960, se cre COBOL, uno de los lenguajes usados an en 2010 en informtica de gestin. A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un mtodo ms eficiente para programarlas. Entonces, se crearon loslenguajes de alto nivel, como lo fue BASIC en las versiones introducidas en los microordenadores de la dcada de 1980. Mientras que una tarea tan sencilla como sumar dos nmeros puede necesitar varias instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastar una sola sentencia.

[editar]Elementos [editar]Variables

y Vectores

Las variables podran calificarse como contenedores de datos y por ello se diferencian segn el tipo de dato que son capaces de almacenar. En la mayora de lenguajes de programacin se requiere especificar un tipo de variable concreto para guardar un dato concreto. Por ejemplo, en Java, si deseamos guardar una cadena de texto deberemos especificar que la variable es del tipo "String". Por contra en otros lenguajes como PHP, este tipo de especificacin de variables no es necesario. Adems tambin existen variables compuestas por varias variables llamados vectores. Un vector no es ms que un conjunto de variables ordenadas guardadas dentro de una variables contenedor del tipo vector. A continuacin aadimos un listado con los tipos de variables y vectores ms comunes: -Variables tipo Char: Estas variables contienen un nico caracter, es decir, una letra, un signo o un nmero. -Variables tipo Int: Contienen un nmero entero. -Variables tipo float: Contienen un nmero decimal. -Variables tipo String: Contienen cadenas de texto, o lo que es lo mismo, es un vector con varias variables del tipo Char. -Variables del tipo Boolean: Solo pueden contener un 0 o un 1. El cero es considerado para muchos lenguajes como la variable del tipo String "False" mientras que el 1 se considera "True".

[editar]Condicionantes
Los condicionantes son estructuras de cdigo que indican que para que cierta parte del programa se ejecute, deben cumplirse ciertas premisas, como por ejemplo, que dos valores sean iguales, que un valor exista, que un valor sea mayor que otro y similares. Estos condicionantes por lo general solo se ejecutan una vez a lo largo del programa. Los condicionantes ms conocidos y empleados en programacin son:

If: Indica una condicin para que se ejecute una parte del programa. Else if: Siempre va precedido de un "If" e indica una condicin para que se ejecute una parte del programa siempre que no cumpla la condicin del if previo y si se cumpla con la que el "else if" especifique.

Else: Siempre precedido de "If" y en ocasiones de "Else If". Indica que debe ejecutarse cuando no se cumplan las condiciones prvias.

[editar]Bucles
Los bucles son parientes cercanos de los condicionantes, pero ejecutan constantemente un cdigo mientras se cumpla una determinada condicin. Los ms frecuentes son:

For: Ejecuta un cdigo mientras una variable se encuentre entre 2 determinados parmetros. While: Ejecuta un cdigo mientras se cumpla la condicin que solicita.

Hay que decir que a pesar de que existan distintos tipos de bucles, ambos son capaces de realizar exactamente las mismas funciones. El empleo de uno u otro depende, por lo general, del gusto del programador.

[editar]Funciones
Las funciones se crearon para evitar tener que repetir constantemente fragmentos de cdigo. Una funcin podra considerarse como una variable que encierra cdigo dentro de si. Por tanto cuando accedemos a dicha variable (la funcin) en realidad lo que estamos es diciendo al programa que ejecute un determinado cdigo predefinido anteriormente. Todos los lenguajes de programacin tienen algunos elementos de formacin primitivos para la descripcin de los datos y de los procesos o transformaciones aplicadas a estos datos (tal como la suma de dos nmeros o la seleccin de un elemento que forma parte de una coleccin). Estos elementos primitivos son definidos por reglas sintcticas y semnticas que describen su estructura y significado respectivamente.

[editar]Sintaxis

Con frecuencia se resaltan los elementos de la sintaxis con colores diferentes para facilitar su lectura. Este ejemplo est escrito en Python.

A la forma visible de un lenguaje de programacin se le conoce como sintaxis. La mayora de los lenguajes de programacin son puramente textuales, es decir, utilizan secuencias de texto que incluyen palabras, nmeros y puntuacin, de manera similar a los lenguajes naturales escritos. Por otra parte, hay algunos lenguajes de programacin que son ms grficos en su naturaleza, utilizando relaciones visuales entre smbolos para especificar un programa. La sintaxis de un lenguaje de programacin describe las combinaciones posibles de los smbolos que forman un programa sintcticamente correcto. El significado que se le da a una combinacin de smbolos es manejado por su semntica (ya sea formal o como parte del cdigo duro de la referencia de implementacin). Dado que la mayora de los lenguajes son textuales, este artculo trata de la sintaxis textual.

La sintaxis de los lenguajes de programacin es definida generalmente utilizando una combinacin de expresiones regulares (para la estructura lxica) y la Notacin de Backus-Naur (para la estructura gramtica). Este es un ejemplo de una gramtica simple, tomada deLisp: expresin ::= tomo tomo nmero smbolo lista | lista

::= nmero | smbolo ::= [+-]?['0'-'9']+ ::= ['A'-'Z'<nowiki>'</nowiki>a'-'z'].* ::= '(' expresin* ')'

Con esta gramtica se especifica lo siguiente:

una expresin puede ser un tomo o una lista; un tomo puede ser un nmero o un smbolo; un nmero es una secuencia continua de uno o ms dgitos decimales, precedido opcionalmente por un signo ms o un signo menos;

un smbolo es una letra seguida de cero o ms caracteres (excluyendo espacios); y una lista es un par de parntesis que abren y cierran, con cero o ms expresiones en medio.

Algunos ejemplos de secuencias bien formadas de acuerdo a esta gramtica: '12345', '()', '(a b c232 (1))' No todos los programas sintcticamente correctos son semnticamente correctos. Muchos programas sintcticamente correctos tienen inconsistencias con las reglas del lenguaje; y pueden (dependiendo de la especificacin del lenguaje y la solidez de la implementacin) resultar en un error de traduccin o ejecucin. En algunos casos, tales programas pueden exhibir un comportamiento indefinido. Adems, incluso cuando un programa est bien definido dentro de un lenguaje, todava puede tener un significado que no es el que la persona que lo escribi estaba tratando de construir. Usando el lenguaje natural, por ejemplo, puede no ser posible asignarle significado a una oracin gramaticalmente vlida o la oracin puede ser falsa:

"Las ideas verdes y descoloridas duermen furiosamente" es una oracin bien formada gramaticalmente pero no tiene significado comnmente aceptado.

"Juan es un soltero casado" tambin est bien formada gramaticalmente pero expresa un significado que no puede ser verdadero.

El siguiente fragmento en el lenguaje C es sintcticamente correcto, pero ejecuta una operacin que no est definida semnticamente (dado que p es un apuntador nulo, las operaciones p->real y p->im no tienen ningn significado):

complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im); Si la declaracin de tipo de la primera lnea fuera omitida, el programa disparara un error de compilacin, pues la variable "p" no estara definida. Pero el programa sera sintcticamente correcto todava, dado que las declaraciones de tipo proveen informacin semntica solamente. La gramtica necesaria para especificar un lenguaje de programacin puede ser clasificada por su posicin en la Jerarqua de Chomsky. La sintaxis de la mayora de los lenguajes de programacin puede ser especificada utilizando una gramtica Tipo-2, es decir, son gramticas libres de contexto. Algunos lenguajes, incluyendo a Perl y a Lisp, contienen construcciones que permiten la ejecucin durante la fase de anlisis. Los lenguajes que permiten construcciones que permiten al programador alterar el comportamiento de un analizador hacen del anlisis de la sintaxis un problema sin decisin nica, y generalmente oscurecen la separacin entre anlisis y ejecucin. En contraste con el sistema de macros de Lisp y los bloques BEGIN de Perl, que pueden tener clculos generales, las macros de C son meros reemplazos de cadenas, y no requieren ejecucin de cdigo.

[editar]Semntica

esttica

La semntica esttica define las restricciones sobre la estructura de los textos vlidos que resulta imposible o muy difcil expresar mediante formalismos sintcticos estndar. Para los lenguajes compilados, la semntica esttica bsicamente incluye las reglas semnticas que se pueden verificar en el momento de compilar. Por ejemplo el chequeo de que cada identificador sea declarado antes de ser usado (en lenguajes que requieren tales declaraciones) o que las etiquetas en cada brazo de una estructura case sean distintas. Muchas restricciones importantes de este tipo, como la validacin de que los identificadores sean usados en los contextos apropiados (por ejemplo no sumar un entero al nombre de una funcin), o que las llamadas a subrutinas tengan el nmero y tipo de parmetros adecuado, puede ser implementadas definindolas como reglas en una lgica conocida como sistema de tipos. Otras formas de anlisis estticos, como los anlisis de flujo de datos, tambin pueden ser parte de la semntica esttica. Nuevos lenguajes de programacin como Java y C# tienen un anlisis definido de asignaciones, una forma de anlisis de flujo de datos, como parte de su semntica esttica.

[editar]Sistema

de tipos

Artculo principal: Sistema de tipos.

Un sistema de tipos define la manera en la cual un lenguaje de programacin clasifica los valores y expresiones en tipos, cmo pueden ser manipulados dichos tipos y cmo interactan. El objetivo de un sistema de tipos es verificar y normalmente poner en vigor un cierto nivel de exactitud en programas escritos en el lenguaje en cuestin, detectando ciertas operaciones invlidas. Cualquier sistema de tipos decidible tiene sus ventajas y desventajas: mientras por un lado rechaza muchos programas incorrectos, tambin prohbe algunos programas correctos aunque poco comunes. Para poder minimizar esta desventaja, algunos lenguajes incluyen lagunas de tipos, conversiones explcitas no checadas que pueden ser usadas por el programador para permitir explcitamente

una operacin normalmente no permitida entre diferentes tipos. En la mayora de los lenguajes con tipos, el sistema de tipos es usado solamente para checar los tipos de los programas, pero varios lenguajes, generalmente funcionales, llevan a cabo lo que se conoce como inferencia de tipos, que le quita al programador la tarea de especificar los tipos. Al diseo y estudio formal de los sistemas de tipos se le conoce como teora de tipos.

[editar]Lenguajes tipados versus lenguajes no tipados


El texto que sigue es una traduccin defectuosa o incompleta.
Si quieres colaborar con Wikipedia, busca el artculo original y mejora o finaliza esta traduccin. Puedes dar aviso al autor principal del artculo pegando el siguiente cdigo en su pgina de discusin: {{subst:Aviso mal traducido|Lenguaje de

programacin}} ~~~~
Se dice que un lenguaje tiene tipos si la especificacin de cada operacin define tipos de datos para los cuales la operacin es aplicable, con la implicacin de que no es aplicable a otros tipos. Por ejemplo, " este texto

entre comillas" es una cadena. En la mayora de los lenguajes de programacin, dividir un nmero por una
cadena no tiene ningn significado. Por tanto, la mayora de los lenguajes de programacin modernos rechazaran cualquier intento de ejecutar dicha operacin por parte de algn programa. En algunos lenguajes, estas operaciones sin significado son detectadas cuando el programa es compilado (validacin de tipos "esttica") y son rechazadas por el compilador, mientras en otros son detectadas cuando el programa es ejecutado (validacin de tipos "dinmica") y se genera una excepcin en tiempo de ejecucin. Un caso especial de lenguajes de tipo son los lenguajes de tipo sencillo. Estos son con frecuencia lenguajes de marcado o de scripts, como REXX o SGML, y solamente cuentan con un tipo de datos; comnmente cadenas de caracteres que luego son usadas tanto para datos numricos como simblicos. En contraste, un lenguaje sin tipos, como la mayora de los lenguajes ensambladores, permiten que cualquier operacin se aplique a cualquier dato, que por lo general se consideran secuencias de bits de varias longitudes. Lenguajes de alto nivel sin datos incluyen BCPL y algunas variedades de Forth. En la prctica, aunque pocos lenguajes son considerados con tipo desde el punto de vista de la teora de tipos (es decir, que verifican o rechazan todas las operaciones), la mayora de los lenguajes modernos ofrecen algn grado de manejo de tipos. Si bien muchos lenguajes de produccin proveen medios para brincarse o subvertir el sistema de tipos.

[editar]Tipos estticos versus tipos dinmicos


El texto que sigue es una traduccin defectuosa o incompleta.
Si quieres colaborar con Wikipedia, busca el artculo original y mejora o finaliza esta traduccin. Puedes dar aviso al autor principal del artculo pegando el siguiente cdigo en su pgina de discusin: {{subst:Aviso mal traducido|Lenguaje de

programacin}} ~~~~

En lenguajes con tipos estticos se determina el tipo de todas las expresiones antes de la ejecucin del programa (tpicamente al compilar). Por ejemplo, 1 y (2+2) son expresiones enteras; no pueden ser pasadas a una funcin que espera una cadena, ni pueden guardarse en una variable que est definida como fecha. Los lenguajes con tipos estticos pueden manejar tipos explcitos o tipos inferidos. En el primer caso, el programador debe escribir los tipos en determinadas posiciones textuales. En el segundo caso, el compilador infiere los tipos de las expresiones y las declaraciones de acuerdo al contexto. La mayora de los lenguajes populares con tipos estticos, tales como C++, C# y Java, manejan tipos explcitos. Inferencia total de los tipos suele asociarse con lenguajes menos populares, tales como Haskell y ML. Sin embargo, muchos lenguajes de tipos explcitos permiten inferencias parciales de tipo; tanto Java y C#, por ejemplo, infieren tipos en un nmero limitado de casos. Los lenguajes con tipos dinmicos determinan la validez de los tipos involucrados en las operaciones durante la ejecucin del programa. En otras palabras, los tipos estn asociados con valores en ejecucin en lugar de expresiones textuales. Como en el caso de lenguajes con tipos inferidos, los lenguajes con tipos dinmicos no requieren que el programador escriba los tipos de las expresiones. Entre otras cosas, esto permite que una misma variable se pueda asociar con valores de tipos distintos en diferentes momentos de la ejecucin de un programa. Sin embargo, los errores de tipo no pueden ser detectados automticamente hasta que se ejecuta el cdigo, dificultando la depuracin de los programas. Ruby, Lisp, JavaScript y Python son lenguajes con tipos dinmicos.

[editar]Tipos dbiles y tipos fuertes


Los lenguajes dbilmente tipados permiten que un valor de un tipo pueda ser tratado como de otro tipo, por ejemplo una cadena puede ser operada como un nmero. Esto puede ser til a veces, pero tambin puede permitir ciertos tipos de fallas que no pueden ser detectadas durante la compilacin o a veces ni siquiera durante la ejecucin. Los lenguajes fuertemente tipados evitan que pase lo anterior. Cualquier intento de llevar a cabo una operacin sobre el tipo equivocado dispara un error. A los lenguajes con tipos fuertes se les suele llamar de tipos seguros. Lenguajes con tipos dbiles como Perl y JavaScript permiten un gran nmero de conversiones de tipo implcitas. Por ejemplo en JavaScript la expresin 2 * x convierte implcitamente x a un nmero, y esta conversin es exitosa inclusive cuando x es null, undefined, un Array o una cadena de letras. Estas conversiones implcitas son tiles con frecuencia, pero tambin pueden ocultar errores de programacin. Las caractersticas de estticos y fuertes son ahora generalmente consideradas conceptos ortogonales, pero su trato en diferentes textos varia. Algunos utilizan el trmino de tipos fuertes para referirse a tipos fuertemente estticos o, para aumentar la confusin, simplemente como equivalencia de tipos estticos. De tal manera que C ha sido llamado tanto lenguaje de tipos fuertes como lenguaje de tipos estticos dbiles.

[editar]Implementacin

Cdigo fuente de un programa escrito en ellenguaje de programacin Java.

La implementacin de un lenguaje es la que provee una manera de que se ejecute un programa para una determinada combinacin de software yhardware. Existen bsicamente dos maneras de implementar un lenguaje: compilacin e interpretacin.

Compilacin: es el proceso que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz interpretar. Los programas traductores que pueden realizar esta operacin se llamancompiladores. stos, como los programas ensambladores avanzados, pueden generar muchas lneas de cdigo de mquina por cada proposicin del programa fuente.

Interpretacin: es una asignacin de significados a las frmulas bien formadas de un lenguaje formal. Como los lenguajes formales pueden definirse en trminos puramente sintcticos, sus frmulas bien formadas pueden no ser ms que cadenas de smbolos sin ningn significado. Una interpretacin otorga significado a esas frmulas.

Se puede tambin utilizar una alternativa para traducir lenguajes de alto nivel. En lugar de traducir el programa fuente y grabar en forma permanente el cdigo objeto que se produce durante la compilacin para utilizarlo en una ejecucin futura, el programador slo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuacin, un programa intrprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la mquina, convierte cada proposicin del programa fuente en lenguaje de mquina conforme vaya siendo necesario durante el procesamiento de los datos. El cdigo objeto no se graba para utilizarlo posteriormente. La siguiente vez que se utilice una instruccin, se la deber interpretar otra vez y traducir a lenguaje mquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo o bucle, cada instruccin del bucle tendr que volver a ser interpretada en cada ejecucin repetida del ciclo, lo cual hace que el programa sea ms lento en tiempo de ejecucin (porque se va revisando el cdigo en tiempo de ejecucin) pero ms rpido en tiempo de diseo

(porque no se tiene que estar compilando a cada momento el cdigo completo). El intrprete elimina la necesidad de realizar una compilacin despus de cada modificacin del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelacin deber ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una ejecucin del cdigo. La mayora de lenguajes de alto nivel permiten la programacin multipropsito, aunque muchos de ellos fueron diseados para permitir programacin dedicada, como lo fue el Pascal con las matemticas en su comienzo. Tambin se han implementado lenguajes educativos infantiles como Logo mediante una serie de simples instrucciones. En la actualidad son muy populares algunos lenguajes especialmente indicados para aplicaciones web, como Perl, PHP, Ruby, Python o JavaScript.

[editar]Tcnica

Libros sobre diversos lenguajes de programacin.

Para escribir programas que proporcionen los mejores resultados, cabe tener en cuenta una serie de detalles.

Correccin. Un programa es correcto si hace lo que debe hacer tal y como se estableci en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qu debe hacer el programa antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace.

Claridad. Es muy importante que el programa sea lo ms claro y legible posible, para facilitar as su desarrollo y posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, as como cuidar el estilo en la edicin; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de creacin como en las fases posteriores de correccin de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es an ms necesaria para que otros programadores puedan continuar el trabajo fcilmente. Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de cdigo. Otros, por diversin o para impedir un anlisis cmodo a otros programadores, recurren al uso de cdigo ofuscado.

Eficiencia. Se trata de que el programa, adems de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza. Normalmente, al hablar de

eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que tambin pueden ser de consideracin al obtener la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, trfico de red que genera, etc.).

Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquella en la que se elabor. La portabilidad es una caracterstica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/Linux ejecutarse tambin en la familia desistemas operativos Windows. Esto permite que el programa pueda llegar a ms usuarios ms fcilmente.

[editar]Paradigmas
Los programas se pueden clasificar por el paradigma del lenguaje que se use para producirlos. Los principales paradigmas son: imperativos, declarativos y orientacin a objetos. Los programas que usan un lenguaje imperativo especifican un algoritmo, usan declaraciones, expresiones y sentencias.3 Una declaracin asocia un nombre de variable con un tipo de dato, por ejemplo: var x:

integer;. Una expresin contiene un valor, por ejemplo: 2 + 2 contiene el valor 4. Finalmente, una sentencia
debe asignar una expresin a una variable o usar el valor de una variable para alterar el flujo de un programa, por ejemplo: x := 2 + 2; if x == 4 then haz_algo();. Una crtica comn en los lenguajes imperativos es el efecto de las sentencias de asignacin sobre una clase de variables llamadas "no locales".4 Los programas que usan un lenguaje declarativo especifican las propiedades que la salida debe conocer y no especifica cualquier detalle de implementacin. Dos amplias categoras de lenguajes declarativos son los lenguajes funcionales y los lenguajes lgicos. Los lenguajes funcionales no permiten asignaciones de variables no locales, as, se hacen ms fcil, por ejemplo, programas como funciones matemticas. 4 El principio detrs de los lenguajes lgicos es definir el problema que se quiere resolver (el objetivo) y dejar los detalles de la solucin al sistema. 5 El objetivo es definido dando una lista de sub-objetivos. Cada sub-objetivo tambin se define dando una lista de sus sub-objetivos, etc. Si al tratar de buscar una solucin, una ruta de sub-objetivos falla, entonces tal sub-objetivo se descarta y sistemticamente se prueba otra ruta. La forma en la cual se programa puede ser por medio de texto o de forma visual. En la programacin visual los elementos son manipulados grficamente en vez de especificarse por medio de texto.

[editar]Vase

tambin

Programacin estructurada Programacin modular Programacin orientada a objetos

Programacin imperativa Programacin declarativa paradigma de programacin Lenguajes esotricos Lenguajes de programacin (PDF)

[editar]Referencias
[Mark] (2010). O'Reilly Media, Inc. (ed.): Learning Python, Fourth Edition (libro). O'Reilly. Consultado el 11 de febrero de 2010. 2. 3. http://www.softwarepreservation.org/projects/FORTRAN/index.html#By_FORTRAN_project_members Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition. Addison-Wesley. pp. 75. ISBN 0-201-56885-3. (en ingls). 4. a b Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition. Addison-Wesley. pp. 213. ISBN 0-201-56885-3. (en ingls). 5. Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition. Addison-Wesley. pp. 244. ISBN 0-201-56885-3. (en ingls).

1.

[editar]

#2
Un lenguaje de programacin es un idioma artificial diseado para expresar computaciones que pueden ser llevadas a cabo por mquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento fsico y lgico de una mquina, para expresar algoritmos con precisin, o como modo de comunicacin humana.[1] Est formado de un conjunto de smbolos y reglas sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el cdigo fuente de un programa informtico se le llama programacin.

Tambin la palabra programacin se define como el proceso de creacin de un programa de computadora, mediante la aplicacin de procedimientos lgicos, a travs de los siguientes pasos:

El desarrollo lgico del programa para resolver un problema en particular. Escritura de la lgica del programa empleando un lenguaje de programacin especfico (codificacin del programa) Ensamblaje o compilacin del programa hasta convertirlo en lenguaje de mquina. Prueba y depuracin del programa. Desarrollo de la documentacin.

Existe una tendencia a identificar el proceso de creacin de un programa informtico con la programacin, que es cierta cuando se trata de programas pequeos para uso personal, y que dista de la realidad cuando se trata de grandes proyectos.

El proceso de creacin de software, desde el punto de vista de la ingeniera, incluye los siguientes pasos:

1.Reconocer la necesidad de un programa para solucionar un problema o identificar la posibilidad de automatizacin de una tarea. 2.Recoger los requisitos del programa. Debe quedar claro qu es lo que debe hacer el programa y para qu se necesita. 3.Realizar el anlisis de los requisitos del programa. Debe quedar claro cmo debe realizar el programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa se pueden especificar en esta fase. 4.Disear la arquitectura del programa. Se debe descomponer el programa en partes de complejidad abordable. 5.Implementar el programa. Consiste en realizar un diseo detallado, especificando completamente todo el funcionamiento del programa, tras lo cual la codificacin debera resultar inmediata. 6.Implantar (instalar) el programa. Consiste en poner el programa en

funcionamiento junto con los componentes que pueda necesitar (bases de datos, redes de comunicaciones, etc.). La ingeniera del software se centra en los pasos de planificacin y diseo del programa, mientras que antiguamente (programacin artesanal) la realizacin de un programa consista nicamente en escribir el cdigo.

Pregunta2

Clase (informtica)

En la programacin orientada a objetos, una clase es una construccin que se utiliza como un modelo (o plantilla) para crear objetos de ese tipo. El modelo describe el estado y el comportamiento que todos los objetos de la clase comparten. Un objeto de una determinada clase se denomina una instancia de la clase. La clase que contiene (y se utiliz para crear) esa instancia se puede considerar como del tipo de ese objeto, por ejemplo, una instancia del objeto de la clase "Persona" sera del tipo "Persona". Una clase por lo general representa un sustantivo, como una persona, lugar o (posiblemente bastante abstracta) cosa - es el modelo de un concepto dentro de un programa de computadora. Fundamentalmente, encapsula el estado y el comportamiento del concepto que representa. Encapsula el estado a travs de marcadores de datos llamados atributos (o variables miembro o variables de instancia), y encapsula el comportamiento a travs de secciones de cdigo reutilizables llamados mtodos. Ms tcnicamente, una clase es un conjunto coherente que consiste en un tipo particular de metadatos. Una clase tiene tanto una interfaz y una estructura. La interfaz describe cmo interactuar con la clase y sus instancias con mtodos, mientras que la estructura describe cmo los datos se dividen en atributos dentro de una instancia. Una clase tambin puede tener una representacin (metaobjeto) en tiempo de ejecucin, que proporciona apoyo en tiempo de ejecucin para la manipulacin de los metadatos relacionados con la clase. En el diseo orientado a objetos, una clase es el tipo ms especfico de un objeto en relacin con una capa especfica. Los lenguajes de programacin que soportan clases difieren sutilmente en su soporte para diversas caractersticas relacionadas con clases. La mayora soportan diversas formas de herencia. Muchos lenguajes tambin soportan caractersticas para proporcionar encapsulacin, como especificadores de acceso.
Contenido
[ocultar]

1 Componentes

o o o

1.1 Variables miembro 1.2 Mtodos en las clases 1.3 Propiedades

[editar]Componentes

Ejemplos de clases

Una clase es un contenedor de uno o ms datos (variables o propiedades miembro) junto a las operaciones de manipulacin de dichos datos (mtodos). Las clases pueden definirse como estructuras (struct), uniones (union) o clases (class) pudiendo existir diferencias entre cada una de las definiciones segn el lenguaje. Adems las clases son agrupaciones de objetos que describen su comportamiento. La sintaxis tpica de una clase es: class Nombre { // Variables miembro (habitualmente privadas) miembro_1; //lista de miembros miembro_2; miembro_3; // Funciones o mtodos (habitualmente pblicas) funcion_miembro_1( ); // funciones miembro conocidas funcion_miembro_2 ( ); // funciones como mtodos

// Propiedades (habitualmente pblicas) propiedad_1; propiedad_2; propiedad_3; propiedad_4; } Las clases habitualmente se denotan con nombres abstractos como Animal, Factura... aunque tambin pueden representar procesos o acciones como DarAlta

[editar]Variables

miembro

Las propiedades o atributos son caractersticas de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las variables son algo as como el almacn de los datos de estado relacionados con los objetos. Habitualmente, las variables miembro son privadas al objeto (siguiendo las directrices de diseo del Principio de ocultacin) y su acceso se realiza mediante propiedades o mtodos que realizan comprobaciones adicionales. Suelen denominarse con nombres.

[editar]Mtodos

en las clases

Implementan la funcionalidad asociada al objeto. Los mtodos son el equivalente a las funciones en programacin estructurada. Se diferencian de ellos en que es posible acceder a las variables de la clase de forma implcita. Cuando se desea realizar una accin sobre un objeto, se dice que se le manda un mensaje invocando a un mtodo que realizar la accin. Habitualmente, los mtodos suelen ser verbos.

[editar]Propiedades
Las propiedades son un tipo especial de mtodos. Debido a que suele ser comn que las variables miembro sean privadas para controlar el acceso y mantener la coherencia, surge la necesidad de permitir consultar o modificar su valor mediante pares de mtodos: GetVariable y SetVariable. Los lenguajes orientados a objetos ms modernos (por ejemplo Java, C#) aaden la construccin de propiedad que es una sintaxis simplificada para dichos mtodos: tipo Propiedad { get { } set {

} } Las propiedades se denominan con nombres como las variables.

#2 Los lenguajes de programacin pueden clasificarse empleando distintos mtodos y puntos de vista. Esta clasificacin se basa en el paradigma que utilizan. Se debe aclarar que existen muchos ms paradigmas y subparadigmas de programacin no incluidos dentro de los mencionados. Adems, todava hay conflictos en las definiciones y alcances de ciertos paradigmas. Qu es un paradigma de programacin? Un paradigma de programacin provee (y determina) la visin y mtodos de un programador en la construccin de un programa o subprograma. Diferentes paradigmas resultan en diferentes estilos de programacin y en diferentes formas de pensar la solucin de problemas (con la solucin de mltiples problemas se construye una aplicacin). Los lenguajes de programacin son basados en uno o ms paradigmas. (Vase Programacin en mltiples paradigmas)Por ejemplo: Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos. El lenguaje de programacin Scheme, en cambio, soporta slo programacin funcional. En cambio Python, soporta mltiples paradigmas. Clasificacin por paradigmas de programacin Paradigma Imperativo: describe la programacin como una secuencia instrucciones o comandos que cambian el estado de un programa. El cdigo mquina en general est basado en el paradigma imperativo. Su contrario es el paradigma declarativo. En este paradigma se incluye el paradigma procedimental (procedural) entre otros. Paradigma Declarativo: No se basa en el cmo se hace algo (cmo se logra un objetivo paso a paso), sino que describe (declara) cmo es algo. En otras palabras, se enfoca en describir las propiedades de la solucin buscada, dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucin. Es ms complicado de implementar que el paradigma imperativo, tiene desventajas en la eficiencia, pero ventajas en la solucin de determinados problemas. Paradigma Estructurado: la programacin se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre s. Adems la programacin se controla con secuencia, seleccin e iteracin. Permite reutilizar cdigo programado y otorga una

mejor compresin de la programacin. Es contrario al paradigma inestructurado, de poco uso, que no tiene ninguna estructura, es simplemente un bloque, como por ejemplo, los archivos batch (.bat). Paradigma Orientado a Objetos: est basado en la idea de encapsular estado y operaciones en objetos. En general, la programacin se resuelve comunicando dichos objetos a travs de mensajes (programacin orientada a mensajes). Se puede incluir aunque no formalmente- dentro de este paradigma, el paradigma basado en objetos, que adems posee herencia y subtipos entre objetos. Ej.: Simula, Smalltalk, C++, Java, Visual Basic .NET, etc. Su principal ventaja es la reutilizacin de cdigos y su facilidad para pensar soluciones a determinados problemas. Paradigma Funcional: este paradigma concibe a la computacin como la evaluacin de funciones matemticas y evita declarar y cambiar datos. En otras palabras, hace hincapi en la aplicacin de las funciones y composicin entre ellas, ms que en los cambios de estados y la ejecucin secuencial de comandos (como lo hace el paradigma procedimental). Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones. Paradigma lgico: se basa en la definicin de reglas lgicas para luego, a travs de un motor de inferencias lgicas, responder preguntas planteadas al sistema y as resolver los problemas. Ej.: prolog. Otros paradigmas y subparadigmas son: paradigma orientado al sujeto, paradigma reflectante, programacin basada en reglas, paradigma basado en restricciones, programacin basada en prototipos, etc.

Pregunta#3
Tipos de datos: Existen varios tipos de datos que pueden manejarse en vbs, y los que ms vamos a utilizar, son: Booleano, Byte, Fecha, Double, Entero, Entero largo, Objeto, Single, Cadena. Todos estos representan valores verdadero/falso, fecha/hora, nmerosentero positivo/negativo, cadena de texto (no creo necesite ms explicacin que esta). Operadores: Tendremos varios tipos de operadores a nuestra disposicin.

Aritmticos: Suma(+), Resta(-), Multiplicacin(*), Divisin decimal(/), Divisin entero(\), Potencia(^), Resto divisin(mod) Comparacin: Igual(=), Distinto(<>), Mayor(>), Menor(<), Menos o igual(<=), Mayor o igual(>=) Lgicos: Y(and), O(or), Xor, No(not) De cadena: Concatenacin(&)

Posted in: VBS

#2

1 - Introduccin
Todos los lenguajes utilizan este sistema o metodologa para la programacin de aplicaciones, pero varan la forma en que se utilizan, su sintaxis etc... Cuando uno recin empieza a programar, parece muy complicado entender estos temas, pero con la prctica todo se va aclarando. Lo bueno de comprender los fundamentos de la programacin, es que nos permite luego poder programar en casi cualquier lenguaje, por que la forma de programar en general no vara demasiado, lo que cambia en cada uno de ellos es su sintaxis y funciones y cosas propias del lenguaje. Aunque tampoco es tan as, ya que esto no significa que por que uno sea experto por ejemplo programando en lenguaje C, lo sea en Visual Basic y Viceversa.

2 - Las Variables
Las variables, como su nombre lo indica, se utilizan para almacenar valores que tienen la propiedad de variar el contenido. Cuando hablamos de contenido nos referimos a cualquier tipo de datos, por ejemplo un nombre, una fecha, un color, un nmero etc... . A las variables se les asigna un nombre para poder utilizarlas. Por ejemplo puedo crear una variable llamada fecha y esta almacenar una fecha. A los nombres de las variables se los denomina identificadores. Cuando creamos variables, tenemos que tratar de asignarles un nombre que se relacione con el tipo de dato que queremos almacenar. Por ejemplo no tendra mucho sentido crear una variable llamada m y all

guardar o almacenar un nombre o un apellido, por que cuando echemos vista al cdigo resultara mas difcil deducir que tipo de dato estoy guardando. Por ejemplo en este ltimo caso sera mucho mas lgico crear una variable llamada nombres y all guardar "Luciano", "Pedro", "Natalia" etc.. En visual basic a las variables conviene declararlas, o sea, avisarle a vb que vamos a utilizar dichas variables. A estas se las declara en el comienzo del cdigo y se les antepone la palabra reservada Dim, luego el nombre que nosotros queramos y seguido el tipo de dato que almacenar, por ejemplo si quiero almacenar en una variable llamadaNumero

Dim numero As Integer

La palabra Integer le avisa a vsiaual basic que voy a guardar un nmero entero. Despus de declararla le podemos asignar un valor con el operador "=", ejemplo:

Dim numero As Integer numero = 1500


Pero hay que tener en cuenta que al declarar una variable, en este caso, de tipo integer, no podramos almacenar en ella una cadena de caracteres como por ejemplo un nombre o cualquier otro tipo de datos que no sea un nmero entero. Si sucedera esto nuestro programa dara un error en tiempo de ejecucin, mostrndonos un feo cartel dicindoos que no coinciden los tipos de datos..

3 - Tipos de datos:
Los tipos de datos, indican el tipo de valor que puede almacenar una variable. Los principales tipos de datos: Nmeros enteros: dentro de los nmeros enteros tenemos varios tipos de datos dependiendo el rango que queramos utilizar: Byte: puede almacenar nmeros enteros dentro del rango desde 0 a 255 Integer: puede almacenar nmeros enteros dentro del rango -32.768 a 32.767 Long: puede almacenar nmeros enteros dentro del rango -2.147.483.648 hasta 2.147.483.648 .

Nmeros decimales: para siguientes tipos de datos:

almacenar

nmeros

decimales

contamos

con

los

Single: almacena nmeros decimales en el rango +/- 1e-45 hasta 3e38 Double: desde +/- 5e-324 hasta 1.8e308

Cadenas de caracteres: las cadenas de caracteres se definen con la palabra String y tienen un rango de hasta 2 billones de caracteres. Tipos de valores lgicos: para almacenar tipos de valores lgicos como verdadero o falso, se utiliza la palabra Boolean y sus 2 posibles valores son True (verdadero) y False(falso). Fechas y horas: Para almacenar fechas y horas se utiliza la palabra Date Tipo variant : Las variables de este tipo pueden almacenar cualquier tipo de valor, pero ocupan mas memoria. Nota: hay mas tipos de datos, incluso nosotros podemos crear los nuestros.

4 - Constantes:
Las constentes, como las variables, se utilizan para guardar datos y valores para nuestro programa, pero a diferencia de estas ltimas (las variables), el contenido que almacenen no cambia, siempre es constante. A diferencia de las variables que se declaran con la palabra Dim, las Constantes se declaran con la palabra Const. Ejemplo:

Const numero = 53
En la lnea anterior he creado una constante, que la llam numero y va a almacenar un nmero , y este valor, cuando se ejecute mi programa se mantendr invariable.

Un ejemplo:

1 - En la siguiente lnea se declaran 2 tipos de variables de tipo Integer llamadas num1 y num2. Luego se les asigna un valor a cada una y luego las sumamos, y mediante la funcin MsgBox que es una funcin de Visual Basic para mostrar mensajes, mostramos el resultado de esa suma. Coloca un botn (CommandButton) llamado Command1. Hac dobleClick sobre el botn para que se abra la ventana de cdigo de Visual Basic. Dentro del procedimiento Click pega este cdigo:

Dim num1 As Integer Dim num2 As Integer num1 = 10 num2 = 20 'se mostrar un mensaje con la suma de las variables con el resultado 30 MsgBox num1 + num2

Al ejecutar el programa, pods ver como se presenta una caja de mensaje con el resultado al sumar las 2 variables num1 y num2 2 - Ahora vamos a declarar y crear 2 variables de tipo String, es decir vamos a almacenar cadenas de caracteres en cada una de ellas. En el ejemplo se crean 2 variables, una llamada nombre y otra apellido. Despus le asignamos un valor, y por ultimo mostramos las variables con un mensaje usando la funcin MsgBox como en el ejemplo anterior. Pero antes hay que aclarar algo importante, las cadenas en visual basic se encierran entre comillas dobles como pods ver en el ejemplo, de lo contrario se va a producir un error.

Dim nombre As String Dim apellido As String 'le nombre = "Carlos" apellido = "Peres" 'mostramos un MsgBox nombre MsgBox apellido mensaje

establecemos

valores

con

el

valor

de

las

variables

3 - Ahora un ejemplo que produce un error en tiempo de ejecucin. Creamos 2 variables exactamente igual que en el ejemplo anterior, pero en ves de declarar las variables nombre y apellido como de tipo String lo hacemos como de tipo Integer.

Dim Nombre As Integer Dim Apellido As Integer 'Le establecemos Nombre = "Carlos" Apellido = "Peres"

valores

numericos

Si probs el ejemplo, visual basic te mostrar un mensaje de error como el siguiente: "no coinciden los tipos de datos":

...ya que las variables estn declaradas como de tipo Integer, y le ests asignando un tipo de dato que no lo acepta. 4 - Un ejemplo que almacena un nmero en una variable de tipo Byte (nmeros de 0 a 255). Primero declaramos la variable y le damos un nombre, por ejemplo si queremos almacenar el nmero 88 hacemos por ejemplo as.

Dim Edad As Byte

Para asignarle un valor a esa variable:

Edad = 88

Para mostrar el valor de la variable Edad en un control TextBox cuando presionamos un botn Command1, sera de esta manera:

Private Sub Command1_Click() 'Declaramos Dim Edad As Byte 'Le asignamos Edad = 88 un valor en que no el

la sea inferior control a 0 ni

variable mayor a 255

'Lo mostramos Text1 = Edad End Sub

llamado

Text1

Si probaras cambiando el valor 88 por ejemplo a 300, ocurrira lo mismo que en el ejemplo anterior, es decir un Error 13 en tiempo de ejecucin "No coinciden los tipos de datos"

5 - Estructuras de control:
Las estructuras de control se utilizan para controlar el flujo del programa en una rutina o funcin. Mediante ellas podemos controlar, mediante una condicin, que se ejecute una determinada lnea o bloque de lneas de cdigo .. o que no se ejecuten.

Estructura If - Then - Else Esta estructura permite mediante una condicin, que se ejecute o no se ejecute determinada tarea o lnea de cdigo. Por ejemplo supongamos que tenemos en un formulario un control Label con la propiedad Caption con el valor 50

If msgbox else msgbox end if

Label1.Caption "mi label "mi label NO

= tiene tiene un un

"50" valor valor

de de

Then 50" 50"

Esto traducido al espaol significara lo siguiente: Si (If) la propiedad caption del label1 que tengo en el formulario es igual (=) a "50" entonces (Then) que muestre un determinado mensaje, si no (Else) que muestre el otro mensaje. En conclusin lo que hace esta estructura es evaluar una condicin, si se cumple, que se ejecute determinada tarea. si no se cumple, se ejecutar las lneas de cdigo que estn bajo la clusula Else. Luego tenemos que cerrar la estructura con la palabra end if. Tenemos que aclarar que no es obligatorio usar If y else juntos en la misma clusula. Por ejemplo podramos utilizar solo una estructura If sin else. Por ejemplo:

Private Sub Command1_Click() 'Si la propiedad caption del Label1 es "Hola" entonces se termina el programa If Label1.Caption = "Hola" Then End End 'Si no, se prosigue con esta If lnea

MsgBox "No se ejecut el bloque If Anterior porque el Caption del control Label1 no era Hola" End Sub

Coloca un Label1 y un Command1. En la propiedad caption del Label1 escribe "Hola". Al ejecutar el programa y presionar el Command1, se termina el programa con la sentencia End de Visual Basic (End sirve para finalizar completamente la ejecucin de nuestro programa). En cambio si ahora le cambia el caption al Label1 y volvs a ejecutar el proyecto, pods ver que la instruccin End no se ejecuta, si no que la pasa por alto y sigue con las restantes lneas, en este caso ejecuta la funcin MsgBox con el mensaje.

Estructura While - Wend Esta estructura de control repetir sin detenerse un determinado cdigo mientras se cumpla una condicin. Por ejemplo supongamos que tenemos una variable llamada x que tiene un valor de 100.

while ...se wend

ejecutan

todas

x las

lneas

de

= cdigo

que

estn

100 aqu

Esto traducido al espaol significara lo siguiente: Mientras (While) la variable x sea igual a 100, y no cambie su valor, se formar un bucle interminable, hasta que x cambie a cualquier otro valor disto de 100. Si x cambia el valor, por ejemplo a 234 saldra del bucle While - wend y seguira ejecutando el resto del cdigo, si es que hay mas cdigo o instrucciones a ejecutar. Un ejemplo, agrega un Command1 al formulario y un control Text1. Cuando ejecutemos el ejemplo, se deber escribir un nmero dentro del control textBox. Entonces se crear un bucle While, que mostrar en el Caption del formulario, es decir en la barra de ttulo, el intervalo desde 0 hasta el nmero que hayamos ingresado en el Text1. Es decir si ingresamos el nmero 9000, en el caption del formulario se imprimirn los nmero desde 0 hasta 9000. Para hacer esto, dentro del bucle While pondremos una variable llamada Contador, que en cada pasada se incrementar en 1, pero cuando la variable Contador sea igual al nmero que haya en el Text1, se finalizar el bucle y se mostrar un mensaje que finaliz el mismo

Private Dim contador While 'Mostramos Me.Caption en el

As

Sub Integer

'Declaramos <>

Command1_Click() la variable Text1 variable en + contador contador 1 1

contador formulario la = el = variable contador valor de

la

'Incrementamos contador Wend MsgBox End Sub

"Termin

el

bucle"

Estructura For - next La estructura es utilizada para generar una repeticin de instrucciones o bucle, pero no evala una condicin como en el caso del bucle While, si no que lo hace entre un nmero inicial y un nmero final que le debemos indicar al mismo.

Por ejemplo, tenemos un formulario con un Label1 y declaramos una variable de tipo integer llamada "contador" como en el caso anterior

Private Sub Command1_Click() Dim contador As Integer For contador = 0 To 1000 Label1.Caption = contador Next contador End Sub

Esto traducido significara lo siguiente: Primero, tenemos una variable llamada "contador". Mediante el bucle For next podemos controlar la cantidad de veces que queremos repetir un determinado proceso o instruccin. Esta posee un principio y un fin, en este caso el principio sera 0 y el fin 1000, de manera que la variable contador se incrementar en 1 hasta que llegue a 1000, y repetir 1000 veces todas las instrucciones que estn bajo la clusula For-next. En este caso nuestro control Label1 mostrara el contenido de la variable contador Para ver en forma detallada y paso a paso esto, pongamos un ejemplo que lo que hace es repetir 10 veces (desde el 1 hasta el 10 en el intervalo del bucle For) y mostrar un mensaje con el valor de la variable Contador. Una ves que llegue a 10, terminar. Coloc un Command1. Doble Click en el botn para escribir dentro del procedimiento que se ejecutar cuando lo presionemos. El cdigo:

Dim For MsgBox Next

contador contador "La variable = Contador

As 1 vale: " To &

Integer 10 contador contador

MsgBox "Fin del bucle For"

Estructura Select case La estructura Select Case se suele utilizar para evitar el uso de muchas clusulas If y de esta manera no tener que anidarlas. La clasula Select evala una condicin y las

clusulas case contienen valores, si el valor que contiene la clusula case es igual a la condicin que se evalu, ejecutar las instrucciones en dicha clusula.

Dim Nombre Select Case MsgBox Case MsgBox Case MsgBox End Select "Se "Se "Se

Nombre = Case

As

String Text1 Nombre "Jorge"

ejecut ejecut

la la

clusula clusula

case: case:

" "

& &

Nombre "Pedro" Nombre

"Carolina" ejecut la clusula case: " & Nombre

Esta estructura es muy prctica. En el ejemplo anterior, la clusula Select case contiene como condicin el valor de la variable llamada Nombre. Esa Variable toma el valor que tenga un control Text1, entonces buscar en todas las clusulas case, y si encuentra una igual a la condicin, ejecutar solo las instrucciones de la clusula case que tenga el mismo valor, por ejemplo si ingresara el nombre "Martn" no se ejecutar ninguna clusula Case. En cambio si ingreso "Jorge" se ejecutar solo las instrucciones que estn en la seccin Case "Jorge" y asi... En el caso anterior solo hemos colocado un valor para cada Case. Si quisieramos colocar mas valores podramos hacerlo de esta forma:

Private Dim x Select Case MsgBox 'Se Case 'Esto Case "Se ejecut el ejecuta no = 10 'Le x

Sub As ponemos Case case 5, que 15, se 25, tiene esta el 5 un valor

Form_Load() Integer a x x y 10 el 10" seccin 20 ejecuta 30

'Esto End End Sub

tampoco Select

es decir que podemos listar los valores en los Case separados por comas. En el caso anterior se ejecutar el case 5, 10 ya que la variable x vale 10

6 - Operadores de Visual basic


Los operadores nos permiten operar, validar, comparar, asignar, distinguir, etc.., los datos e instrucciones de cdigo de nuestros programas. A continuacin los operadores mas importantes.

Operadores aritmticos Estos operadores nos permiten trabajar con clculos matemticos como la suma (+), resta (-), divisin (/) y multiplicacin (*). Ejemplos:

a = 5 b = 15 c = a + b ' en este caso la variable c contendra el valor 20 ganancia = 500 perdida = 200 total = ganancia - perdida 'la variable total pasara a valer 300 x = 100 y = 20 z = x / y ' La Variable z vale 5 x = 100 y = 20 z = x * y ' La Variable z vale 2000

Operadores lgicos Se utilizan en expresiones para devolver resultados del tipo True o False, es decir Verdadero o falso. Los mas comunes son el operador And y el operador Or Ejemplos:

If (x = 10) And (nombre = "mara") Then 'solo se ejecutar el cdigo dentro de este bloque IF si la variable 'x vale 10 y la variable nombre es igual a mara End If If (m = 10) Or (nombre = "pedro") Then 'el cdigo se ejecutar si por lo menos una variable es correcta 'es decir si por lo menos se cumple una condicin End If

Operadores de comparacin Los operadores de comparacin se utilizan para comparar expresiones de cualquier tipo. Los mas importantes son: El operador de igualdad (=), menor que (<), mayor que (>),distinto a(<>) Ejemplos:

If label1.Caption = "06/08/1978" Then 'si 'se el control ejecutar label1 el en su caption contiene esa cdigo que este fecha aqu

End If if x > 6 then 'si la variable x es mayor que 6 se ejecutar el cdigo que este aqu end if If pas <> "Estados unidos" Then 'si la variable pas es distinta a "Estados unidos" se ejecutar el cdigo End If

While c <= 87 'mientras 'el Wend la variable c sea menor bucle o igual a 87 se ejecutar While

Por ltimo quedara por ver el operador de concatenacin (&) que se utiliza para unir cadenas de caracteres. Por ejemplo:

nombre = "Jose" apellido = "Peralta" nombrecompleto = nombre & apellido 'La variable nombrecompleto pasara a contener la unin de las otras dos variables 'es decir Jose Peralta

Nota: hay muchos mas operadores en Visual Basic, estos son los bsicos

Volver al men del tutorial visual basic

#$4 Quees un compilador

Compilador
Compilacin redirige aqu. Para otras acepciones, vase recopilacin.

Diagrama a bloques de la operacin de un buen compilador.

Un compilador es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de mquina, pero tambin puede ser un cdigo intermedio (bytecode), o simplemente texto. Este proceso de traduccin se conoce comocompilacin.1 Un compilador es un programa que permite traducir el cdigo fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamente lenguaje de mquina). De esta manera un programador puede disear un programa en un lenguaje mucho ms cercano a como piensa un ser humano, para luego compilarlo a un programa ms manejable por una computadora.
Contenido
[ocultar]

1 Partes de un compilador 2 Historia 3 Tipos de compiladores 4 Proceso de compilacin

5 Etapas del proceso

5.1 Fase de anlisis

5.1.1 Anlisis lxico 5.1.2 Anlisis sintctico 5.1.3 Anlisis semntico

5.2 Fase de sntesis

5.2.1 Generacin de cdigo intermedio

5.3 Optimizacin de cdigo

6 Estructura de datos principales

o o o o o o

6.1 Componentes lxicos o tokens 6.2 rbol sintctico 6.3 Tabla de smbolos 6.4 Tabla de literales 6.5 Cdigo intermedio 6.6 Archivos temporales

7 Vase tambin 8 Referencias 9 Enlaces externos

[editar]Partes

de un compilador

La construccin de un compilador involucra la divisin del proceso en una serie de fases que variar con su complejidad. Generalmente estas fases se agrupan en dos tareas: el anlisis del programa fuente y la sntesis del programa objeto.

Anlisis: Se trata de la comprobacin de la correccin del programa fuente, e incluye las fases correspondientes al Anlisis Lxico (que consiste en la descomposicin del programa fuente en componentes lxicos), Anlisis Sintctico (agrupacin de los componentes lxicos en frases gramaticales ) y Anlisis Semntico (comprobacin de la validez semntica de las sentencias aceptadas en la fase de Anlisis Sintctico).

Sntesis: Su objetivo es la generacin de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generacin de Cdigo (normalmente se trata de cdigo intermedio o de cdigo objeto) y de Optimizacin de Cdigo (en las que se busca obtener un cdigo lo ms eficiente posible).

Alternativamente, las fases descritas para las tareas de anlisis y sntesis se pueden agrupar en Frontend y Back-end:

Front-end: es la parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y est compuesta por las fases comprendidas entre el Anlisis Lxico y la Generacin de Cdigo Intermedio.

Back-end: es la parte que genera el cdigo mquina, especfico de una plataforma, a partir de los resultados de la fase de anlisis, realizada por el Front End.

Esta divisin permite que el mismo Back End se utilice para generar el cdigo mquina de varios lenguajes de programacin distintos y que el mismo Front End que sirve para analizar el cdigo fuente de un lenguaje de programacin concreto sirva para generar cdigo mquina en varias plataformas distintas. Suele incluir la generacin y optimizacin del cdigo dependiente de la mquina. El cdigo que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker)

[editar]Historia
En 1946 se desarroll la primera computadora digital. En un principio, estas mquinas ejecutaban instrucciones consistentes en cdigos numricos que sealaban a los circuitos de la mquina los estados correspondientes a cada operacin, lo que se denomin lenguaje mquina. Pronto los primeros usuarios de estos ordenadores descubrieron la ventaja de escribir sus programas mediante claves ms fciles de recordar que esos cdigos; al final, todas esas claves juntas se traducan manualmente a lenguaje mquina. Estas claves constituyen los llamados lenguajes ensambladores. Pese a todo, el lenguaje ensamblador segua siendo el de una mquina, pero ms fcil de manejar. Los trabajos de investigacin se orientaron hacia la creacin de un lenguaje que expresara las distintas acciones a realizar de una manera lo ms sencilla posible para una persona. El primer compilador fue escrito por Grace Hopper, en 1952 para el lenguaje de programacin A-0. En 1950John Backus dirigi una investigacin en IBM sobre un lenguaje algebraico. En 1954 se empez a desarrollar un lenguaje que permita escribir frmulas matemticas de manera traducible por un ordenador; le llamaron FORTRAN (FORmulae TRANslator). Fue el primer lenguaje de alto nivel y se introdujo en 1957 para el uso de la computadora IBM modelo 704.

Surgi as por primera vez el concepto de un traductor como un programa que traduca un lenguaje a otro lenguaje. En el caso particular de que el lenguaje a traducir es un lenguaje de alto nivel y el lenguaje traducido de bajo nivel, se emplea el trmino compilador. La tarea de realizar un compilador no fue fcil. El primer compilador de FORTRAN tard 18 aospersona en realizarse y era muy sencillo. Este desarrollo de FORTRAN estaba muy influenciado por la mquina objeto en la que iba a ser implementado. Como un ejemplo de ello tenemos el hecho de que los espacios en blanco fuesen ignorados, debido a que el perifrico que se utilizaba como entrada de programas (una lectora de tarjetas perforadas) no contaba correctamente los espacios en blanco. El primer compilador autocontenido, es decir, capaz de compilar su propio cdigo fuente fue el creado para Lisp por Hart y Levin en el MIT en 1962. Desde 1970 se ha convertido en una prctica comn escribir el compilador en el mismo lenguaje que este compila, aunque Pascal y C han sido alternativas muy usadas. Crear un compilador autocontenido genera un problema llamado bootstrapping, es decir el primer compilador creado para un lenguaje tiene que o bien ser compilado por un compilador escrito en otro lenguaje o bien compilado al ejecutar el compilador en un intrprete.

[editar]Tipos

de compiladores

Esta taxonoma de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categoras:

Compiladores cruzados: generan cdigo para un sistema distinto del que estn funcionando. Compiladores optimizadores: realizan cambios en el cdigo para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.

Compiladores de una sola pasada: generan el cdigo mquina a partir de una nica lectura del cdigo fuente.

Compiladores de varias pasadas: necesitan leer el cdigo fuente varias veces antes de poder producir el cdigo mquina.

Compiladores JIT (Just In Time): forman parte de un intrprete y compilan partes del cdigo segn se necesitan.

Pauta de creacin de un compilador: En las primeras pocas de la informtica, el software de los compiladores era considerado como uno de los ms complejos existentes. Los primeros compiladores se realizaron programndolos directamente en lenguaje mquina o en ensamblador. Una vez que se dispone de un compilador, se pueden escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese compilador.

Actualmente existen herramientas que facilitan la tarea de escribir compiladores intrpretes informticos. Estas herramientas permiten generar el esqueleto del analizador sintctico a partir de una definicin formal del lenguaje de partida, especificada normalmente mediante una gramtica formal y barata, dejando nicamente al programador del compilador la tarea de programar las acciones semnticas asociadas.

[editar]Proceso

de compilacin

Es el proceso por el cual se traducen las instrucciones escritas en un determinado lenguaje de programacin a lenguaje mquina. Adems de un traductor, se pueden necesitar otros programas para crear un programa objeto ejecutable. Un programa fuente se puede dividir en mdulos almacenados en archivos distintos. La tarea de reunir el programa fuente a menudo se confa a un programa distinto, llamado preprocesador. El preprocesador tambin puede expandir abreviaturas, llamadas a macros, a proposiciones del lenguaje fuente. Normalmente la creacin de un programa ejecutable (un tpico.exe para Microsoft Windows o DOS) conlleva dos pasos. El primer paso se llama compilacin (propiamente dicho) y traduce el cdigo fuente escrito en un lenguaje de programacin almacenado en un archivo a cdigo en bajo nivel (normalmente en cdigo objeto, no directamente a lenguaje mquina). El segundo paso se llama enlazado en el cual se enlaza el cdigo de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se aade el cdigo 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 cdigo objeto a cdigo mquina, y generando un mdulo ejecutable. Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de compilacin en archivos objetos (un tpico.obj para Microsoft Windows, DOS o para Unix); para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de compilacin se almacena slo temporalmente. Un programa podra tener partes escritas en varios lenguajes (por ejemplo C, C++ y Asm), que se podran compilar de forma independiente y luego enlazar juntas para formar un nico mdulo ejecutable.

[editar]Etapas

del proceso

El proceso de traduccin se compone internamente de varias etapas o fases, que realizan distintas operaciones lgicas. Es til pensar en estas fases como en piezas separadas dentro del traductor, y pueden en realidad escribirse como operaciones codificadas separadamente aunque en la prctica a menudo se integren juntas.

[editar]Fase

de anlisis

[editar]Anlisis lxico

Artculo principal: Analizador lxico.

El anlisis lxico constituye la primera fase, aqu se lee el programa fuente de izquierda a derecha y se agrupa en componentes lxicos (tokens), que son secuencias de caracteres que tienen un significado. Adems, todos los espacios en blanco, lneas en blanco, comentarios y dems informacin innecesaria se elimina del programa fuente. Tambin se comprueba que los smbolos del lenguaje (palabras clave, operadores, etc.) se han escrito correctamente. Como la tarea que realiza el analizador lxico es un caso especial de coincidencia de patrones, se necesitan los mtodos de especificacin y reconocimiento de patrones, se usan principalmente los autmatas finitos que acepten expresiones regulares. Sin embargo, un analizador lxico tambin es la parte del traductor que maneja la entrada del cdigo fuente, y puesto que esta entrada a menudo involucra un importante gasto de tiempo, el analizador lxico debe funcionar de manera tan eficiente como sea posible.

[editar]Anlisis sintctico
Artculo principal: Analizador sintctico.

En esta fase los caracteres o componentes lxicos se agrupan jerrquicamente en frases gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la fase anterior es sintcticamente correcto (obedece a la gramtica del lenguaje). Por lo general, las frases gramaticales del programa fuente se representan mediante un rbol de anlisis sintctico. La estructura jerrquica de un programa normalmente se expresa utilizando reglas recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la definicin de expresiones: 1. Cualquier identificador es una expresin. 2. Cualquier nmero es una expresin. 3. Si expresin1 y expresin2 son expresiones, entonces tambin lo son:

expresin1 + expresin2 expresin1 * expresin2 ( expresin1 )

Las reglas 1 y 2 son reglas bsicas (no recursivas), en tanto que la regla 3 define expresiones en funcin de operadores aplicados a otras expresiones. La divisin entre anlisis lxico y anlisis sintctico es algo arbitraria. Un factor para determinar la divisin es si una construccin del lenguaje fuente es inherentemente recursiva o no. Las construcciones lxicas no requieren recursin, mientras que las construcciones sintcticas suelen requerirla. No se requiere recursin para reconocer los identificadores, que suelen ser cadenas de letras y dgitos que

comienzan con una letra. Normalmente, se reconocen los identificadores por el simple examen del flujo de entrada, esperando hasta encontrar un carcter que no sea ni letra ni dgito, y agrupando despus todas las letras y dgitos encontrados hasta ese punto en un componente lxico llamado identificador. Por otra parte, esta clase de anlisis no es suficientemente poderoso para analizar expresiones o proposiciones. Por ejemplo, no podemos emparejar de manera apropiada los parntesis de las expresiones, o las palabras begin y end en proposiciones sin imponer alguna clase de estructura jerrquica o de anidamiento a la entrada.

[editar]Anlisis semntico
La fase de anlisis semntico revisa el programa fuente para tratar de encontrar errores semnticos y rene la informacin sobre los tipos para la fase posterior de generacin de cdigo. En ella se utiliza la estructura jerrquica determinada por la fase de anlisis sintctico para identificar los operadores y operandos de expresiones y proposiciones. Un componente importante del anlisis semntico es la verificacin de tipos. Aqu, el compilador verifica si cada operador tiene operandos permitidos por la especificacin del lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de programacin requieren que el compilador indique un error cada vez que se use un nmero real como ndice de una matriz. Sin embargo, la especificacin del lenguaje puede imponer restricciones a los operandos, por ejemplo, cuando un operador aritmtico binario se aplica a un nmero entero y a un nmero real. Revisa que los arreglos tengan definido el tamao correcto.

[editar]Fase

de sntesis

Consiste en generar el cdigo objeto equivalente al programa fuente. Slo se genera cdigo objeto cuando el programa fuente est libre de errores de anlisis, 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 cdigo objeto es cdigo de mquina relocalizable o cdigo ensamblador. Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. Despus, cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de mquina que ejecuta la misma tarea. Un aspecto decisivo es la asignacin de variables a registros.

[editar]Generacin de cdigo intermedio


Despus de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explcita del programa fuente. Se puede considerar esta representacin intermedia como un programa para una mquina abstracta. Esta representacin intermedia debe tener dos propiedades importantes; debe ser fcil de producir y fcil de traducir al programa objeto.

La representacin intermedia puede tener diversas formas. Existe una forma intermedia llamada cdigo de tres direcciones que es como el lenguaje ensamblador de una mquina en la que cada posicin de memoria puede actuar como un registro. El cdigo de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como mximo tres operandos. Esta representacin intermedia tiene varias propiedades:

Primera.- Cada instruccin de tres direcciones tiene a lo sumo un operador, adems de la asignacin, por tanto, cuando se generan estas instrucciones, el traductor tiene que decidir el orden en que deben efectuarse las operaciones.

Segunda.- El traductor debe generar un nombre temporal para guardar los valores calculados por cada instruccin.

Tercera.- Algunas instrucciones de tres direcciones tienen menos de tres operandos, por ejemplo, la asignacin.

[editar]Optimizacin

de cdigo

La fase de optimizacin de cdigo consiste en mejorar el cdigo intermedio, de modo que resulte un cdigo mquina ms rpido de ejecutar. Esta fase de la etapa de sntesis es posible sobre todo si el traductor es un compilador (difcilmente un interprete puede optimizar el cdigo objeto). Hay mucha variacin en la cantidad de optimizacin de cdigo que ejecutan los distintos compiladores. En los que hacen mucha optimizacin, 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 ejecucin del programa objeto sin retardar demasiado la compilacin.

[editar]Estructura

de datos principales

La interaccin entre los algoritmos utilizados por las fases del compilador y las estructuras de datos que soportan estas fases es, naturalmente, muy fuerte. El escritor del compilador se esfuerza por implementar estos algoritmos de una manera tan eficaz como sea posible, sin aumentar demasiado la complejidad. De manera ideal, un compilador debera poder compilar un programa en un tiempo proporcional al tamao del mismo.

[editar]Componentes

lxicos o tokens

Cuando un analizador lxico rene los caracteres en un token, generalmente representa el token de manera simblica, es decir, como un valor de un tipo de datos enumerado que representa el conjunto de tokens del lenguaje fuente. En ocasiones tambin es necesario mantener la cadena de caracteres misma u otra informacin derivada de ella, tal como el nombre asociado con un token identificador o el valor de un token de nmero.

En la mayora de los lenguajes el analizador lxico slo necesita generar un token a la vez. En este caso se puede utilizar una variable global simple para mantener la informacin del token. En otros casos (cuyo ejemplo ms notable es FORTRAN), puede ser necesario un arreglo (o vector) de tokens.

[editar]rbol

sintctico

Si el analizador sintctico genera un rbol sintctico, por lo regular se construye como una estructura estndar basada en un puntero que se asigna de manera dinmica a medida que se efecta el anlisis sintctico. El rbol entero puede entonces conservarse como una variable simple que apunta al nodo raz. Cada nodo en la estructura es un registro cuyos campos representan la informacin recolectada tanto por el analizador sintctico como, posteriormente, por el analizador semntico. Por ejemplo, el tipo de datos de una expresin puede conservarse como un campo en el nodo del rbol sintctico para la expresin. En ocasiones, para ahorrar espacio, estos campos se asignan de manera dinmica, o se almacenan en otras estructuras de datos, tales como la tabla de smbolos, que permiten una asignacin y desasignacin selectivas. En realidad, cada nodo del rbol sintctico por s 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 rbol sintctico puede estar representado por un registro variable, con cada clase de nodo conteniendo solamente la informacin necesaria para ese caso.

[editar]Tabla

de smbolos

Esta estructura de datos mantiene la informacin asociada con los identificadores: funciones, variables, constantes y tipos de datos. La tabla de smbolos interacta con casi todas las fases del compilador: el analizador lxico, el analizador sintctico o el analizador semntico pueden introducir identificadores dentro de la tabla; el analizador semntico agregar tipos de datos y otra informacin; y las fases de optimizacin y generacin de cdigo utilizarn la informacin proporcionada por la tabla de smbolos para efectuar selecciones apropiadas de cdigo objeto. Puesto que la tabla de smbolos tendr solicitudes de acceso con tanta frecuencia, las operaciones de insercin, eliminacin y acceso necesitan ser eficientes, preferiblemente operaciones de tiempo constante. Una estructura de datos estndar para este propsito es la tabla de dispersin o de clculo de direccin, aunque tambin se pueden utilizar diversas estructuras de rbol. En ocasiones se utilizan varias tablas y se mantienen en una lista o pila.

[editar]Tabla

de literales

La bsqueda y la insercin rpida son esenciales tambin para la tabla de literales, la cual almacena constantes y cadenas utilizadas en el programa. Sin embargo, una tabla de literales necesita impedir las eliminaciones porque sus datos se aplican globalmente al programa y una constante o cadena

aparecer slo una vez en esta tabla. La tabla de literales es importante en la reduccin del tamao de un programa en la memoria al permitir la reutilizacin de constantes y cadenas. Tambin es necesaria para que el generador de cdigo construya direcciones simblicas para las literales y para introducir definiciones de datos en el archivo de cdigo objeto.

[editar]Cdigo

intermedio

De acuerdo con la clase de cdigo intermedio (por ejemplo, cdigo de tres direcciones o cdigo P) y de las clases de optimizaciones realizadas, este cdigo puede conservarse como un arreglo de cadenas de texto, un archivo de texto temporal o bien una lista de estructuras ligadas. En los compiladores que realizan optimizaciones complejas debe ponerse particular atencin a la seleccin de representaciones que permitan una fcil reorganizacin. Generacin de cdigo intermedio Despus de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explcita del programa fuente. Se puede considerar esta representacin intermedia como un programa para una mquina abstracta. Esta representacin intermedia debe tener dos propiedades importantes; debe ser fcil de producir y fcil de traducir al programa objeto. La representacin intermedia puede tener diversas formas. Existe una forma intermedia llamada cdigo de tres direcciones, que es como el lenguaje ensamblador para una mquina en la que cada posicin de memoria puede actuar como un registro. El cdigo de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como mximo tres operandos. El programa fuente de (1) puede aparecer en cdigo de tres direcciones como

temp1 := entarea1(60) temp2 := id3 * temp1 (2) temp3 := id2 + temp2 id1 := temp3

Esta representacin intermedia tiene varias propiedades. Primera, cada instruccin de tres direcciones tiene a lo sumo un operador, adems de la asignacin. Por tanto, cuando se generan esas instrucciones el compilador tiene que decidir el orden en que deben efectuarse, las operaciones; la multiplicacin precede a la adicin al programa fuente de. Segunda, el compilador debe generar un nombre temporal para guardar los valores calculados por cada instruccin. Tercera, algunas instrucciones de tres direcciones tienen menos de tres operadores, por ejemplo la primera y la ltima instrucciones de. Optimizacin de Cdigo

La fase de optimizacin de cdigo trata de mejorar el cdigo intermedio de modo que resulte un cdigo de mquina ms rpido de ejecutar. Algunas optimizaciones son triviales. Por ejemplo, un algoritmo natural genera el cdigo intermedio (2) utilizando una instruccin para cada operador de la representacin del rbol despus del anlisis semntico, aunque hay una forma mejor de realizar los mismos clculos usando las dos instrucciones

Temp1 := id3 * 60.0 (3) Id1 := id2 + temp1

Este sencillo algoritmo no tiene nada de malo, puesto que el problema se puede solucionar en la fase de optimizacin de cdigo. Esto es, el compilador puede deducir que la conversin de 60 de entero a real se puede hacer de una vez por todas en el momento de la compilacin, de modo que la operacin entreal se puede eliminar. Adems, temp3 se usa slo una vez, para transmitir su valor a id1. Entonces resulta seguro sustituir a id1 por temp3, a partir de lo cual la ltima proposicin de (2) no se necesita y se obtiene el cdigo de (3). Hay muchas variaciones en la cantidad de optimizacin de cdigo que ejecutan los distintos compiladores. En lo que hacen mucha optimizacin llamados compiladores optimizadores, una parte significativa del tiempo del compilador se ocupa en esta fase. Sin embargo hay optimizaciones sencillas que mejoran significativamente del tiempo del compilador se ocupa en esta fase. Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo de ejecucin del programa objeto sin retardar demasiado la compilacin.

[editar]Archivos

temporales

Al principio las computadoras no tenan la suficiente memoria para guardar un programa completo durante la compilacin. Este problema se resolvi mediante el uso de archivos temporales para mantener los productos de los pasos intermedios durante la traduccin o bien al compilar al vuelo, es decir, manteniendo slo la informacin suficiente de las partes anteriores del programa fuente que permita proceder a la traduccin. Las limitaciones de memoria son ahora un problema mucho menor, y es posible requerir que una unidad de compilacin entera se mantenga en memoria, en especial si se dispone de la compilacin por separado en el lenguaje. Con todo, los compiladores ocasionalmente encuentran til generar archivos intermedios durante alguna de las etapas del procesamiento. Algo tpico de stos es la necesidad de direcciones de correccin hacia atrs durante la generacin de cdigo.

[editar]Vase

tambin

Lenguaje de programacin Proceso de traduccin de programas Lenguaje ensamblador Ensamblador Desensamblador Decompilador Intrprete Depurador Lenguaje de alto nivel Lenguaje de bajo nivel Lenguaje de mquina Historia de la construccin de los compiladores Libros Principles of Compiler Design, Compilers: Principles, Techniques, and Tools

[editar]Referencias
Laborda, Javier; Josep Galimany, Rosa Mara Pena, Antoni Gual (1985). Software. Biblioteca prctica de la computacin.

1.

Qu es un compilador?
Por Bulmaro Noguera el 20 de diciembre del 2010 | 1 comentario

Figura 1: Funcionamiento del compilador

Muchas veces, hemos escuchado el trmino compilador, sobre todo dentro de los campos de estudio que se especializan en la Informtica, pero sabemos realmente Qu significa este trmino tan difundido? Hoy veremos el concepto de compilador, para qu se utilizan y cmo se clasifican estos pequeos programas, los cuales son los responsables de que existan todas las aplicaciones que utilizamos en nuestros ordenadores a diario.

Qu es un compilador?
Un compilador es un pequeo programa informtico, que se encarga de traducir (compilar) el cdigo fuente de cualquier aplicacin que se est desarrollando. En pocas palabras, es un software que se encarga de traducir el programa hecho en lenguaje de programacin, a un lenguaje de mquina que pueda ser comprendido por el equipoy pueda ser procesado o ejecutado por este. Un concepto un poco ms elaborado es el siguiente: Un compilador es un programa que convierte o traduce el cdigo fuente de un programa hecho en lenguaje de alto nivel, a un lenguaje de bajo nivel (lenguaje de mquina).

Figura 2: Captura del compilador de Borland C++

Partes de un compilador
Bsicamente, un compilador cuenta con dos partes fundamentales: El Front End y elBack End. Estas partes se complementan para lograr el objetivo del compilador. A continuacin, describiremos cada una de estas partes: Front End: El Front End es la parte del compilador que interacta con el usuario y por lo general, es independiente de la plataforma en la que se trabaja. Se encarga de realizar el anlisis del cdigo fuente a compilar y verifica que este sea vlido, as como tambin, genera el rbol de derivacin y rellena los valores de la tabla de smbolos.

Back End: Esta parte del compilador es la encargada de generar el cdigo en formato de mquina, a partir del trabajo hecho por el Front End.

Figura 3: Captura de pantalla del compilador Free Pascal

Tipos de compiladores
Existen varios tipos de compiladores, los cuales se adecuan a los requerimientos de losprogramadores. Podemos destacar los compiladores cruzados, compiladores optimizadores, compiladores de una sola pasada y de varias pasadas, compiladores JIT y los conocidos intrpretes, que traducen el cdigo del programa en tiempo real. Cada uno de estos compiladores, se adecua a un lenguaje en especfico o a varios. Algunos son de cdigo abierto, otros son de licencia propietaria. La versatilidad de unos los hace mucho ms populares que otros, pero a grandes rasgos, el escoger un determinado compilador depender de los requerimientos de cada usuario.

Importancia de los compiladores


La importancia de los compiladores radica en que, sin estos programas no existira ninguna aplicacin informtica, ya que son la base de la programacin en cualquier plataforma.
Categoras: Informtica, Software Etiquetas: compilar programas, crear software, desarrollar software, programacin

ANTERIOR Qu es la DMZ de los routers? SIGUIENTE Cmo configurar Bluetooth en Linux (I)

1
Resumen

Un compilador es un programa que traduce uncdigo de entrada comnmente escrito en un lenguaje de programacin a otro lenguaje que ser interpretado por lamquina destino para su ejecucin. Palabras clave Compilador, anlisis lxico, anlisissintctico, anlisis semntico, generador de cdigo.[1] I NTRODUCCIN no de los principales mecanismos de interaccin entreu n a co mp u tado ra y un u su ario v iene dado po r el envo y recepcin de mensajes textuales, el usuarioingresa ciertos comandos por medio del teclado y observa losr e s u l t a d o s e n u n a p a n t a l l a . A u n q u e e n l a a c t u a l i d a d l a respuesta de un equipo de cmputo se refleja en una novedosainterfaz de usuario, podemos decir que cualquier accin que serealice sob re stas interfa ces se traducen a secu encias d ecomandos que se interpretan como si fuesen ingresadas por elteclado, sta funcin se define como traduccin. U [2] D EFINICIN 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 intrpretes del cual podemos defi documento se public con el propsito de compartir un fragmento del proyecto: Qu es un compilador?, untrabajo de investigacin desarrollado durante el estudio de lacarrera Ingeniera en Informtica que se imparte en laUPIICSAIPN para la asignatura Compiladores y aspectosgenerales incluidos en la tesis Desarrollo de un compilador para pseudocdigo en lenguaje espaol. Autor

Michel Ruiz Tejeida, Ingeniero en Informtica,Mxico, Ciudad de Mxico. Estudi en la Unidad ProfesionalInterdisciplinaria de Ingeniera y Ciencias Sociales yAdministrativas (UPIICSA IPN), actualmente desarrollador de software, (sitio:http://upiicsa.dyndns.org/miruizt/ ).Un compilador, es aquel traductor que tiene como entradau na sen tencia en leng uaje fo rmal y co mo salid a tien e unf ichero ejecutab le, es d ecir, realiza un a tradu ccin d e un lenguaje de alto nivel a cdigo mquina, (tambin se entiende por compilador aquel programa que proporciona un ficheroobjeto en lugar del ejecutable final)Por otro lado, un intrprete, es como un compilador, soloque la salida es un a ejecucin . El prog rama d e en trada sereconoce y ejecuta a la vez. No se produce un resultado fsico(cdigo mquina) sino lgico (una ejecucin).[3] A NTECEDENTES HISTRICOS Durante la dcada de los aos 40 se crea la primer computadora digital, una computadora es una herramientaelectrn ica qu e p ermit e almacen ar, o rg an izar y p ro cesar informacin; sin embargo para su funcionamiento debe ser p rog ramad a, es decir, el usu ario d eb e indicar las r d en es necesarias para realizar alguna tarea especfica.En un principio las rdenes no eran ms que un alfabetonumrico mejor conocido como cdigo binario o lenguajemquina, las operaciones que se realizaban eran de muy bajonivel: mover datos de una ubicacin a otra, sumar el contenidode registros, comparar datos, entre otras cosas, ste tipo de p ro g ramaci n era lenta, tediosa y p rop ensa a erro res, sin mencionar el problema de mantener un sistema o peor an,modificarlo. A razn de este hecho se implementaron clavesm s f c i l e s d e r e c o r d a r q u e l o s c d i g o s n u m r i c o s , traducindolas manualmente a lenguaje mquina.Estas claves constituan el llamado lenguaje

ensamblador,e l c u a l s e g e n e r a l i z a a l a u t o m a t i z a r s e l o s p r o c e s o s d e traduccin. Aunque estas palabras permitan reducir el nmerod e l n e a s a l r e a l i z a r u n p r o g r a m a , t o d a v a r e s u l t a b a complicado poder estructurar una lgica de programacin.En la bsqueda de un mtodo que permitiera facilitar eld esarrollo d e aplicacion es un g rupo d e trab ajo de IBM (International Business Machines) comenz el desarrollo deu n a t c n i c a q u e s u s t i t u y e r a l o s c o m a n d o s d e l l e n g u a j e ensamblador por expresiones con una lgica ms natural alhabla o la escritura; aunque en un principio se rechaz la idead e crear p rog ramas a partir d e un cdig o en el qu e no seapreciaban las sentencias directas que la mquina ejecutara,con el uso del lenguaje y la comprobacin del funcionamiento,s e c o n v i r t i e n e l p r i m e r l e n g u a j e d e a l t o n i v e l , m e j o r conocido como FORTRAN y con esto la aparicin del primer compilador. Qu es un compilador? Michel Ruiz Tejeida, Ciudad de Mxico, 2011

2El d esarrollo d el co mp ilad o r u tilizado po r el lengu aje FROTAN tard poco ms de una dcad a e n s u imp le men taci n, u no d e lo s p rin cip ales p robl e mas qu e p resen taro n du rante ese tie mp o fu e la arqu itec tu ra d e la mquina en que se utilizara.A f in ales d e la dcad a

d e lo s aos 50 , se of reci un a solucin al problema de que un compilador fuera utilizable por varias mquinas, sta consista en dividir el compilador en dosetapas, una inicial (anlisis) y otra final (de sntesis) que sedenominaron front-end y back-end. En la etapa inicial seanaliza el programa fuente y la etapa final es la encargada degenerar el cdigo utilizado por la mquina objeto. La unin dee s t a s d o s e t a p a s s e r e a l i z a p o r m e d i o d e u n l e n g u a j e intermedio universal, este lenguaje, ampliamente di scutido pero nunca implementado, se denomin UNCOL (UniversalComputer Oriented Language).[4] E STRUCTURA DE UN COMPILADOR A.Analizador lxico La primera fase de un compilador es leer el lenguaje deen trada, en este pun to el analizado r lxico se encarg a d eagrupar los caracteres en lexemas y producir una salida ensecuencia de tokens para cada lexema en el programa fuente.D u r a n t e e s t e p r o c e s o d e r e c o n o c i m i e n t o d e l e x e m a s e l an alizado r lx ico enva el f lujo d e tok ens al a n alizad o r sintctico e interacta con la tabla de smbolos, de tal formaque por cada identificador que encuentre, debe introducirseese lexema en la tabla de smbolos.C o m o e l a n a l i z a d o r l x i c o e s e l e n c a r g a d o d e l e e r e l programa fuente, adems de formar los lexemas se ocupa deeliminar los cometarios y espacios en blanco (caracteres deespacio, tabuladores, retorno de lnea o cualquier caracter quesepare los tokens). B.Analizador sintctico Todos los lenguajes de programacin tienen reglas precisas,las cuales definen una estructura sintctica de los programas bien formados; un programa por ejemplo, puede estar formado por procedimientos, stos a su vez por instrucciones y unainstru ccin po r un a secu encia d e palab ras qu e tienen un aexpresin regular declarada.La segunda fase del compilador es el anlisis sintctico o

parsing. El parser utiliza los primeros componentes de lostokens producidos por el analizador lxico para crear unarepresentacin en forma de rbol que describa la estructuragramatical del flujo de tokens.Existen tres tipo s de an alizado res sin tcticos p ara las gramticas:1 . Un iversales: Son aqu ellos an alizad o res capaces d ean alizar cualqu ier tipo d e g ramtica, (ejemp los: Cock e -Younger-Kasami y Earley).2. Descendentes: Se caracterizan por construir el rbol deanlisis sintctico de la parte superior (raz) a la parte inferior (hojas).3. Ascendentes: Se caracterizan por construir los rbolesempezando por las hojas y avanzan hasta la raz. C.Analizador semntico Se co mp o ne d e un con jun to d e ru tin as ind ep end ientes, ll amadas por los analizadores lxico y sintctico.E l a n l i s i s s e m n t i c o u t i l i z a c o m o e n t r a d a e l r b o l sintctico detectado por el anlisis sintctico para comprobar restricciones de tipo y otras limitaciones semnticas y preparar la generacin de cdigo.En compiladores de un solo paso, las llamadas a las rutinassemn ticas se realizan d irectamen te d esd e el anali zado r sintctico y son dichas rutinas las que llaman al generador decdigo. El instrumento ms utilizado para conseguirlo es lagramtica de atributos.En compiladores de dos o ms pasos, el anlisis semnticose realiza independientemente de la generacin de cdigo, pasndose informacin a travs de un archivo intermedio, quenormalmente contiene informacin sobre el rbol sintctico enfo rma lin eal (para f acilitar su man ejo y h acer po sib le su almacenamiento en memoria auxiliar).En cualquier caso, las rutinas semnticas suelen hacer usode una pila

(la pila semntica) que contiene la informacins e m n t i c a a s o c i a d a a l o s o p e r a n d o s ( y a v e c e s a l o s operadores) en forma de registros semnticos. D.Generador de cdigo intermedio General men te un co mp ilado r cu en ta con un f ron t end encargado de realizar las fases de compilacin antes vistas y lageneracin de un cdigo intermedio, a partir del cual un back-end genera el cdigo destino.Existen dos representaciones intermedias principales:1 . N o t a c i n s u f i j a 2 . C u d r u p l a s Los operadores didicos (o binarios) pueden especificarsemediante tres notaciones principales:a) Prefija: el operador didico es analizado antes que susoperandos. b ) I n f i j a : e l o p e r a d o r d i d i c o e s a n a l i z a d o e n t r e s u s operandos. 3c) Sufija: el operador didico es analizado despus que susoperandos.En los lenguajes de programacin clsicos, los operadoresdidicos se representan usualmente en notacin infi ja. Lanotacin prefija permite al operador influir sobre la manera enque se procesan sus operandos, pero a cambio suele exigir mucha ms memoria. La sufija no permite esa influencia, peroes p ti ma en p ro ceso d e me mo ria y p ermi te elimin ar el procesado de los parntesis.Lo s operad o res mo n dico s s lo pu ed en p resen t arse en notacin prefija o sufija.Adems, un rbol sintctico puede representarse en formade tuplas de n elementos, de la forma (operador, operando-1, ..., operando-k, nombre). Las tuplas pueden tener longitudvariable o fija (con operandos nulos). Las ms tpicas son lascudruplas, aunque stas pueden representarse tambin enf orma de tripletes. E.Generador de cdigo

La quinta etapa del compilador tambin conocida comogenerador de cdigo o back-end, es el proceso encargado detraducir el lenguaje intermedio a un cdigo mquina, el cualdepender de la arquitectura de la misma.El cdigo generado por un compilador puede ser de uno delos tipos siguientes:a) Cdigo simblico. b) Cdigo relocalizable. Es el sistema ms flexible y el mscomn en compiladores comerciales.c)Cdigo absoluto. F.Optimizador de cdigo El ltimo proceso de un compilador es opcional, ya que lao ptimizacin d e cdig o dep end e d e la arq uitectu ra d e la mquina, si sta acepta paralelismo y que tipo de paralelismo,adems de que no es posible saber a ciencia cierta si un cdigoo p t i m i z a d o e s m e j o r q u e e l c d i g o i n g r e s a d o p o r e l programador.A PENDICE Token: es un par que consiste en un nombre de token y unvalor de atributo opcional. El nombre del token es un smboloabstracto que representa un tipo de unidad lxica; por ejemplo,una palabra clave especfica o una secuencia de caracteres deentrada que denotan un identificador. Los nombres de lostokens son los smbolos de entrada que procesa el analizador sintctico. Lexema: es una secuencia de caracteres en el programafuente, que coinciden con el patrn para un token y que elanalizador lxico identifica como una instancia de ese token.R EFERENCIAS [1] Aho, A. V., Ullman, J. D., & Hopcroft, J. E. (1988). Estructura de Datosy Algoritmos. (A. Vargas, & J. Lozano, Trads.) Ciudad de Mxico,Distrito Federal, Mxico: Addison-Wesley .[2] Aho, A., Lam, M., Sethi, R., & Ullman, J. (2008). Compiladores.Principios, tcnicas y herramientas (Segunda Edicin

ed.). (L. CruzCastillo, Ed., & A. V. Romero Elizondo, Trad.) Naucalpan de Jurez,Estado de Mxico, Mxico: Pearson Educacin .[3] Castillo, H. (1 de Marzo de 2003). Compiladores, Visin histrica deldesarrollo de los compiladores. Recuperado el 22 de Noviembre de2009, de Benemrita Universidad Autnoma de Puebla: Facultad deCiencias de la Computacin: www.cs.buap.mx/~hilda/notascompila.doc .[4] S. Glvez Rojas, M. A. Mora Mata, "Compiladores: traductores ycompiladores con lex/yacc, jflex/cup y javacc", Universidad de Mlaga,2005 .[5] Steel, T. B. (9 de May de 1961). A first version of UNCOL. New York, NY, United States of America .[6] Universidad Tecnolgica Nacional. (1 de Agosto de 2008). Historia delos compiladores. Recuperado el 22 de Noviembre de 2009, de FacultadRegional Tucuman: Departamento de Sistemas:http://www.frt.utn.edu.ar/sistemas/sintaxis/page28.html .[7] Valverde Andreu, J. (1989). Compiladores e intrpretes: un enfoque pragmtico (Segunda ed.). Madrid, Espaa: Ediciones Daz de Santos .

También podría gustarte