Lenguajes de programación: sintaxis, semántica y jerarquía

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 10,67 KB

 
SINTAXIS
Un programa en cualquier lenguaje se puede concebir como un string de caracteres escogidos de algún conjunto o alfabeto de caracteres. Las reglas que determinan si un string es un programa válido o no, constituyen la sintaxis de un lenguaje. Posteriormente, se estudiarán ciertas notaciones denominadas expresiones regulares y gramáticas libres de contexto, muy usadas no sólo para especificar las sintaxis de los lenguajes de programación sino también para contribuir en la construcción de sus compiladores.

SEMANTICA
Las reglas que determina el significado de los programas constituyen la semántica de los lenguajes de programación. Es más difícil de especificar que la sintaxis.
Los siguientes son algunos enfoques para especificar la semántica de los lenguajes:
Semántica Interpretativa (u Operacional)
Un lenguaje de máquina tiene su semántica definida por el computador. Un programa en lenguaje de máquina "significa" exactamente lo que el computador hace cuando el programa "corre" o se ejecuta. Sin embargo, con un lenguaje de alto nivel no se puede dejar que el computador defina la semántica del lenguaje, puesto que no es posible "correr programas y ver" hasta que se tenga un compilador. No se puede tener un compilador y saber qué es correcto hasta haber definido lo que los programas significan.
Este enfoque interpretativo para definir la semántica de los lenguajes de programación consiste en postular una máquina abstracta y proveer reglas para la ejecución de programas sobre esta máquina abstracta. Así, estas reglas definen el significado de los programas. Usualmente, la máquina abstracta se caracteriza por un estado consistente de todos los objetos datos, sus valores, y los programas con sus contadores de programa. Las reglas semánticas especifican cómo el estado es transformado por las diversas construcciones de los lenguajes de programación.
Traducción
La traducción de un lenguaje assembly a lenguaje de máquina (que es directa y comprensible), forma una especificación semántica muy usada para un lenguaje assembly.
El compilador para un lenguaje de alto nivel sobre una máquina específica llega a ser la definición semántica del lenguaje.
Definición Axiomática
Se pueden definir reglas que relacionan los datos antes y después de la ejecución de cada programa. Estas reglas se pueden usar para proveer teoremas acerca de la relación E/S de un programa. Este enfoque tiene la ventaja que puede usarse para definir semánticas para un aparte más que para todos los aspectos de un lenguaje.
Definición Extensible
En este enfoque se definen ciertas operaciones primitivas y el significado del lenguaje en términos de estas primitivas. Ejemplo LISP.
Semántica Matemática o Denotacional
Los objetos matemáticos corresponden a programas que son definidos, y reglas abstractas para traducir programas a estos objetos abstractos


LA ESTRUCTURA JERARQUICA DE LOS LENGUAJES DE PROGRAMACIÓN
Un lenguaje de programación es una notación para especificar una secuencia de operaciones a realizar sobre objetos datos. Estos se pueden agrupar en una jerarquía de árbol, cuyas unidades son comunes y familiares a la mayoría de los lenguajes.

------ figura 1-------

En el tope de la jerarquía está el programa propiamente tal, que es la unidad de ejecución básica. Luego viene una entidad que puede ser compilada, y que se compone de sentencias y expresiones.
1.1 LENGUAJES DE ALTO NIVEL

Un lenguaje de programación es un medio para comunicar algoritmos al computador. Existen cientos de lenguajes de programación los cuales difieren en el grado de clausura a un lenguaje natural o matemático por una parte, y al lenguaje de máquina por otra. También difieren en el tipo de problema para el cual funcionan mejor.
Algunos aspectos de los lenguajes de alto nivel que los hacen preferibles a los lenguajes de máquina o assembly son:
Facilidad de Entender. Un programa en lenguaje de alto nivel es:
fácil de leer y de escribir
la notación más natural de describir algoritmos
Un buen lenguaje de programación debería proveer aspectos para el diseño modular contemplando operadores, estructura de datos, flujo de control.
Naturalidad. Facilidad de poder expresar un algoritmo en el lenguaje (sentencias estructuradas, estructura natura del algoritmo)
Portabilidad. Posibilidad de ejecutar programas en una variedad de máquinas
Eficiencia de Uso. Considerar aspectos del lenguaje como de los programas. Compilación eficiente.

Existen aspectos que hacen más legibles los programas en lenguajes de alto nivel:
Estructuras de Datos
Reglas de Alcance que permitan modificaciones en partes de un programa sin afectar otras partes del mismo
Flujo de Control que identifique claramente las estructuras de ciclo de un programa
Subprogramas que permitan diseño modular.

Un compilador también puede ayudar a producir programas confiables. Por ejemplo, un compilador puede chequear si los tipos de operandos son compatibles; puede advertir al usuario si hay posibilidad de usar una variable antes de ser definida, o si una referencia a un arreglo puede estar fuera de los límites.



1.1 ELEMENTOS SINTÁCTICOS DE UN LENGUAJE DE PROGRAMACIÓN

Conjunto de Caracteres
Es la primera etapa en el diseño de la sintaxis de un lenguaje
Casi todos tienen el mismo conjunto de letras y dígitos
La diferencia está en los caracteres especiales
Incide en la determinación del tipo de equipo para la E/S
Identificadores
Sintaxis básica: string de letra y/o dígito comenzando con letra
Se introducen caracteres especiales que facilitan la lectura
Operadores
La mayoría de los lenguajes tiene un conjunto estándar de operadores:
aritméticos
relacionales
lógicos

Palabras Claves y Reservadas
Palabra clave: identificador usado como parte fija de la sintaxis de una sentencia
Palabra reservada: palabra clave que no puede ser usada como identificador
El análisis sintáctico se facilita usando palabras reservadas
Generalmente una sentencia comienza con palabras claves designando el tipo de sentencia.
Comentarios y Palabras Opcionales
La mayoría de los lenguajes permite incluir comentarios en los programas
Los comentarios no son considerados durante la compilación.
Espacios en Blanco
Varía su inclusión entre un lenguaje y otro
Delimitadores
Es un elemento sintáctico para marcar el comienzo y/o el fin de una unidad sintáctica
Ejemplo BEGIN
....
END
Las características son:
realza la lectura
simplifica el análisis sintáctico
elimina ambigüedades
delimita explícitamente frontera o cota de una construcción sintáctica.
Formato Libre y Fijo
Una sintaxis es libre si las sentencias del programa se pueden escribir en cualquier parte de una línea sin observar la posición o salto de línea. Ejemplo Pascal
Una sintaxis es fija si utiliza la posición en la línea para proporcionar información. Ejemplo estrictamente fija, máquina; parcialmente fija, Fortran
Expresiones
Son unidades sintácticas básicas con las cuales se construyen sentencias.
Hay distintas formas para escribir una expresión: infija, prefija, postfija (inorden, preorden, postorden).
Sentencias
Son las componentes sintácticas más importantes de los lenguajes de programación. Algunos tienen formato básico de sentencia. Existen diferentes sintaxis para cada tipo diferente de sentencia.
En general existen sentencias simples y estructuradas.
Estructura de Programa y Subprograma
La organización sintáctica de un programa y la definición de subprograma es variada.
Definición variada de subprograma
- cada definición de subprograma es tratada como una unidad sintáctica separada
- Las principales estructuras de los programas son: bloques, subprogramas
- El bloque se ejecuta cuando la secuencia de ejecución llega. El procedimiento es llamado explícitamente.
En Fortran cada subprograma es compilado separadamente y los programas son "linkeados" en tiempo de carga.
En APL los subprogramas son compilados separadamente y son "linkeados" sólo cuando uno llama a otro durante la ejecución.
Definición de subprogramas anidados
Un ejemplo se da en ALGOL que muestra la estructura de programas anidados en que la definición del subprograma aparece como declaración en el programa principal. A su vez, el mismo subprograma puede contener otra definición anidada.
Descripción separada de datos y sentencias ejecutables
Un representante es el COBOL. Las declaraciones de datos y sentencias ejecutables para los subprogramas (párrafos), se encuentran en la DATA DIVISION y en la PROCEDURE DIVISION, respectivamente. La ENVIRONMENT DIVISION consiste de las declaraciones de operación y ambiente externo, equipo, archivos, memoria, etc... Todos los datos son globales a los subprogramas. Una ventaja es que cambios en la estructura de datos se hacen sin tocar los subprogramas.
Definición de subprogramas no separados
No hay diferencia sintáctica entre las sentencias del programa y las del subprograma. Un ejemplo SNOBOL: independiente del número de subprogramas que contenga el programa, es una lista de sentencias. El punto donde un subprograma comienza y termina no se distingue. Los programadores introducen una separación artificial insertando comentarios. Otro ejemplo BASIC.