jueves, 31 de julio de 2014

Concepto sobre sintaxis y semántica de los lenguajes de programación


LENGUAJE, SINTAXIS, SEMÁNTICA, Y DEMÁS … CON UN POCO DE FILOSOFÍA


"That which can be said, can be said clearly" Wittgenstein

Antes de definir que son los lenguajes de programación junto con su sintaxis y su semántica, vamos a hacer una recorrida por los lenguajes mediante los cuales nos comunicamos día a día.

Si hacemos referencia al video "Mentira la verdad, el lenguaje" del programa de televisión Canal encuentro, podemos empezar con las siguientes preguntas:

Todo es texto, lo que digo, lo que pienso, incluso lo que hago. Como dice Jacques Derrida no hay nada por fuera del texto. Todo es texto, nada hay por fuera del lenguaje. Pero, si todo es texto y nada hay por fuera, ¿a qué se refieren las palabras? , ¿de qué habla el lenguaje? ¿habla de las cosas o habla de sí mismo? ¿hay algo que podamos pensar sustraído al lenguaje? ¿qué es el lenguaje? ¿cómo lo fuimos pensando a lo largo de la historia? ¿es cierto que el hombre es y además camina, además respira o además duerme? ¿o es al revés, y el habla nos hace hombres? ¿el hombre habla o el lenguaje nos constituye como hombres?

Estos  interrogantes se dan al inicio del video. En el mismo, se establece el debate desde el interrogante. 

Una vez que se plantea el interrogatorio para encontrarle una definición al lenguaje, nos seguimos preguntando sobre como lo adquirimos  …
¿cómo es el que hombre aprende su lenguaje ? ¿cuáles son las facultades de la mente?  ¿dicho lenguaje lo ha visto, leido o escuchado anteriomente? ¿está el lenguaje bien construido? ¿está mal construido? ¿qué conocimiento de su lengua tiene el hablante que le permite construir y entender oraciones que nunca antes ha leido?

La gramática tradicional divide  al estudio de todas las lenguas del mundo por convención, en dos secciones : morfología y sintaxis. 
 “la morfología explica la estructura interna de las palabras y el proceso de formación de las palabras,  mientras que la sintaxis describe como las palabras se combinan para formar sintagmas, oraciones y frases”
Noam Chomsky
Sin embargo, en el seno de la gramática generativa se ha sostenido que la morfología es insostenible como rama autónoma.  De esta forma surge la gramática generativa y transformacional. El iniciador de la teoría gramática generacional es Noam Chomsky, siendo uno de los campos de investigación más activos de la lingüística moderna. 


Podemos decir que el lenguaje es  creativo porque se pueden producir y entender una cantidad infinita de nuevas expresiones que no nos fueron enseñadas. No nos limitamos a repetir frases que ya hemos escuchado, si no que las creamos en función de las necesidades cambiantes de cada momento. Entendemos las oraciones que los otros pronuncian, o escriben a pesar de no haberlas leido o escuchado antes. 
La gramática generativa presenta de forma explícita las reglas gramaticales que aplica implicitamente el hablante/oyente para construir/entender las oraciones. 
Para comprender la diferencia de significado entre las oraciones no es suficiente conocer el significado de las palabras que las componen, si no que es necesario ver también la información sintáctica que contienen. Esto es la información no lexical que es transmitida por medio de la estructura de la oración misma. 
Cuando conocemos un lenguaje sabemos que es un conjunto de palabras y reglas con  las cuales generamos cadenas de esas palabras.

Ahora bien, escribamos la definicipón etimológica de sintaxis: del griego “syn” con y “taxis” ordenLa sintaxis describe como las palabras se combinan para formar sintagmas, oraciones y frases. La sintaxis no se ocupa del estudio de las palabras, sino de las agrupaciones que éstas forman (tanto las de primer nivel o sintagmas, como las de segundo nivel u oraciones) y de las funciones que desempeñan. De esta forma, podemos decir que existen enunciados sintacticamente correctos como enunciados sintácticamente incorrectos. Los enunciados sintácticamente correctos son aquellos en los que los diferentes sintogmas estén bien construidos, bien posicionados y correctamente relacionados los unos a los otros. 


Y me gustaría continuarlo para adentrarlo a los lenguajes de programación...
¿Qué es lo que hace que un lenguaje sea diferente de otro? ¿Qué es lo que hace que un lenguaje sea parecido a otro? 

Un lenguaje de programación  es un lenguaje formal para la formulación de algoritmos y estructuras de datos, eso quiere decir, para formular reglas de cálculo que pueden ser ejecutados por una computadora. Cuando observamos un código escrito en un determinado lenguaje de programación, nos podemos preguntar ….
cómo sabemos si está bien escrito, cómo sabemos qué es lo que hace el programa, cómo sabemos si resuelve correctamente el problema planteado, cómo sabemos que significa, y cómo un compilador sabe como traducir el programa ???
Todo lenguaje de programación debe ser definido con suficiente detalle para que permita resolver casi cualquier tipo de problema. Entonces, la definición de un lenguaje de programación debe permitir determinar 

(1) si un supuesto programa es un hecho válido

(2) si el programa es válido, cuál es su significado o su efecto


Según el libro CONCEPTS IN PROGRAMMING LANGUAGES de John C. Mitchell, parte 4.1 ...
Un programa es una descripción de un proceso dinámico. El texto mismo de un programa es llamado SINTAXIS; las cosas que un programa realiza comprende la SEMÁNTICA. La función de la implementación de un lenguaje de programación es transformar la sintaxis de un programa en instrucciones de máquina que puedan ser ejecutadas.

El estudio de los lenguajes de programación, como así el estudio de las lenguas nativas, se pueden examinar desde la sintaxis y semántica. La sintaxis de los lenguajes de programación se refieren a sus expresiones, sentencias y unidades del programa. Su semántica se refiere al significado de aquellas expresiones, sentencias y unidades de programa. Por ejemplo, en Java la sentencia while  se describe como la siguiente:
  
        while (expr_booleana) sentencia

              
La semántica de esta expresión sintáctica, es ejecutar la sentencia cuando el actual valor de expr_booleana sea verdadero, y repetir el proceso. Si el valor actual de expr_booleana es falso, la linea de ejecución continua por debajo del bloque de sentencias while.


El siguiente post contiene la definición de sintaxis, junto con sus características, sus elementos, los tipos de sintaxis existentes, la estructura sintáctica y las diferentes formas de expresar la sintaxis (EBNF, árboles de derivación y árboles sintácticos, diagramas sintácticos)

Bibliografía:
. Programming language concepts - Carlo Ghezzi, Mehdi Jazayeri
. Concepts in programming languages - John C. Mitchell
Sintaxis - definiciones y su evolución
. Video canal encuentro, programa: "Mentira la verdad, el lenguaje"