






Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Habla sobre los diferentes tipos de lenguajes para programación en HTML
Tipo: Guías, Proyectos, Investigaciones
1 / 11
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!







2.1.- Introducción a los lenguajes de programación
¿Qué es un lenguaje?
Conjunto de símbolos y palabras (vocabulario o léxico) y conjunto de reglas (sintaxis y semántica) que permiten agrupar los símbolos para formar las frases del lenguaje.
¿De programación?
Que sirve para especificar algoritmos sobre un ordenador.
Un programa se escribe como una secuencia de frases del lenguaje.
Un lenguaje de programación viene definido por un léxico, una sintaxis y una semántica
2.1.1.- Léxico
Conjunto de símbolos que se pueden usar en un lenguaje.
Estos símbolos o elementos básicos del lenguaje, podrán ser de los siguientes:
2.1.2.- Sintaxis
Consta de unas definiciones, denominadas reglas sintácticas o producciones que especifican la secuencia de símbolos que forman una frase del lenguaje. Estas reglas dicen si una frase está bien escrita o no.
Las reglas sintácticas pueden contener dos tipos de elementos:
Existen diversas formas de especificar las reglas, pero únicamente vamos a ver dos de ellas:
Notación BNF: ::= Definición1 | Definición2 | ...
Los elementos terminales, o sea, que pertenecen al vocabulario, se escriben tal cual. Los elementos no terminales se escriben entre los símbolos <>.
Ejemplo: Descripción sintáctica de una expresión matemática en notación BNF: ---> 4*(3+1) ::= | () | ::= + | - | * | / ::= | ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
Los elementos terminales se inscriben en una elipse. Los elementos no terminales se inscriben en un rectángulo.
En lenguajes de bajo nivel distinguimos entre lenguaje máquina y lenguaje ensamblador.
Lenguaje máquina: Instrucciones reconocidas por los circuitos del procesador. Se codifican en binario. Los datos se referencian por su posición de memoria.
Lenguaje ensamblador: Codificación mnemotécnica del lenguaje máquina. Necesita un traductor. Se pueden utilizar etiquetas en vez de posiciones de memoria.
Ejemplo: Suma de 3 + 5 en un procesador 8086 (también Pentium, Pentium II, …) Ensamblador Código máquina (Hexadecimal) mov ax, 0003 B8 03 00 add ax, 0005 05 05 00
2.2.2.- Lenguajes de alto nivel:
Ejemplo: Suma de 3 + 5 en C++ x = 3 + 5
2.3.- Clasificación de los lenguajes de alto nivel
2.3.1.- Paradigmas de programación.
Por paradigma de programación se entiende una “filosofía” de programar, es decir, los lenguajes que utilizan un mismo paradigma de programación utilizarán los mismos conceptos básicos para programar. Se pueden definir cuatro tipos fundamentales:
⎪⎬⎫^ Procedurales , describen los pasos a seguir para encontrar la solución
⎪⎬⎫ Declarativos , describen el problema a solucionar
Imperativos: La unidad de trabajo es la sentencia (acción). Pascal, C.
Orientados a Objetos: La unidad de trabajo es el objeto. Agrupa las estructuras de datos con sus algoritmos. Smalltalk.
Funcionales: La unidad es la función. Consiste en combinar funciones para conseguir funciones más complejas hasta llegar a la función que es el programa. Lisp. Basado en el Cálculo Lambda.
Lógicos: Se especifican los hechos y las propiedades que especifican el problema. El sistema utiliza esa información para encontrar la solución. Prolog. Basado en la Lógica de Predicados.
2.3.2.- Clasificación de lenguajes según la administración de memoria
Estáticos: Los requisitos de memoria del programa se pueden calcular antes de ejecutar el programa. No permiten recursividad. Fortran, Cobol.
1951 En 1951, apenas siete años después de que Von Neumann introdujera el concepto de programa almacenado en memoria, Wilkes, Wheeler y Gill describen un cargador de programas que realiza la conversión de valores decimales a binarios para permitir una mayor comodidad en la codificación de instrucciones y direcciones. Con objeto de simplificar la programación, los ensambladores fueron enriqueciéndose paulatinamente, hasta convertirse en traductores de representaciones simbólicas (mnemotécnicas) del lenguaje máquina (lenguajes ensambladores) al propio lenguaje máquina. Los lenguajes ensambladores siguen siendo próximos a los lenguajes de máquina y, si bien simplifican considerablemente el proceso de la programación, mantienen dos de sus principales inconvenientes: requieren un excesivo nivel de detalle en la escritura de programas y son dependientes del sistema computador concreto, de cuyas instrucciones elementales hace representación simbólica. Es por ello que se intentó crear un nuevo lenguaje que no estuviese basado directamente en las instrucciones propias de la máquina (que no dependiese de la máquina concreta), sino en una abstracción de éstas y que fuese más cómoda para el programador. De la misma forma, no se utilizarían directamente los dispositivos físicos (registros, celdas de memoria, etc.) sino abstracciones de éstos (variables.) De esta forma surge un nuevo concepto de lenguaje de programación, donde cada lenguaje lleva asociado una máquina abstracta sobre el que se puede ejecutar su código. Si deseamos ejecutar sobre un ordenador concreto los programas escritos en un lenguaje de alto nivel, debemos traducirlos a otros equivalentes en un código máquina concreto (manualmente o mediante un proceso denominado compilación) o disponer de una herramienta que lea el programa e interprete paso a paso el significado de cada sentencia del programa (proceso de interpretación). 1957- Trabajando en esta dirección, entre 1954 y 1958, John Backus lideró un grupo de trabajo que tenía por objeto la realización de un traductor a código máquina de fórmulas matemáticas que expresaran cálculos. El resultado fue tanto la especificación de un lenguaje de alto nivel, el Fortran, como la realización de un compilador que traducía dicho lenguaje al código máquina de un ordenador concreto (IBM 704). Alrededor del año 1960 se crearon tres lenguajes decisivos: el Algol 60, el Cobol y el Lisp. 1958- El Lisp , diseñado por John McCarthy, fue también un lenguaje muy innovador en el sentido de que se aleja mucho del concepto de la máquina de Von Neumann. Se basa casi exclusivamente en el uso de funciones y en el cálculo lambda y su objetivo principal era el cálculo simbólico. Fue el precursor de los denominados lenguajes funcionales. Este lenguaje ha sido ampliamente utilizado en el ámbito de la inteligencia artificial. 1959- El Cobol fue encargado por el Departamento de Defensa de EUA. Su objetivo era claramente práctico y aunque se realizó sin tener en cuenta algunos de los avances realizados en el momento en el diseño de lenguajes de programación, fue innovador en
el tratamiento de los datos. Fue además el primer lenguaje estandarizado, lo que favoreció su utilización posterior. 1960- El Algol 60 fue principalmente un lenguaje académico, en donde se introdujeron numerosos conceptos innovadores que fueron adoptados por gran parte de los lenguajes posteriores. El lenguaje fue completamente especificado con la notación BNF, un formalismo equivalente a las gramáticas incontextuales. 1964- En 1964 nace el Basic. Este lenguaje se diseñó desde el punto de vista del usuario, es decir, se procuró que el lenguaje fuera fácil de aprender y manejar. Este lenguaje tuvo bastante éxito en la enseñanza y sobre todo, en la programación de los primeros micro- computadores, pero apenas se llegó a utilizar en el ambiente profesional. 1967- En 1967 se desarrolló Simula , basado en el Algol 60. El campo de aplicación principal de este lenguaje era la simulación, pero lo más importante es que introdujo el concepto de clase y es, por tanto, el precursor de los tipos abstractos de datos. 1972- El Pascal nació en torno a 1970, después de la crisis del software. Diseñado por Niklaus Wirth con la idea de crear un lenguaje sencillo y claro que permitiese afrontar la complejidad creciente de los programas de la época. Es el primer lenguaje basado exclusivamente en la programación estructurada, y gracias a su simplicidad ha sido el lenguaje ideal sobre el que desarrollar la semántica de los lenguajes y la verificación formal, cuyos inicios datan también de estos años. Además el Pascal ha sido buen progenitor de posteriores lenguajes. En este sentido, Wirth diseñó posteriormente el Modula-2 lenguaje levantado sobre muchos conceptos introducidos en Pascal, si bien hace hincapié en la construcción del programa entendido como conjunto de módulos independientes. 1972- Después del Pascal se desarrollaron multitud de lenguajes, entre ellos el C , que a costa de un menor nivel de abstracción, aporta una gran flexibilidad y control sobre los recursos de la máquina. Aparece también por esta época el concepto de programación concurrente. 1975- El primer lenguaje de programación lógica, el Prolog , se desarrolló en 1975 por los grupos de Kowalski y Colmerauer. Sin embargo, a diferencia de lo ocurrido con otros lenguajes, su gestación fue bastante larga, se puede considerar que los inicios del Prolog son de 1960. Al igual que el Lisp, el Prolog se aleja totalmente del concepto de la máquina de Von Neumann y se basa casi totalmente en la lógica de primer orden. El Prolog presenta como importante ventaja frente a otros lenguajes que la verificación de programas es casi inmediata debido a su base lógica, sin embargo, tiene como contrapartida que suele ser bastante ineficiente. 1983- En 1983 se crea el Ada , un lenguaje desarrollado bajo los auspicios del Departamento de Defensa norteamericano. Se basa en gran medida en el Pascal, aunque es más complejo. Permite abordar adecuadamente la programación concurrente y el manejo de excepciones e introduce el concepto de sobrecarga.
2.5.- Traductores e intérpretes.
Para que un procesador ejecute un programa escrito en un lenguaje de alto nivel es necesario que lo transforme a su equivalente en lenguaje máquina. Para ello existen dos posibilidades, la interpretación y la traducción.
2.5.1.- Interpretación:
Un intérprete traduce y ejecuta sentencia a sentencia el programa original (programa fuente.) Programa fuente
Intérprete
2.5.2.- Traducción:
Traduce el programa original en un programa escrito en lenguaje máquina.
Existen dos tipos de traductores:
2.5.3.- Comparación compiladores-intérpretes:
Actualmente casi todos los lenguajes son compilados o una mezcla entre los dos (Prolog, Java.)
2.5.4.- Fases del proceso de compilación:
2.5.5.- Tipos de errores: