Lenguajes de programación y su sintaxis
Existen muchas maneras de clasificar los lenguajes de programación. Se puede ver si son orientados a objetos o no, si manejan validación estática o dinámica de tipos, etc.
Yo opino que una de las maneras de clasificar los lenguajes de programación que no ha recibido la suficiente atención es en base a su sintaxis.
La sintaxis de los lenguajes de programación se puede dividir en 2 categorias:
- Los que tienen una sintaxis basada en Algol
- Todos los otros lenguajes
Cuando hablo de una sintaxis basada en Algol no me refiero a que visualmente se parezcan al lenguaje Algol, lo que quiero decir es que la manera en que los lee un interprete o compilador esta basada en las tecnologias de compilación desarrolladas para los primeros compiladores de Algol: análisis léxico para separar el fuente en tokens seguido de un análisis sintáctico basado en la gramática del lenguaje.
Entre los lenguajes con una sintaxis basada en Algol se encuentran: Pascal, C, C++, C#, Java, JavaScript, Eiffel, Basic, Python, Ruby y hasta Perl. Entre los otros lenguajes están: Fortran, COBOL, Forth, Smalltalk, APL, Common Lisp y Scheme.
Dentro de la categoria de los otros lenguajes todavia se puede hacer una subdivisión basada en los lenguajes derivados de Lisp y los demás lenguajes. Los lenguajes derivados de Lisp, y que podriamos llamar dialectos de Lisp, que se emplean mucho actualmente son: Scheme, Common Lisp, AutoLisp y EmacsLisp.
Debido a su sintaxis “extraña” (es decir: no esta basada en Algol) muchos programadores se sienten intimidados por los dialectos de Lisp y esto ha evitado que estos lenguajes se vuelvan más populares, lo cual es una lástima ya que en Lisp hay muchos conceptos que pueden ser muy útiles en el desarrollo de software. De hecho, hay por lo menos un par de lenguajes (Python y Ruby) que han tomado varios conceptos de Lisp para plasmarlos en una sintaxis más “tradicional” y que han tenido en estos ultimos años mucho éxito entre los programadores, aunque el uso de una sintaxis basada en Algol unicamente permite aprovechar una pequeña fracción de estos conceptos.
El ciencias computacionales existe el premio Turing que es el equivalente al premio Nobel para otras ciencias. En 1978 el ganador del premio Turin fué Robert Floyd por: “Helping to found the following subfields of computer science: the theory of parsing, the semantics of programming languages, automatic program verification, automatic program synthesis and analysis of algorithms. Floyd implemented one of the first Algol 60 compilers, finishing his work on this project in 1962. In the process, he did some early work on compiler optimization. Subsequently, in the years before 1965, Floyd systematized the parsing of programming languages. For that he originated the precedence method, the bounded context method, and the production language method of parsing”.
En otras palabras: Robert Floyd recibió el premio Turing por inventar la tecnología empleada en la implementación de todos los lenguajes con una sintaxis badasa en Algol. Lo interesante es que el ganador del premio Turing, en la ceremonia donde se le entrega el premio, tiene que dar alguna conferencia sobre el tema que quiera. Lo siguiente es parte de lo que dijo Robert Floyd en su conferencia: “Contact with the programming written under alien conventions may help. Visiting MIT on sabbatical this year, I have seen numerous examples of the programming power which Lisp programmers obtain from having a single data structure, which is also used as a uniform syntactic structure for all the functions and operations which appear in programs, with the capability to manipulate programs as data. Although my own previous enthusiasm has been for syntactically rich languages like the Algol family, I see now clearly and concretely the force of Minsky’s 1970 Turing Lecture, in which he argued that Lisp’s uniformity of structure and power of self-reference gave the programmer capabilities whose content was well worth the sacrifice of visual form.”

