Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Lenguajes de Programación, Guías, Proyectos, Investigaciones de Programación de Red

Habla sobre los diferentes tipos de lenguajes para programación en HTML

Tipo: Guías, Proyectos, Investigaciones

2019/2020

Subido el 01/02/2022

hobs-drive
hobs-drive 🇲🇽

5

(1)

1 documento

Vista previa parcial del texto

¡Descarga Lenguajes de Programación y más Guías, Proyectos, Investigaciones en PDF de Programación de Red solo en Docsity! TEMA 2: Lenguajes de programación Fernando Barber y Ricardo Ferrís 9 TEMA 2: Lenguajes de programación 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: • Identificadores: nombres simbólicos que se darán a ciertos elementos de programación (p.e. nombres de variables, tipos, módulos, etc.). • Constantes: datos que no cambiarán su valor a lo largo del programa. • Operadores: símbolos que representarán operaciones entre variables y constantes. • Instrucciones: símbolos especiales que representarán estructuras de procesamiento, y de definición de elementos de programación. • Comentarios: texto que se usará para documentar los programas TEMA 2: Lenguajes de programación Fernando Barber y Ricardo Ferrís 10 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: • Elementos Terminales (∈ Vocabulario) • Elementos no Terminales, que son construcciones intermedias de la gramática. Existen diversas formas de especificar las reglas, pero únicamente vamos a ver dos de ellas: • Notación BNF (Backus-Naur Form). Es de las primeras notaciones que se empezó a utilizar para especificar lenguajes de programación. Notación BNF: <elemento no terminal>::= 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) <expresión> ::= <numero> | (<expresión>) | <expresión><operador><expresión> <operador> ::= + | - | * | / <numero> ::= <digito> | <numero><digito> <digito> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 • Diagramas sintácticos. Es una representación gráfica de la sintaxis. Tiene la ventaja de ser más intuitivo. Los elementos terminales se inscriben en una elipse. Los elementos no terminales se inscriben en un rectángulo. TEMA 2: Lenguajes de programación Fernando Barber y Ricardo Ferrís 13 • Al tener que traducirlo, es más lento e ineficiente que el lenguaje de bajo 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: - Imperativos - Orientados a objetos ⎪ ⎭ ⎪ ⎬ ⎫ Procedurales, describen los pasos a seguir para encontrar la solución - Funcionales - Logicos ⎪ ⎭ ⎪ ⎬ ⎫ 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. TEMA 2: Lenguajes de programación Fernando Barber y Ricardo Ferrís 14 Basados en pila: Se calculan los requisitos de memoria generales del programa antes de ejecutarlo. El resto de la memoria necesaria durante la ejecución del programa se utiliza en forma de pila. Algol 60. Fija Pila Dinámicos: No se puede saber a priori la cantidad de memoria que utilizará el programa. El programa puede crear y destruir estructuras de datos en cualquier lugar del programa. Prolog, Lisp. C++ es un lenguaje principalmente basado en pila, pero que también tiene características dinámicas. 2.3.3.- Otras clasificaciones Por la forma en que se pasa a lenguaje máquina. • Lenguajes compilados → C, Pascal, C++,... • Lenguajes interpretados → BASIC Por el objetivo principal de los programas escritos en el lenguaje. • Lenguajes de propósito general → C, Delphi... • Lenguajes para la enseñanza → Logo, Pascal, Modula, BASIC... • Lenguajes para cálculo científico → Fortran, Matlab, Mathematica, Maple... • Lenguajes para gestión → Cobol... • Lenguajes para la gestión de bases de datos → System Query Languages (SQL) Informix... • Lenguajes de inteligencia artificial → Prolog, Lisp... • Programación multiplataforma e internet → Java 2.4.-Historia de los lenguajes de alto nivel 1945- En 1945, el matemático y químico Jonh (Janos) von Neumann presenta los principios generales que debe seguir una máquina de propósito general. El primer lenguaje en el que se programaron los ordenadores fue el propio del procesador, es decir, instrucciones análogas a las presentes en la máquina de Von Neumann. Sin embargo era necesario tener en cuenta los detalles propios de la máquina para poder realizar cualquier cálculo y además era muy tedioso introducir el programa en el ordenador. TEMA 2: Lenguajes de programación Fernando Barber y Ricardo Ferrís 15 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 TEMA 2: Lenguajes de programación Fernando Barber y Ricardo Ferrís 18 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: • Ensamblador: Cuando el lenguaje fuente es ensamblador. • Compilador: Cuando el lenguaje fuente es de alto nivel. 2.5.3.- Comparación compiladores-intérpretes: • Un intérprete puede ejecutar un programa directamente, incluso sin estar completo. Un compilador ha de traducirlo completamente antes de ejecutarlo. • Un programa interpretado ocupa poca memoria. • Un programa compilado es más rápido. TEMA 2: Lenguajes de programación Fernando Barber y Ricardo Ferrís 19 • El compilador crea un ejecutable independiente del propio compilador. Un programa interpretado necesita siempre su intérprete. Actualmente casi todos los lenguajes son compilados o una mezcla entre los dos (Prolog, Java.) 2.5.4.- Fases del proceso de compilación: • Análisis léxico: Identificación de palabras y símbolos del lenguaje. • Análisis sintáctico: Comprobación de las reglas sintácticas. • Análisis semántico: Comprobación de las reglas semánticas (variables no declaradas, comprobación de tipos, …). Interpretación de las órdenes. • Optimización: Análisis del programa para mejorarlo (en velocidad, en espacio de memoria) 2.5.5.- Tipos de errores: • Errores de compilación: Los producidos en la fase de compilación o interpretación de un programa, es decir, cuando no se cumplen las reglas sintácticas o semánticas. • Errores de ejecución: Los producidos durante la ejecución del programa. Estos mensajes de error no son producidos por el compilador, sino por una porción de código que el compilador añade al programa. • Errores lógicos: Cuando el programa no da ningún error pero los resultados no son los esperados. Puede ser porque el algoritmo ha sido incorrectamente implementado o porque el algoritmo estaba mal hecho.