Compartir este blog

Buscar



Herramientas generadoras de compiladores

Esta es una lista de las herramientas más conocidas para la construcción de compiladores:

Si tenemos un enlace roto hacerlo saber en la sección de comentarios.
 

Nombre: Lex y Yacc 
Descripción: los generadores más populares de analizadores léxicos y sintácticos LALR(1).
Lenguaje: Pascal - C
Descargar: Turbo Pascal y FPK


Nombre: Flex y Bison 
Descripción: versiones mejoradas (generan analizadores más rápidos) de Lex y Yacc.
Lenguaje: C
Descargar: Linux - DOS

 
Nombre: BTYacc (Back Tracking Yacc)
Descripción: es una versión modificada de yacc que genera parsers con capacidad de backtracking automático.
Lenguaje: C
Descargar: DOS

 
Nombre: BYacc (Berkeley Yacc)
Descripción: es un generador de parsers LALR(1) de dominio público compatible con AT&T Yacc (el Yacc original).
Lenguaje: C
Descargar


Nombre: YAY (Yet Another YACC)
Descripción: es un generador de analizadores sintácticos ascendentes similar a Yacc pero con una extensión sumamente importante: soporta gramáticas LALR(2).
Lenguaje: C
Descargar: DOS

 
Nombre: ParseGenerator
Descripción: es una IDE (Entorno Integrado de Desarrollo), bajo Windows32, para los generadores AYACC y  ALEX, clones de Yacc y Lex respectivamente.
Lenguaje: C - C++
Descargar: Win32

 
Nombre: Eli 
Descripción: ofrece soluciones a casi todas las tareas relacionadas con la implementación de un lenguaje.
Lenguaje:
Descargar: ELI

 
Nombre: COCKTAIL
Descripción: es un conjunto de generadores de programas para casi todas las fases de un compilador. LALR(1) - LL(1) - Generador de ASTs - Evaluador de Atributos - Herramienta de transformación de programas.
Lenguaje: 
Descargar: COCKTAIL

 
Nombre: PCCTS 
Descripción: es un conjunto de herramientas para la construcción de traductores y reconocedores de lenguajes. Comprende tres herramientas: ANTLR un generador de parsers LL(k), DLG un analizador de analizadores léxicos y SORCERER un generador de parsers para árboles que le permite al programador definir la estructura del árbol por medio de una gramática.
Lenguaje:
Descargar: PCCTS

 
Nombre: Coco/R
Descripción: es un generador de parsers descendentes.
Lenguaje: 
Descargar: COCO(R)

 
Nombre: Depot4 
Descripción: es un generador de parsers descendentes que soporta especificaciones al etilo de la traducción dirigida por la sintaxis.
Lenguaje: 
Descargar: Depot4

 
Nombre: LLgen 
Descripción: es una herramienta para generar parsers descendentes a partir de una gramática ELL(1).  La gramática puede ser ambigua o más general que una ELL(1).
Lenguaje: 
Descargar: LLGEN

 
Nombre: PRECC
Descripción: es un generador de compiladores para gramáticas dependientes del contexto con infinito lookahead.
Lenguaje: 
Descargar: PRECC

 
Nombre: RDP
Descripción: es un generador de parsers descedentes para gramáticas LL(1).
Lenguaje: 
Descargar: RDP

 
Nombre: Visual Parse++
Descripción:  provee una interfase visual que permite aprender y utilizar, de manera interactiva, la tecnología de parsing. Genera parsers en C, C++, VBasic y Java.
Lenguaje: ?
Descargar: VISUALPARSE++

 
Nombre: AnaGram
Descripción:  es un generador de parsers LALR con resincronización automática en presencia de errores. Usualmente no necesita de un analizador léxico.
Lenguaje: ?
Descargar: AnaGram

 
Nombre: TCLL1
Descripción: es un generador de parsers descendentes para gramáticas LL(1) y LL(k).
Lenguaje: ?
Descargar: TCLL1

 
Nombre: Elegant (recomendado por David Riemens)
Descripción: es un lenguaje orientado a la construcción de compiladores desarrollado por  Phillips y puesto a dispocisión del público en 1997.
Lenguaje:  ?
Descargar: Elegant

 
Nombre: Cogencee (link recomendado por Peter Evans) 
Descripción: generador de parsers descendentes en Delphi.
Lenguaje: Delphi 
Descargar: Cogencee

 
Nombre: ProGrammar (link recomendado por Norm Wilson)
Descripción: un moderno generador de parsers OO.
Lenguaje:  ?
Descargar: ProGrammar


Referencias:

Compiladores e Intérpretes  http://www.ucse.edu.ar/fma/compiladores/
0

Cargadores y Ligadores

Qué es un cargador y ligador?

 
Un ligador es un programa de sistema que combina dos o mas programas objeto separados y permite que se hagan referencias unos a otros, o sea, que cada uno de estos programas pueden hacer referencia a código ó variables de los otros programas con los que está enlazado.

En muchos programas el cargador hace la labor del programa de enlace, por que existe solo un "linking loader" y no existe programa de enlace independiente. Es importante señalar que no se necesita un programa de enlace ni un cargador separado para cada traductor en el sistema, ya que estos programas trabajan con el programa objeto, sin importar el lenguaje fuente. Por otro lado es importante que cada compilador o ensamblador produzca el programa objeto usando el mismo formato. Cada programa objeto es un archivo de récord.

Un cargador es un programa que coloca en la memoria para su ejecución, el programa guardado en algún dispositivo de almacenamiento secundario. Un cargador es un programa del sistema que realiza la función de carga, pero muchos cargadores también incluyen relocalización y ligado. Algunos sistemas tienen un ligador para realizar las operaciones de enlaces y un cargador separado para manejar la relocalización y la carga.

Los procesos de ensamblado y carga están íntimamente relacionados.

El cargador consiste en un juego de instrucciones que permiten al dispositivo de entrada ( teclado ó unidad de cinta ) asignar la dirección de inicio de la memoria y asegurar que el computador leerá el programa y lo cargara byte a byte.

Funciones De Un Cargador Y Un Ligador


Las funciones mas importantes de un cargador son: colocar un programa objeto en la memoria e iniciar su ejecución. Si tenemos un cargador que no necesita realizar las funciones de ligado y relocalización de programas, su operación es simple pues todas las funciones se realizan en un solo paso. Se revisa el registro de encabezamiento para comprobar se ha presentado el programa correcto para la carga (entrando en la memoria disponible). A medida que lee cada registro de texto, el código objeto que contiene pasa a dirección de la memoria indicada. Cuando se encuentra el registro de fin, el cargador salta a la dirección especificada para iniciar la ejecución del programa cargado. Un programa objeto contiene instrucciones traducidas y valores de datos del programa fuente y específica direcciones en memoria dónde cargaran estos elementos.
Carga que lleva el programa objeto a la memoria para su ejecución.

  • Relocalización que modifica el programa objeto de forma que puede cargarse en una dirección diferente de la localidad especificada originalmente.
  • Ligado que combina dos o mas programas objeto independientes y proporciona la información necesaria para realizar diferencias entre ellos.
  • El cargador es un programa del sistema que realiza la función de carga pero muchos cargadores también incluyen relocalización y ligado. Algunos sistemas tienen un ligador (ó editor de ligado ) para realizar las operaciones de enlace, y un cargador separado para manera la relocalización y la carga.
  • En la mayoría de los casos todos los traductores de programas ( esto es, ensambladores y compiladores ) de un sistema en particular producen programas objeto en el mismo formato.

De esta misma forma, puede usarse el cargador o ligador del sistema con independencia del lenguaje de programación fuente original, se suele utilizar el término cargador en lugar de cargador y ligador, los procesos de ensamblado y carga están íntimamente relacionados entre sí.

Se han desarrollado herramientas especiales de software, llamadas cargadores para asistir, al programados en la carga del programa. El cargador es normalmente un programa pequeño que permite al usuario entrar directamente las palabras de instrucción y datos a direcciones concretas de la memoria mediante, ó un teclado ó una cinta magnética.


Tipos de cargadores y Ligadores


Cargadores Bootstrap: el programa cargador una vez, situado en la memoria del computador, cargará el programa de aplicación y los datos. Pero, previamente, se ha debido cargar el cargador en la memoria. Y esto se puede realizar por los siguientes métodos:

  • Entrada manual: mediante el teclado el usuario teclea el cargador BOOTSTRAP. Después de esto, el cargador se carga así mismo en la memoria del computador.
  • Entrada por ROM: es posible tener las instrucciones de inicialización almacenados permanentemente en alguna porción de la ROM, en lugar de introducirlas manualmente por teclado o por panel frontal. Cuando se requiere el programa de bootstra, el operador simplemente dirige al computador, mediante los conmutadores del panel, a ejecutar las instrucciones memorizadas en ROM: al estar el programa almacenado en ROM se elimina también la posibilidad de borrados accidentales.