Puse un trackback a este artículo en mi blog. Sería bueno que Gerardo lo autorizara. De cualquier modo, ya estoy dando la URL de dicho trackback, por si cualquier cosa.
Comment by Gustavo Muñoz — August 12, 2005 @ 4:20 pm
Me parece que la clasificación que describes no es de mucha ayuda, ya que puedes escribir compiladores e intérpretes de lenguajes tipo Algol con lenguajes tipo Lisp, y viceversa, así como usar la tecnología de los compiladores tipo Lisp, para hacer un compilador de Java o C.
En ese sentido, prefiero la clasificación de lenguajes en imperativos y declarativos.
Es decir, la semántica de un lenguaje de programación no debería estar basada en la tecnología que se utiliza para hacer su intérprete o compilador, sino a un nivel más abstracto.
Comment by Mefisto — August 16, 2005 @ 8:01 pm
Lo que pasa es que estas viendo el problema (y sus posibles soluciones) desde el punto de vista de los lenguajes tipo Algol. Y obviamente cualquier cosa que se puede expresar en uno de esos lenguajes se puede expresar en Lisp. Lo que no estas viendo es que al usar Lisp puedes estructurar tus programas de muchas otras maneras que no son posibles con esos lenguajes. El punto clave es que en Lisp puedes usar la misma sintaxis para programas y para datos y eso te abre las puertas a la metaprogramacion que es una manera totalmente diferente de atacar un problema. Para ejemplos de metaprogramacion en Lisp puedes ver el MOP (Meta Object Protocol).
Comment by mago — August 16, 2005 @ 10:03 pm
Entiendo tu punto y las ventajas que ofrece un lenguaje como Lisp. Sin embargo, creo que el asunto de clasificar los lenguajes de programación a nivel sintáctico no añade nada nuevo a la discusión.
La jerarquía de lenguajes de Chomsky ha resultado ser muy útil en el diseño de lenguajes de programación, sin embargo, también se ha observado que la sintaxis, exluyendo toda semántica, no te permite clasificar de manera correcta a los lenguajes.
Si queremos analizar el potencial de un lenguaje de programación considerando únicamente su sintáxis caemos en la misma situación.
Como verás, mi punto no es si la clasificación es válida o no, simplemente opino que dicha clasificación no aporta nada nuevo a lo que conocemos acerca de dichos lenguajes de programación.
Comment by Mefisto — August 17, 2005 @ 1:18 am
chinga tu madre
soy mexicano hasta la muerte
Comment by Anonymous — September 17, 2005 @ 7:13 pm
Sí está padre el comentario de nuestro anónimo y muy mexicano amigo. Aporta mucho ubicándonos bien en la realidad de nuestro país.
Gracias.
Comment by Gustavo Muñoz — September 19, 2005 @ 1:14 am
me parece que hayga buenas paginas para nosotros los programadores
Comment by Raul — January 31, 2006 @ 8:31 pm
pienso que seria mejor la programacion declarativa que la declarativa y seria de un mayor beneficio que las paginas en lugar de tener mucho rollo sobre todo lo que comprende la sintaxis se aprenderia mejor con ejemplos ilustrativos de programas hecho por gente conocedora para que nos sirven como ejemplo para nosotros que vamos iniciando en este ambito tan complejo por la falta de experiencia y aun mas de conocimientos. Gracias
Comment by lupillo barron — January 31, 2006 @ 8:35 pm
Bueno acerca de como se desrrolln los compiladores quisiera saber algo de como se ha desarrollado el lenguaje de programación Lisp para proporcionar una opinión pero generalmente para el temario de diseño de compiladores siempre se toma como base a la forma de algol donde puedo conseguir información sobre Lisp talvez para enriquecer su diseño.
Comment by Adalid Barrios — September 13, 2006 @ 3:47 pm
Existen dos dialectos populares de Lisp: Common Lisp y Scheme.
En el excelente libro Structure and Interpretation of Computer Programs (disponible gratis on-line) viene al final una implementración muy sencilla de un compilador para Scheme.
Existen varias versiones open source de Common Lisp. Dentro de su documentación se puede ver algo de como está implementado su compilador. Algunas de estas implementaciones son:
CMUCL
SBCL
CLISP
Comment by mago — September 13, 2006 @ 4:04 pm
ya nenas se bayan a romper la tnga pinche bola de chotos
ijos de perra
gracias
Comment by eliud — September 13, 2006 @ 4:08 pm
perdona mi ignorancia, es que tengo que exponer acerca de los lenguajes de programacion, en qu´´e generacion estan, sus caracteristicas y porque se encuentran en esa categoria
Comment by saniela — May 5, 2007 @ 12:24 am
oye mago te agradecería mucho si me envias la informacion que necesito detalladamente. QUÉ LENGUAJES DE PROGRAMACIÓN SE ENCUENTRA CLASIFICADO EN CADA GENERACIÓN, CARACTERISTICAS Y PORQUE DE SU CATEGORIA.
Comment by saniela — May 5, 2007 @ 12:35 am
Hace mucho tiempo, se acostumbraba hablar de las generaciones de computadoras. Ese concepto ya no se emplea en la actualidad. Hubo una epoca, en la cual varias empresas desarrollaron unas herramientas/lenguajes para simplificar el desarrollo de aplicaciones de negocios. Como estrategia de ventas, les llamaron “Lenguajes de cuarta generación” pero, al igual que el concepto de las gereneraciones de computadoras, ha resultado ser un concepto que no tiene mucho sentido, ya que es una manera completamente artificial e inútil de clasificar los lenguajes de programación.
Comment by mago — May 6, 2007 @ 11:30 pm
hola me pidieron una tarea y estoy un poco confundida: en clase de lenguajes de programacion me pidieron la gramatica de un lenguaje cualquiera, y la profa trato de confundirnos, espero q sea las palabras reservadas para el lenguaje… ojala me ayude antes de que lo entregue
Comment by KiLaN — August 23, 2007 @ 6:47 pm
Lo que te están pidiendo son las reglas de sintaxis de un lenguaje (su gramática). Por ejemplo, estas son las reglas de sintaxis de Java: http://java.sun.com/docs/books/jls/second_edition/html/syntax.doc.html
Comment by mago — August 24, 2007 @ 3:21 am
bueno que me ayude n ha saber su clasificacion sintaxis base a simetria y sintaxis metrica diganme donde lo puedo encontrar o en que pagina
Comment by jessica — February 10, 2008 @ 8:46 pm
k
Comment by k — February 25, 2008 @ 4:21 pm
no puedo encontrar lo que deseo pongan algo interesante
Comment by aninima — February 28, 2008 @ 3:21 am
esos pinches mejicanos son una basura. asi te lo digo. son unos perros de madre.
Comment by JOSE — May 22, 2008 @ 3:48 pm