Download Lenguajes de programación

Document related concepts

Scala (lenguaje de programación) wikipedia , lookup

Programación funcional wikipedia , lookup

J (lenguaje de programación) wikipedia , lookup

Lisp wikipedia , lookup

Scheme wikipedia , lookup

Transcript
Ing. Gracia María Gagliano
Lenguajes de Programación
1
Lenguajes de programación
Introducción
En esencia, en un programa se reproduce el comportamiento de algún procedimiento que puede
existir en el mundo real para solucionar determinado problema también real. Esa solución se implementa
en una computadora por medio de un lenguaje especial, no natural, que designamos como lenguaje de
programación.
¿Cómo se atraviesa el problema para plasmar su solución en un programa?. Partimos de
considerar que, en mayor o menor medida la realidad es compleja, entonces para encontrar una manera
de solucionar un problema real es necesario afrontar esa complejidad y llegar a dominarla. Un
instrumento fundamental para ello es la abstracción.
¿Qué es la abstracción?
El conocimiento que las personas tenemos de los objetos, las situaciones y los procesos del mundo
real no lo obtenemos por el concreto contacto con ellos, sino por una representación mental que
hacemos, de esa realidad.
Para llegar a esto, incorporamos información a través de nuestros sentidos mediante técnicas
como la observación y la interrogación (¿qué…?, ¿cuál…?, ¿a dónde….?, etc.), y por medio de una
potente operación intelectual denominada abstracción, nuestra mente se concentra, sin que lo notemos,
en captar los aspectos esenciales y básicos para el nivel de conocimiento que pretendemos. Ignora la
información que sea irrelevante y resalta los detalles y cualidades que sean significativos. Entonces
nuestro pensamiento, con las características que ha distinguido de la realidad, reconstruye el todo en su
integridad. Podemos decir que hacer abstracción de algo supone identificar particularidades claves de
ese algo, separarlas y quedarse con ellas como si fueran una totalidad y no una parte.
La abstracción es uno de los procesos mentales más comunes que realizamos de manera
rutinaria y usamos sin darnos cuenta. Constituye una herramienta indispensable en el razonamiento, la
conceptualización, la comprensión y otras acciones mentales; le da al ser humano capacidad para
deducir, para extrapolar lo aprendido a cualquier otra situación, para comparar o sacar conclusiones.
Esta capacidad mental de aislar partes de un todo para reflexionar sobre ellas y/o comprenderlas
resulta ser un elemento fundamental para la investigación científica, la lógica, e inclusive para
la creatividad. Así es que la abstracción no se instala sólo en el campo del saber (la psicología, la
filosofía, la informática, etc.) sino que también lo hace en otros ámbitos como, por ejemplo, el arte.
Pero, ¿cuál es el medio de qué nos valemos los seres humanos para realizar esta construcción
mental (abstracción)?.
Recurrimos a una facultad propia y exclusiva de los seres humanos, el lenguaje.
El lenguaje, como sistema de símbolos y reglas, aporta un conjunto infinito de palabras. Se
constituye así no sólo en el más importante medio de comunicación humano sino también en el medio
por el cual el hombre asocia significado a los contenidos de su pensamiento; es el lenguaje el que le
permite construir un modelo abstracto de la realidad. Está tan vinculado al pensamiento humano, que su
total carencia hace que no se encuentre en el hombre indicios de inteligencia.
La abstracción en informática
Vimos ya que el hombre, para conocer el mundo real, lo representa en su mente y por medio del
lenguaje le asocia un significado. Pero el hombre no usa el lenguaje sólo para esto, sino también para
comunicar a otro individuo lo que “tiene en su mente” utilizando, en este caso, el lenguaje oral o el escrito.
Como resultado del proceso de comunicación el individuo receptor “arma en su mente” otra
representación de la realidad, que es, igualmente válida.
En general un lenguaje de programación tiene el mismo comportamiento, solo que el receptor es
una computadora, por ello es una de las principales herramientas en el proceso de desarrollo de software
(fig.1).
Ing. Gracia María Gagliano
Lenguajes de Programación
Proceso
de
abstracción
Modelo
abstracto
Mundo
real
[en una mente
humana]
Lenguaje
2
Modelo abstracto
equivalente
[en una mente humana]
Modelo abstracto
equivalente
[en una computadora]
fig.1
El “mundo real” que el programador enfrenta es el enunciado de una situación problemática que
de por sí ya es una abstracción de la realidad, pues es una descripción en la que se han dejado de lado
algunos detalles no esenciales tal que termina siendo un conjunto de cuestiones que se plantean para
ser resueltas. Al buscar la solución crea, en su mente, una abstracción del problema resultando así
mucho más fácil su abordaje, para encontrar un método que describa el proceso de solución.
Encontrado el método, es decir, paso a paso “lo qué hay que hacer”, lo implementará en un
programa mediante un lenguaje de programación.
Ejemplo:
HECHO REAL
En un seminario sobre “Teoría de
los lenguajes” que tiene un cupo de
100 asistentes se registran apellido,
edad e importe pagado en concepto
de inscripción (no todos pagan
igual valor) por los presentes al
mismo.
ENUNCIADOS A RESOLVER
PROBLEMA 1:
Teniendo como dato el apellido de
cada asistente a un seminario se
quiere determinar cuántos no
asistieron sabiendo que el cupo era
de 100.
PROBLEMA 2:
Calcular la edad promedio de los
asistentes a un seminario a partir de
la edad de cada uno de ellos.
PROBLEMA 3:
Calcular el importe promedio
pagado por los asistentes a un
seminario a partir del valor pagado
por cada uno de ellos.
fig.2
Ing. Gracia María Gagliano
Lenguajes de Programación
3
En la descripción de un proceso, cuanto más se puede aislar la esencia del problema significa que
mayor es el nivel de abstracción alcanzado.
Por todo esto podemos decir que un programa es una descripción abstracta de un procedimiento
que existe o puede existir en el mundo real y que los lenguajes de programación son las herramientas
mediante las cuales los programadores pueden implementar esos modelos abstractos.
Por lo tanto es, por medio de un lenguaje de programación que se puede representar, en la
computadora, el proceso de solución de un problema.
Evidentemente la abstracción es clave para diseñar un buen programa.
¿Qué es un lenguaje de programación?
Proceso de
solución de un
problema
Lenguaje de programación
Máquina
fig.3
Si nos enfocamos en los elementos individuales que lo constituyen, podemos ver que no se trata
de un lenguaje natural, sino de un idioma artificialmente creado y que esos elementos constituyen un
conjunto finito y corresponden a instrucciones y expresiones de significado claro y preciso.
Si nos enfocamos en su funcionamiento podemos ver que se trata de un programa. Por lo tanto,
responde a la descripción abstracta de un proceso. En este proceso, que se refiere a la manera de
indicarle a la computadora que haga determinadas tareas entran en juego por un lado, las tareas en sí
y por el otro, la máquina (hardware) subyacente a ellas. Los dos elementos afectaron a la construcción
de los lenguajes desde los inicios de la informática ya que la evolución de la tecnología de las
computadoras tuvo como consecuencia una ampliación en su campo de uso, aunque ello trajo aparejado
un aumento en la complejidad de las soluciones.
Sin olvidar que, máquina-tareas a realizar, se interrelacionan e influencian entre sí, nos referiremos
a continuación al peso que, cada uno de ellos de manera individual ha tenido y tiene en el diseño de un
lenguaje de programación.
Lenguajes de programación y máquina
De acuerdo con cuánto le permitan al programador abstraerse del funcionamiento de la máquina,
los lenguajes han evolucionado desde los llamados lenguajes de máquina (en los inicio de la informática,
cuando John von Neumann tiene la idea del “programa almacenado”) hasta los lenguajes de alto nivel
pasando por los de bajo nivel.
Los lenguajes de máquina simbolizaban, con cadenas de 1 y 0 (formas de representar los estados
de las señales eléctricas), a las direcciones de memoria y las operaciones a realizarse sobre ellas, sin
distinción aparente. Cada modelo de procesador tenía su lenguaje de máquina ya que los enunciados a
usar en un programa hacían referencia exclusiva a sus atributos. Es decir, las instrucciones del lenguaje
eran las instrucciones del procesador.
Así el aspecto real de un programa pudo haber sido:
10101011 00001010 00001011 00001101
10101011 00001101 00001100 00001101
00001110 00001101 00000011 00001101
00000000 00000000 00000000 00000000
...........
...........
Los circuitos electrónicos del procesador eran capaces de interpretar el significado de cada una
de esas secuencias de bits y llevar a cabo las acciones que codifican.
Ing. Gracia María Gagliano
Lenguajes de Programación
4
Con los lenguajes de bajo nivel se incorpora un mecanismo de abstracción. El programador no
necesita conocer el código de máquina, porque las posiciones de memoria y operaciones a realizar sobre
ellas se representan por nombres simbólicos (palabras y letras del idioma ingles). De cualquier manera,
sigue teniendo que pensar y recordar la secuencia de operaciones elementales del procesador (una tarea
sencilla como sumar dos números puede necesitar varias operaciones del procesador). El lenguaje se
denomina ensamblador.
Así el aspecto real de un programa podría ser:
SUM #10, #11, #13
SUM #13, #12, #13
DIV #13, 3, #13
FIN
En este ejemplo de programa las palabras representan instrucciones y los # seguidos de números
indican las direcciones de memoria a cuyo contenido se desea acceder. El programa se introducen en
la memoria de la computadora con la ayuda de un teclado y cada letra se almacena en una posición,
como una combinación particular de unos y ceros.
Se creó un programa especial que al ejecutarse actúa sobre el código ensamblador y lo “reescribe”
en lenguaje de máquina. Este programa que traduce se denomina programa ensamblador.
De cualquier forma, el lenguaje sigue atado a la máquina.
Con los lenguajes de alto nivel se alcanza, en gran medida, independencia de los procesadores,
ya que los elementos de estos lenguajes son palabras propias del humano que no hacen referencia a
ningún procesador en particular. Una instrucción en lenguaje de alto nivel se corresponde con una
secuencia de operaciones realizables en determinadas posiciones de memoria, es decir, con ella el
programador hace abstracción de cómo hará la máquina para ejecutarla.
Por ejemplo: por algún requerimiento del problema puede ser necesario obtener el resultado de agregar
el valor 8 al valor 25; un enunciado que se corresponda con esta actividad humana en lenguaje natural
podría ser: “sumar 8 y 25” o “add 8 and 25” o “aggiungere 8 e 25” o “ajouter 8 et 25“, etc. Expresada en
un lenguaje de alto nivel, la instrucción será por ejemplo: wr = 8 + 25;, pero también podría ser wr :=
8 + 25;. En ninguno de los dos casos es relevante cuáles serán las operaciones y las celdas de
memoria que intervendrán, la tarea es la misma. El símbolo es distinto por qué corresponden a distintos
lenguajes de programación, es simplemente una cuestión de codificación.
En este caso se creó también un programa especial que al ejecutarse actúa sobre el código de
alto nivel y lo “reescribe” en lenguaje de máquina. Es el programa traductor, que como veremos luego
se puede presentar en dos formas según lo permita el diseño del lenguaje.
Contando con estos recursos el programador puede ahora, ubicarse más cerca del dominio del
problema y alejarse completamente de la máquina. No necesita conocer las formas de representación
interna de los valores y puede concentrar su atención, en la solución global del problema.
Lenguajes de programación y problema
Con los lenguajes de alto nivel, encontramos que el eje de la atención se desplazó al problema.
Con el aumento en el grado de dificultad de las situaciones que debían solucionarse en forma automática
se produjo una gran evolución en la manera de abordar los problemas en busca de una solución. Todo
esto se vio reflejado en el desarrollo de los lenguajes de programación pues, indefectiblemente, tuvieron
que acompañar el cambio y adaptarse al tipo de mecanismo de abstracción aplicable a los problemas.
Mientras que el trabajo fundamental del programador es el de construir abstracciones que permitan
tratar con eficiencia la complejidad del mundo real, el de los lenguajes de programación es proporcionar
herramientas que sirvan para construir estas abstracciones. Es así que al diseñarse un lenguaje se tiene
en cuenta el estilo de programación (o modelos computacional llamado también paradigma) al que se
ajustará.
Ing. Gracia María Gagliano
Lenguajes de Programación
5
Podríamos decir que cada lenguaje “apoya” a una técnica de programación, la cual determina las
estructuras semánticas (ideas) que el lenguaje debe poder expresar; por ejemplo, no serán las mismas
para el diseño estructurado de programas que para el enfoque orientado a objetos. De cualquier forma,
no podemos hablar de una separación estricta, existen lenguajes de programación que soportan más de
un paradigma.
Características de un lenguaje de programación
El lenguaje de programación tiene la capacidad de especificar, de forma precisa, cuáles son los
datos que debe trabajar un equipo informático, de qué modo deben ser conservados o transferidos
dichos datos y qué instrucciones debe poner en marcha la computadora ante ciertas circunstancias.
Podemos resumir que permiten:
- definir un proceso que ejecutará una computadora
- hacer abstracción de la máquina, se ajusta más al problema
- construir nuevas abstracciones que se adapten al dominio del problema
Existen herramientas muy usadas que tienen sólo algunas de las características de los lenguajes
de programación, por lo cual se los encuadra como lenguajes informáticos y no de programación. Es el
caso del HTML que se entiende como un sistema que permite ordenar y etiquetar diversos documentos
dentro de una lista.
La abstracción ofrecida por los lenguajes de programación
Alejados ya de la máquina, los lenguajes siguieron evolucionando de la mano de la complejidad
de los problemas que se pretendían resolver automáticamente. Brindan variados recursos al
programador, para que, al diseñar el programa “ignore” distintos detalles del funcionamiento interno de
la computadora.
Trataremos ahora estas abstracciones, categorizándolas en dos grandes grupos: las que tienen
que ver con los datos que deberán procesarse, abstracción de datos, y las que tienen que ver con el
orden en que se ejecuten las acciones que corresponden al proceso, abstracción de control.
Tanto en un caso como en el otro no mencionaremos las abstracciones que han incorporado los
nuevos lenguajes de programación (encapsulado de datos, mecanismo de clases de los lenguajes
orientados a objetos, mecanismos que permitan la ejecución agregan otras abstracciones que resultan
apropiadas al tipo de problema con los que se puede trabajar
 Abstracción de datos: haremos una distinción entre las que tienen que ver con los valores en sí, y
las que tienen que ver con la organización de los valores.
- Abstracciones básicas: se refieren a la “representación” de las características del valor de
un dato (del precio de un producto, del largo de una embarcación, de la edad de una persona,
etc.) en cuanto a los patrones de bits que lo deben codificar, las direcciones de las celdas
de memoria que se utilicen y las operaciones que con ellos se pueda realizar. Todo esto
queda resumido en lo que, en los lenguajes se ha dado en llamar, tipo de dato. Proveen de
palabras especiales con las que se identifica cada uno de los tipos, tal que, el programador
se abstrae de conocer los detalles de implementación en el hardware de los valores a
procesar.
Por ejemplo, en el lenguaje C, los enunciados:
float pr,largo;
char ton;
indican que los identificadores pr y largo se refieren a respectivas posiciones de memoria
que contienen representaciones en punto flotante, que sus valores corresponderán a
números que pueden incluir valores fraccionarios y que soportarán las operaciones
aritméticas tradicionales y la comparación de su valor. En tanto que ton se refiere a símbolos
Ing. Gracia María Gagliano
Lenguajes de Programación
6
del alfabeto, de los números o de puntuación reconocidos en la notación ASCII y que tendrán
a la comparación como una operación permitida.
En Pascal, lo mismo se representaría:
var
largo, pr: real;
ton: char;

En los lenguajes de alto nivel más antiguos o de primera generación (FORTRAN I,
ALGOL, etc.) los datos que se podían manipular eran puramente matemáticos, porque
respondían a aplicaciones científicas y de ingeniería. Al extenderse el campo de acción de
la programación hacia otras áreas, fue necesario trabajar con otros datos y, por lo tanto, con
valores de otro tipo que se incorporarían como básicos a los lenguajes. Es el caso de los
valores lógicos y de los caracteres.
El programador estaba limitado a usar las abstracciones que proveía el lenguaje.
- Abstracciones de organización: se refieren a la “representación” de datos más complejos,
son los que se corresponden con una colección de valores de datos relacionados entre sí
(nombre de una ciudad, datos personales de un estudiante, etc.). Para la abstracción de
estos conjuntos, el concepto fundamental es el de dato estructurado.
Los lenguajes incluyen como propias, algunas formas de organización o estructuras de
datos, tales como arreglos, registros, cadenas entre otras, cada una de las cuales presenta
características exclusivas del agrupamiento. Con algunos lenguajes se pueden definir las
estructuras de datos como si fueran tipos, con las mismas posibilidades de manejo que los
tipos básicos, pero con los rasgos y cualidades específicas que el programador requiera.
Al contar con estos recursos, el programador tuvo la posibilidad de pensar en distintas
formas de organizar los grupos de valores que fuera necesario manipular. Se hizo
sumamente importante en la etapa de diseño de la solución del problema, detectar la o las
estructuras más apropiadas para cubrir las necesidades del tratamiento de los datos
ajustando las exigencias del problema a las posibilidades que ofrecen estas herramientas.
Los lenguajes que se fueron inventando (que serían luego encuadrados en
generaciones) incluyeron progresivamente, no sólo estas abstracciones sino que fueron
incorporando la posibilidad de permitir al programador definir nuevas abstracciones de datos
más específicas.
- Abstracciones unitarias: se refieren a la posibilidad de trabajar, en determinados lugares del
programa, con agrupamiento de código en forma de archivo. Las abstracciones de datos
unitarias son la base del mecanismo de las bibliotecas estándar, de los paquetes o de las
clases (en los lenguajes orientados a objeto).
Abstracción de control:
- Abstracciones básicas: son las que sintetizan en una sola instrucción, expresada en un único
enunciado, a varias acciones de máquina.
El mecanismo que usa la máquina, para realizar un cálculo (aritmético, lógico, de
concatenación, etc.) involucra varias acciones que son distintas a las que tienen que ver con
el traslado de valores de una localización a otra de la memoria. Sin embargo, el programador
no se ocupa de ello, el lenguaje tiene un único enunciado llamada sentencia de asignación
que combinada o no con algún símbolos especial, resume el accionar interno del hardware.
Por ejemplo, en lenguaje C:
x = ‘M’;
activa una determinada cadena de bits en una dirección de memoria.
z = 4 + w
recupera el valor almacenado en una dirección de memoria y lo
agrega a otro valor, activándose en una dirección de memoria
distinta, la cadena de bits que representa al resultado.
Ing. Gracia María Gagliano
ex = imp;
Lenguajes de Programación
7
copia (o traslada) el valor almacenado en una dirección a otra.
En lenguaje Fortran:
x = ‘M’
z = 4 + w
ex = imp
En lenguaje Pascal:
x := ‘M’;
z := 4 + w;
ex := imp;
-
Internamente, la máquina almacena también en posiciones de memoria, a cada una
de las instrucciones. Estas posiciones son consecutivas, de tal manera que, cuando se lo
requiera, se ejecutarán automáticamente una después de la otra, salvo que una de esas
instrucciones de máquina sea la que indica un salto en la secuencia. En ese caso, lo que
hace, es transferir el control a la posición específica de memoria donde se encuentra otra
instrucción que, de alguna forma, se ha etiquetado para ese fin (mediante un nombre o un
número.
En un lenguaje de programación el enunciado que viene a resumir este accionar, es la
sentencia goto (ir a…).
Se considera que, salvo para necesidades especiales, esta sentencia no es una forma
útil de abstracción porque en realidad, con ella el programador no se libera de “pensar” en el
accionar de la máquina para mantener el control sobre las instrucciones.
Los lenguajes actuales tienen esta sentencia pero habilitada sólo para situaciones
puntuales de la programación.
Abstracciones estructuradas: son las que describen el orden en el cual las acciones van a
ser ejecutadas.
El hardware dispone de mecanismos que implementan la secuencialidad en la
ejecución de las instrucciones de máquina, mediante un contador de programa que se
incrementa con cada instrucción llevada a cabo. El contador puede ser modificado por una
instrucción especial, tal que se provoque un cambio en el flujo de las acciones pues se
estaría transfiriendo el control a una posición especificada, distinta que la próxima en la
secuencia. Así es que se puede provocar una división en el flujo de instrucciones o una
reiteración de las ya ejecutadas.
Las abstracciones que proveen los lenguajes para que el programador no tenga que
manipular con estas acciones, son las denominadas estructuras de control y corresponden
a enunciados de selección simple (if-then-else en la mayoría de los lenguajes) de
selección múltiple (case en Pascal, switch en C) y a los bucles o ciclos (for, while, dowhile en C o for, while, repeat-until en Pascal, o do, do while en Fortran)).
Otro mecanismo para controlar el flujo durante la ejecución de un programa, aunque
bastante más complejo a nivel de máquina, es el subprograma. Se trata de un recurso que
se puede trabajar de dos maneras distintas, una es la que se denomina subrutina (o
procedimiento) y la otra función.
Consiste en un agrupamiento de acciones que resuelven un problema determinado,
tiene sus propios datos y responde a un algoritmo específico. Se comporta como una unidad
de programa independiente, pero asociada al programa principal de tal manera, que puede
intercambiar explícitamente valores con él. Es así que el subprograma es llamado desde el
Ing. Gracia María Gagliano
-
Lenguajes de Programación
8
programa principal. En esa circunstancia, se establece una conexión de paso (parámetros)
para intercambiar información y se transfiere el control a la unidad de programa invocada.
El subprograma es una abstracción muy especial que distingue entre la definición y el
uso de la acción abstracta. Debe ser diseñado por el programador y puede ser usado cuando
sea necesario, como si fuera una única acción.
Durante su diseño, el programador se concentra solamente en el “cómo debe trabajar”
(implementa la abstracción) e incluso debe identificar el proceso con un nombre. Cuando lo
pone en uso, se concentra en el “qué hace”, ignorando los detalles de su real implementación
(usa la abstracción). En esta doble abstracción se sintetiza no sólo la operatoria (en el cuerpo
del subprograma) sino un mecanismo complejo que incluye la información referida al estado
del programa en el punto de la invocación y al proceso de transferencia del control hacia y
desde el subprograma (en la llamada).
Abstracciones unitarias: son las que permiten reunir procedimientos que resuelven
situaciones individuales, lógicamente vinculadas. Es, en esencia, lo mismo que describimos
para la abstracción de datos de nivel unitario, sólo que aquí el enfoque está en las
operaciones.
Este tipo de abstracción de control provee herramientas para la programación en
paralelo. El hardware actual, al tener varios procesadores, puede ejecutar varios procesos a
la par. Los lenguajes modernos han incorporado entonces, mecanismos de control
específicas como son los hilos o los task,
Implementación de un lenguaje
Se refiere a la manera de convertir o traducir a lenguaje de máquina un programa escrito en un
lenguaje de programación. Es, en definitiva, lo que va a permitir que se ejecute un programa para una
determinada combinación hardware-software.
La conversión se realiza a través de un traductor, que no es más que un programa que recibe a
otro programa escrito en un determinado lenguaje. El proceso de conversión se puede realizar de dos
maneras:
- mediante interpretación (el traductor se llama intérprete): convierte y ejecuta el programa. El
programador no percibe la conversión a lenguaje de máquina, parece que se ejecuta directamente.
- mediante compilación (el traductor se llama compilador): la actividad final del proceso de traducción
es la generación de un nuevo código, se construye una secuencia de instrucciones en lenguaje de
máquina que representan a los enunciados del programa fuente, el producto final es el programa
objeto. Este sufrirá otros tratamientos para terminar en un programa ejecutable.
La traducción consiste, esencialmente, en tres actividades básicas que llevan a cabo tanto los
compiladores como los intérpretes: análisis léxico, análisis sintáctico y semántico.
En el análisis léxico se reconocen las entidades elementales que se representan con las distintas
cadenas de símbolos (identificadores, palabras reservadas y constantes), en el sintáctico se analiza la
estructura gramatical de un enunciado y se reconoce el papel de cada uno de sus componentes y en el
análisis semántico se analiza el significado.
Aspectos generales del diseño de un lenguaje de programación
El lenguaje provee de las primitivas a partir de las cuales se construirán los programas. Como cada
primitiva es una estructura semántica y tiene una representación sintáctica abordaremos estas dos
cuestiones.
Relacionados con la semántica
Ing. Gracia María Gagliano
Lenguajes de Programación
9
La semántica de un lenguaje de programación abarca el significado de cada primitiva individual y
de las estructuras compuestas por ellas.
El significado al que nos referimos, guarda estricta vinculación con los conceptos que se requieren
para la solución del problema, ya que el lenguaje debe ser capaz de expresarlos. Esos conceptos (o
ideas) corresponden a una estructura semántica.
En general, ocurre lo mismo que en un lenguaje natural. Una idea se puede expresar mediante
una sola palabra o, algunas veces, combinando varias para formar un enunciado o párrafo. Pero,
mientras que en esta clase de lenguajes un enunciado puede tener un significado ambiguo e inclusive
pueden tener múltiples significados, en un lenguaje de programación no es tan así, la ambigüedad es,
en general, inaceptable.
El significado de cada primitiva es preciso, aunque en algunos casos ocurre que, al combinarlas
para formar estructuras semánticas más complejas, surgen leves diferencias según la interpretación que
se haga del enunciado (ambigüedad). En ese caso al diseñar el lenguaje se adoptarán reglas
determinadas de uso para la estructura.
Relacionados con la sintaxis
La sintaxis de un lenguaje de programación abarca tanto el diseño del texto del programa en cuanto
a la ubicación de los enunciados (formato fijo o formato libre, en los lenguajes modernos) como a la
notación para representar la semántica de las primitivas individuales y de las combinadas.
En general, desde la sintaxis también se viene a reforzar la manera como se resuelven las posibles
ambigüedades de la semántica; es el caso, por ejemplo, del uso de paréntesis para asociar diversos
componentes de un enunciado.
Ing. Gracia María Gagliano
Lenguajes de Programación
10
Bibliografía
Louden, Kenneth C. (2004) - Lenguajes de Programación principios y práctica 2da.edición Ed. Thomson
Brookshear, J.Glenn (1995) – Introducción a las Ciencias de la Computación 4ta.edición Addison Wesley
iberoamericana
Ruiz Limon, Ramón - Historia y Evolución del Pensamiento Científico ISBN-13: 978-84-690-6369-9 Nº
Registro: 07/44311
Ghezzi, Carlo y Jazayeri, Mehdi (1997) - Programming Language Concepts 3ra.edición