Cargadores iniciales: indican a la computadora la forma de poner, dentro de la memoria principal unos datos que están guardados en un periférico de memoria externa ( cinta, disco, etc ). Sirven para cargar en la memoria pequeños programas que inician el funcionamiento de una computadora .
Algunas computadoras de carácter general no tienen en memoria ningún programa de forma permanente y cuando se desconectan pierden toda la información de su memoria interna. Al volverlos a conectar no son capaces de controlar ningún periférico. Se hace así para que sea el usuario el que ponga los programas que le interese ejecutar.

Cargadores absolutos: el programa cargador pone en memoria las instrucciones guardadas en sistemas externos. Independientemente de que sea un cargador inicial, o no sin dichas instrucciones se almacenan siempre en el mismo espacio de memoria ( cada vez que se ejecuta el programa cargador ) se dice que es un cargador absoluto.

Cargadores con reubicación: en ocasiones un mismo programa necesita ejecutarse en diferentes posiciones de memoria. Para esto la traducción debe estar realizada en forma adecuada, es decir no utilizando referencias absolutas a direcciones en memoria, sino referencias a una dirección especial llamada de reubicación.

Cargadores ligadores: conocidos también como linker . un linker se un término en inglés que significa montar.
Montar un programa consiste en añadir al programa objeto obtenido a la traducción las rutinas externas a las que hace referencia dicho programa. El ensamblador debe permitir dichas referencias y las rutinas deben estar a su vez en lenguaje máquina guardadas en algún elemento accesible por el montador. Generalmente, dichas rutinas se encuentran guardadas en un fichero especial al que suele denominarse librería porque están almacenadas todas las rutinas externas susceptibles de ser utilizadas por los diferentes programas del usuario. Allí va el programa ligador cuando esta realizando el montaje de un programa a buscarlas y las adjunta al programa objeto. 

Editores de ligado: la diferencia fundamental entre un editor de ligado y un cargador ligador es:
Primero.- se ensambla o compila el programa fuente, produciendo un programa objeto ( que puede contener varias secciones de control diferentes ). Una cargador ligador realiza todas las operaciones de ligado y relocalización incluyendo búsqueda automática en bibliotecas, si se específica, y carga el programa ligado directamente en la memoria para su ejecución. Por otro lado un editor de ligado produce una versión ligada del programa ( llamada a menudo modulo de carga ó imagen ejecutable ) que se escribe en un archivo o biblioteca para su ejecución posterior.

Cuando el usuario está listo para ejecutar el programa ligado, se puede utilizar un cargador relocalizador simple para cargar el programa en la memoria. La única modificación necesaria al código objeto es la suma de una dirección de carga real a los valores relativos del programa. El editor de ligado realiza la relocalización de todas las secciones de control al inicio del programa ligado. De esta forma todos los elementos que necesitan modificarse en el momento de la carga tienen valores relativos al inicio del programa ligado.
Los editores de ligado se pueden utilizar para construir paquetes de subrutinas u otras secciones de control que se suelen utilizar juntas . esto puede ser útil al tratar con bibliotecas de subrutinas que manejan lenguajes de programación de alto nivel. A veces permiten al usuario especificar que las referencias externas no se resuelven por búsqueda automática en biblioteca.

Ligado dinámico: ofrece algunas ventajas sobre los tipos de ligado. Proporciona la posibilidad de cargar las rutinas sólo cuando si se necesitan. Si las subrutinas son grandes ó tienen muchas referencias externas se pueden conseguir ahorros considerables de tiempo y espacio en memoria.
El ligado dinámico evita la necesidad de cargar la biblioteca completa para cada ejecución. Puede incluso hacer innecesario que el programa conozca el conjunto de subrutinas que se podría utilizar. El nombre de la subrutina se trataría simplemente como otro elemento de entrada. En el método que se utilice aquí las rutinas que se carguen dinámicamente deben llamarse por medio de una solicitud del servicio al sistema operativo. Este método también podría considerarse como una solicitud a una parte del cargador que se mantiene en la memoria durante la ejecución del programa.
Cuando se utiliza ligado dinámico, la asociación de dirección real y el nombre simbólico de la rutina llamada no se hace hasta que se ejecuta la proposición llamada.

Proceso De Carga Absoluta

Para ser ejecutados los programas se deben ubicar e la memoria principal. Una tarea muy importante es asociar instrucciones y datos con localidades específicas de memoria. El trabajo de realizar está asociación se deja algunas veces al usuario, otras al traductor, otras al programa llamado cargador y otras más al sistema operativo. La asociación de instrucciones con ciertas localidades de memoria se conoce como ligamiento. Dentro de la programación el lenguaje máquina, el ligamiento y los sistemas de memoria virtual actuales lo realizan de manera dinámica mientras se ejecuta el programa. El retraso del ligamiento aumenta la flexibilidad para el usuario y el sistema, pero los traductores, ligadores y los sistemas operativos resultan más complejos. Un cargador es un programa que coloca las instrucciones de un programa y sus datos en memoria principal. Un cargador absoluto coloca las instrucciones y los datos en las localidades precisas indicadas por el programa en lenguaje de máquina. 

El proceso de carga absoluta consiste en que con la máquina vacía ó inactiva no hay necesidad de hacer relocalización de programas tan solo se puede especificar la dirección absoluta del programa que se cargue en primer lugar. En la mayoría de los casos este programa es el sistema operativo que ocupa un lugar predefinido en la memoria. Esto significa que se necesitan algunos medios para realizar las funciones de el cargador absoluto. Una opción es que el operador introduzca en la memoria el código objeto de un cargador absoluto, utilizando los interruptores en la consola del computador. Algunos computadores requerían que el operador hiciera exactamente eso. Sin embargo este proceso es demasiado incomodo y propenso a errores para ser una buena solución del problema.

proceso de carga

Otra posibilidad es que el programa del cargador absoluto resida permanente en una memoria sólo de lectura ( ROM). Cuando se produce una señal de hardware la máquina empieza a ejecutar este programa de la ROM. En algunos computadores el programa se ejecuta directamente en la ROM; en otros el programa se copia de la ROM a la memoria principal y se ejecuta allí. Sin embargo algunas máquinas no tienen ese almacenamiento sólo de lectura, además puede no ser conveniente cambiar un programa en ROM si es necesario hacer modificaciones en el cargador absoluto. Una solución inmediata es tener una función de hardware incorporada que lea un registro de longitud fija de algún dispositivo en alguna localidad fija de la memoria; el dispositivo que se utilice puede seleccionarse mediante interruptores de la consola. Una vez completa la operación de lectura, el control se pasa automáticamente a la dirección de la memoria dónde se almaceno el registro. Este registro contiene instrucciones de máquina que cargan el programa absoluto que sigue. Si el proceso de carga requieren de mas instrucciones de las que pueden leerse en un solo registro, el primer registro causa la lectura de otros y estos a su vez pueden originar la lectura aún de más registros de ahí el término arranque. 

La carga absoluta necesita que el modulo de carga ocupe siempre la misma posición de la memoria principal. Así pues , todas las referencias del módulo de carga para el cargador deben ser direcciones específicas ó absolutas en memoria principal. Por ejemplo si x en la siguiente figura es la posición de 1024 la primera palabra del módulo de carga destinado a esa región de memoria tendrá la dirección 1024. 

La asignación de direcciones especificas a la referencia a memoria de un programa pueden ser realizada tanto por el programador como el tiempo de compilación o ensamblaje. Con el primer método se tienen varias desventajas. En primer lugar todos los programadores tendrán que conocer la estrategia de asignación deseada para situar los módulos en memoria principal. En segundo lugar si hace alguna modificación en el programa que suponga inserciones ó borrados en el cuerpo del módulo tendrán que cambiarse todas las direcciones. Por consiguiente es preferible permitir que las referencias a memoria dentro de los programas se expresen simbólicamente y que se resuelvan en el momento de la compilación o el ensamblaje. Así cuando se presente el módulo para la entrada a un cargador absoluto, el ensamblador o el compilador convertirán todas estas referencias direcciones específicas. 

Proceso De Carga Relocalizable

