Publicado el 18 de Marzo del 2019
1.200 visualizaciones desde el 18 de Marzo del 2019
170,9 KB
11 paginas
Creado hace 20a (11/01/2005)
TEMA 2: Lenguajes de programación
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
Fernando Barber y Ricardo Ferrís
9
TEMA 2: Lenguajes de programación
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.
Fernando Barber y Ricardo Ferrís
10
TEMA 2: Lenguajes de programación
Ejemplo: Descripción sintáctica de una expresión matemática en diagrama
sintáctico:
---> 4*(3+1)
2.1.3.- Semántica
Define el significado de las construcciones sintácticas del lenguaje y de las expresiones
y tipos de datos utilizadas
Ejemplo:
if (a>b) max := a else max := b;
el significado corresponde a la construcción algorítmica
Si … entonces … sino …
Además la expresión después de If debe tener un resultado lógico (verdad o
falso.)
2.2.- Lenguajes de bajo nivel y lenguajes de alto nivel.
Los lenguajes de programación se pueden clasificar en lenguajes de bajo y alto nivel
dependiendo de lo cercanos o lejanos que estén de la arquitectura de la máquina en la
que van a funcionar.
2.2.1.- Lenguajes de bajo nivel:
• Están basados directamente en la máquina de Von Neumann, por lo que están a
un nivel muy cercano a la máquina.
Fernando Barber y Ricardo Ferrís
11
TEMA 2: Lenguajes de programación
• Las instrucciones del lenguaje son las instrucciones del microprocesador del
ordenador, que normalmente son demasiado simples.
• Es exclusivo de cada ordenador.
• Es difícil y costoso de programar.
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
mov ax, 0003
add ax, 0005
Código máquina (Hexadecimal)
B8 03 00
05 05 00
2.2.2.- Lenguajes de alto nivel:
• Están basados en máquinas abstractas, que facilitan la comprensión por
personas.
•
Instrucciones más flexibles y potentes.
• Necesita un traductor para convertir el programa a lenguaje máquina, que es el
que entiende el ordenador.
• No depende del procesador, por lo que el mismo programa sirve para diferentes
ordenadores.
Fernando Barber y Ricardo Ferrís
12
• Al tener que traducirlo, es más lento e ineficiente que el lenguaje de bajo nivel.
TEMA 2: Lenguajes de programación
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
- Funcionales
- Logicos
⎫
⎪
⎬
⎪
⎭
⎫
⎪
⎬
⎪
⎭
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.
Fernando Barber y Ricardo Ferrís
13
TEMA 2: Lenguajes de programación
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.
Pila
Fija
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.
Fernando Barber y Ricardo Ferrís
14
TEMA 2: Lenguajes de programación
la
programación,
los
fueron
ensambladores
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
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 ejecu
Comentarios de: TEMA 2: Lenguajes de programación (0)
No hay comentarios