En la relocalización se establece la correspondencia entre las direcciones usadas en el programa y direcciones físicas cada vez que se utilizan durante la ejecución del programa. Las direcciones lógicas generadas por el ensamblador y el enlazador no se alteran durante la carga. Comenzaremos por ver un sencillo método en el cuál el programa se carga en posiciones contiguas de la memoria; es decir el programa no está disperso por la memoria. En la siguiente figura se presenta un cargador sencillo que puede usarse con la relocalización dinámica. En este caso el cargador lee encabezado del archivo ejecutable y determina la cantidad de espacio necesaria para el programa. Después asigna espacio suficiente para el programa y copia el archivo ejecutable a memoria. Cuando se carga el programa en la memoria, el cargador establece la correspondencia necesaria para el programa, pasando la dirección de carga y el tamaño v del programa a una rutina llamada establecer-correspondencia. 


Ligaduras De Subrutinas

 
Al estudiar subrutinas es conveniente identificar dos funciones distintas : el invocador y el invocado.
  • El invocador : es la sección de código que inicia la llamada a la subrutina.
  • El invocado: es la subrutina llamada por el invocador.
Examinaremos las transferencias de control necesarias para implantar la invocación de subrutinas. Al efectuar una llamada se transfiere el control al cuerpo de la subrutina; cuando esta concluye, devuelve el control a la instrucción que está inmediatamente después de la llamada a la subrutina desde diversos puntos en el programa, las subrutinas deben ser capaces de regresar a distintos lugares del programa. La dirección de retorno es la dirección de la instrucción que esta inmediatamente después de la instrucción que transfiere el control al invocado. El invocador proporciona la dirección del retorno al invocado como parte de enlace de la subrutina.

El enlace de subrutina es la estructura con que se comparte información sobre el invocador y el invocado. El invocador establece parte del enlace de subrutina en una secuencia de instrucciones llamada secuencia de arranque. El invocado establece lo que resta del enlace de subrutina en el prologo de subrutina, el cuál puede estar vacío como suponemos de todas las rutinas están bien estructuradas, las instrucciones al final de la subrutina regresan al invocador. Está secuencia de instrucciones se denomina epílogo de subrutina . cuando el control regresa al invocador, es posible que este tenga que limpiar el enlace; este conjunto de instrucciones se denomina secuencia de limpieza y también puede estar vacía.


1

Sofware de Sistemas

¿QUÉ ES EL SOFTWARE DE SISTEMAS? 

 

Software son las instrucciones electrónicas que van a indicar a la PC que es lo que tiene que hacer. También se puede decir que son los programas usados para dirigir las funciones de un sistema de computación o un hardware.

El software es el conjunto de instrucciones que las computadoras emplean para manipular datos. Sin el software, la computadora sería un conjunto de medios sin utilizar. Al cargar los programas en una computadora, la máquina actuará como si recibir a una educación instantánea; de pronto "sabe" cómo pensar y cómo operar. El Software es un conjunto de programas, documentos, procedimientos, y rutinas asociados con la operación de un sistema de cómputo. Distinguiéndose de los componentes físicos llamados hardware. Comúnmente a los programas de computación se les llama software; el software asegura que el programa o sistema cumpla por completo con sus objetivos, opera con eficiencia, esta adecuadamente documentado, y suficientemente sencillo de operar. Es simplemente el conjunto de instrucciones individuales que se le proporciona al microprocesador para que pueda procesar los datos y generar los resultados esperados. El hardware por si solo no puede hacer nada, pues es necesario que exista el software, que es el conjunto de instrucciones que hacen funcionar al hardware.

Por que estudiarlo

 

El software para uso general ofrece la estructura para un gran número de aplicaciones empresariales, científicas y personales. El software de hoja de cálculo, de diseño asistido por computadoras (CAD), de procesamiento de texto, de manejo de Bases de Datos, pertenece a esta categoría. La mayoría de software para uso general se vende como paquete; es decir, con software y documentación orientada al usuario (manual de referencia, plantillas de teclado y demás).

 

Diferencias con el software de aplicación

 

El software de aplicación esta diseñado y escrito para realizar tareas específicas personales,,empresariales o científicas como el procesamiento de nóminas, la administración de los recursos humanos o el control de inventarios. Todas éstas aplicación es procesan datos (recepción de materiales) y generan información (registros de nómina). Para el usuario. Sistemas Operativos Un sistema Operativo (SO) es en sí mismo un programa de computadora. Sin embargo, es un programa muy especial, quizá el más complejo e importante en una computadora. El SO despierta a la computadora y hace que reconozca a la CPU, la memoria, el tecla do, el sistema de vídeo y las unidades de disco.

Además, proporciona la facilidad para que los usuarios se comuniquen con la computadora y sirve de plataforma a partir de la cual se corran programas de aplicación. Cuando enciendes una computadora, lo primero que ésta hace es llevar a cabo un autodiagnóstico llamado auto prueba de encendido (Power On Self Test, POST). Durante la POST, la computadora identifica su memoria, sus discos, su teclado, su sistema de vídeo y cualquier otro dispositivo conectado a ella. Lo siguiente que la computadora hace es buscar un SO para arrancar (boot). Una vez que la computadora ha puesto en marcha su SO, mantiene al menos parte de éste en su memoria en todo momento.

 

Mientras la computadora esté encendida, el SO tiene 4 tareas principales.

 

1.
Proporcionar ya sea una interfaz de línea de comando o una interfaz gráfica al usuario, para que este último se pueda comunicar con la computadora. Interfaz de línea de comando: tú introduces palabras y símbolos desde el teclado de la computadora, ejemplo, el MS-DOS. Interfaz gráfica del Usuario (GUI), seleccionas las acciones mediante el uso de un Mouse para pulsar sobre figuras llamadas iconos o seleccionar opciones de los menús.

2.
Administrar los dispositivos de hardware en la computadora. Cuando corren los programas, necesitan utilizar la memoria, el monitor, las unidades de disco, los puertos de Entrada/Salida (impresoras, módems, etc). El SO sirve de intermediario entre los programas y el hardware.

3.
Administrar y mantener los sistemas de archivo de disco.  Los SO agrupan la información dentro de compartimientos lógicos para almacenarlos en el disco. Estos grupos de información son llamados archivos. Los archivos pueden contener instrucciones de programas o información creada por el usuario. El SO mantiene una lista de los archivos en un disco, y nos proporciona las herramientas necesarias para organizar y manipular estos archivos.

4.
Apoyar a otros programas. Otra de las funciones importantes del SO es proporcionar servicios a otros programas. Estos servicios son similares a aquellos que el SO proporciona directamente a los usuarios. Por ejemplo, listar los archivos, grabarlos a disco, eliminar archivos, revisar espacio disponible, etc. Cuando los programadores escriben programas de computadora, incluyen en sus programas instrucciones que solicitan los servicios del SO. Estas instrucciones son conocidas como "llamadas del sistema".

Referencias

http://www.salonhogar.com/ciencias/tecnologias/computadoras/definicion
http://www.conozca_su_pc.com.ar/soft1.htm
http://www.salonhogar.com/ciencias/tecnologias/computadoras/softwaredeusogeneral.htm
http://www.salonhogar.com/ciencias/tecnologias/computadoras/software de aplicaciones.htm


0

Archivo del Blog, Mapa del Sitio Compiladores/Interpretes




0

Lenguajes Compiladores e Intérpretes

Programación web, desarrollo de sitios web dinámicos

Android Studio Desarrollo de App

Derechos Reservados. Pedro Antonio Villalta. Con tecnología de Blogger.

Quieres crear un dominio y hosting, te recomendamos

Hostgator, NeoThek, Hostinger y GoDaddy Proveedores de Hosting y Dominios

Hosting Gratis Let's Get Back to Business. Start with a $1.99 .COM from GoDaddy.

Namecheap.com, el mejor proveedor que recomendamos.

Namecheap.com

Directorio Para Promocionar tu Web

Incrementa las visitas registrándote en estos directorios

directorio de blogs Blogazos.com. Directorio de Blogs en Español Directorio Web de enlaces mexicanos Directorio de paginas webs 360dir

Actividad en Twitter

Registrate para recibir en tu e-mail todo lo nuevo que se publica en este blog. Contenido exclusivo

Seguinos en

Síguenos en Google+ Síguenos en Facebook Seguir en Twitter Sígueme en Youtube Sígueme en Likedin Sígueme en Pinterest Rss feed Sígueme en Slideshare

Translate / Traducir

Visitas

Comunidad Ingeniería en Sistemas

Aumenta Visitas

Aumenta tus visitas con TxtFull.com y TotalPing.com

Mi Ping en TotalPing.com Protected by Copyscape Plagiarism Software

Enlaces Patrocinados

 Registrate en Intercambio de Enlaces|Programacion por Efemosse

Entradas Populares

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Visitantes Online

Estos usuarios tambien nos han visitado.

Seguidores