Académique Documents
Professionnel Documents
Culture Documents
I. CLASE N°01
1.1. DEFINICION
Es una rama de la informática que se encarga del diseño, implementación, análisis,
caracterización y clasificación de lenguajes de programación y sus características. Es un
campo multi-disciplinar, dependiendo tanto de (y en algunos casos afectando) a las
matemáticas, ingeniería del software, lingüística, e incluso ciencias cognitivas. Es una rama
bien reconocida de la informática, y un área activa de investigación, con resultados publicados
en un gran número de revistas dedicadas a la PLT, así como en general en publicaciones de
informática e ingeniería.
Uno de sus objetivos es presentar las nociones de lenguaje formal y de sintaxis y semántica de
lenguajes, imprescindibles para la construcción de compiladores.
Su símbolo aunque no oficial es la letra griega lambda λ en minúsculas. Este uso deriva del
cálculo lambda, un modelo computacional ampliamente usado por investigadores de lenguajes
de programación. Muchos textos y artículos sobre programación y lenguajes de programación
utilizan lambda de una u otra manera.
- El primer lenguaje de programación (como tal) fue Plankalkül, diseñado por Konrad Zuse en
los años 40, pero fue conocido públicamente en 1972 (y no implementado hasta 2000, cinco
años después de la muerte de Zuse).
- En la década de 1950, Noam Chomsky desarrolló la Jerarquía de Chomsky en el campo de la
lingüística; un descubrimiento que impactó directamente a la teoría de lenguajes de
programación y otras ramas de la informática.
- El primer lenguaje de programación ampliamente conocido y exitoso fue Fortran,
desarrollado entre 1954 y 1957 por un equipo de investigadores en IBM liderados por John
Backus. El éxito de FORTRAN condujo a la creación de un comité de científicos para
desarrollar un lenguaje de programación "universal"; el resultado de su esfuerzo fue ALGOL
58. Por otro lado, John McCarthy del MIT desarrolló el lenguaje de programación Lisp
(basado en el cálculo Lambda), el primer lenguaje con orígenes académicos en conseguir el
éxito. Con el triunfo de estos esfuerzos iníciales, los lenguajes de programación se
convirtieron en un tema candente en la investigación en la década de 1960 y en adelante.
- En la década de 1960, el lenguaje Simula fue desarrollado por Ole-Johan Dahl y Kristen
Nygaard; muchos consideran que es el primero lenguaje orientado a objetos; Simula
también introdujo el concepto de corrutinas.
o Corrutina.- Método que tienen la capacidad de pausarse y reiniciarse exactamente
donde se quedó en el frame anterior. Para entenderlo mejor, consideremos el siguiente
ejemplo:
Similar a un hilo, es una ejecución con su propia pila, variables locales y puntero de
instrucción, pero comparte variables globales y todo lo demás con otras corrutinas.
- En la década de los 70 :
Un pequeño equipo de científico en Xerox PARC encabezado por Alan Kay elaboran
Smalltalk, un lenguaje orientado a objetos muy conocido por su novedoso (hasta ese
momento desconocido) entorno de desarrollo.
Sussman y Steele desarrollan el lenguaje de programación Scheme, un dialecto de Lisp
que incorpora Ámbitos léxicos, un espacio de nombres unificado.
Backus, en la conferencia del Premio Turing de 1977, asedió el estado actual de los
lenguajes industriales y propuso una nueva clase de lenguajes de programación ahora
conocidos como lenguajes de programación funcional.
La aparición del process calculi, como el cálculo de sistemas comunicantes de Robín
Milner, y el modelo de Comunicación secuencial de procesos de C. A. R. Hoare.
La aplicación de la teoría de tipos como una disciplina a los lenguajes de programación,
liderada por Milner; esta aplicación ha conducido a un tremendo avance en la teoría de
tipos en cuestión de años.
- Posteriormente en la década de los 90, Philip Wadler introdujo el uso de Monads (una
estructura que representa cálculos definidos como una secuencia de pasos) para estructurar
programas en lenguajes de programación funcional.
1.3. SUB DISCIPLINAS DE LA TEORÍA DE LENGUAJES.
Existen varios campos de estudio que o bien caen dentro de la teoría de lenguajes de
programación o bien tienen una profunda influencia en ella. Entre estos tenemos:
1.3.1. La Teoría de los compiladores.-
Es la base formal sobre la escritura de compiladores (o más generalmente traductores);
programas que traducen un programa escrito en un lenguaje a otra forma. Las acciones de un
compilador se dividen tradicionalmente en análisis sintáctico (escanear y parsear), análisis
semántico (determinando que es lo que debería de hacer un programa), optimización
(mejorando el rendimiento indicado por cierta medida, típicamente la velocidad de
ejecución) y generación de código (generando la salida de un programa equivalente en el
lenguaje deseado; a menudo el set de instrucciones de una CPU).
Es un mundo apasionante dentro de la teoría de la informática, desarrollar un compilador
medianamente potente es una tarea dura y costosa, tanto en tiempo como en recursos, pero
gratificante al ampliar campos básicos de la informática como son la teoría de autómatas, de
lenguajes, estructura y arquitectura de computadoras, lenguajes de programación y algunos
otros más.
1.3.2. La Teoría de tipos
Es el estudio de sistemas de tipos, que son "métodos sintácticos tratables para proveer la
ausencia de ciertos comportamientos de programa mediante la clasificación de frases según
los tipos de valores que computan." (Types and Programming Languages, MIT Press, 2002).
Muchos lenguajes de programación se distinguen por las características de sus sistemas de
tipos. Puede referirse al diseño, análisis y estudio de los sistemas de tipos, aunque algunos
sin tener que recompilar, una característica que se ha vuelto muy importante, ya que la difusión de
la World Wide Web .
entre su significante y su denotado, además de una clase intencional para su designado. Los
símbolos son pictografías con significado propio. Muchos grupos tienen símbolos que los
representan; existen símbolos referentes a diversas asociaciones culturales: artísticas, religiosas,
políticas, comerciales, deportivas, etc.
Es una entidad abstracta, que no se va a definir. Normalmente los símbolos son letras (a,b,c,…z),
dígitos (0,1,2…9) y otros caracteres (+,*,/,-,?...).
Un símbolo también puede estar formado por varias letras o caracteres, como las palabras reservadas
de un lenguaje de programación son símbolos de dicho lenguaje. Ejemplo: a,b,c,#,+,-,*, then,
begin, end, else,
EVOLUCIÓN DE LOS SÍMBOLOS
En las muchas etapas que componen la evolución, en la forma de comunicación humana, del desarrollo
del lenguaje hablado a la escritura, los signos visuales representan la transición de la perspectiva
visual, a través de las figuras y los pictogramas, a las señales abstractas. Sistemas de notación
capaces de transmitir el significado de conceptos, palabras o sonidos simples.
Los signos y símbolos transmiten ideas en las culturas prealfabetizadas y prácticamente analfabetas.
Pero su utilidad no es menor entre las verbalmente alfabetizadas: al contrario, es mayor. En la
sociedad tecnológicamente desarrollada, con su exigencia de comprensión inmediata, los signos y
símbolos son muy eficaces para producir una respuesta rápida. Su estricta atención a los elementos
visuales principales y su simplicidad estructural, proporcionan facilidad de percepción y memoria.
Estudio de los símbolos
El interés por los signos ha dado lugar a un importante campo de estudio: la semiótica. Ésta trata tanto
la función de los signos en el proceso de comunicación, como el lugar de los síntomas en el
diagnóstico médico. Los símbolos pueden componerse de información realista, extraídas del
entorno, fácil de reconocer, o también por formas, tonos, colores, texturas..., elementos visuales
básicos que no guardan ninguna similitud con los objetos del entorno natural. No poseen ningún
significado, excepto el que se les asigna. Existen muchas formas de clasificar a los símbolos;
pueden ser simples o complicados, obvios u oscuros, eficaces o inútiles. Su valor se puede
determinar según hasta donde penetran la mente pública en términos de reconocimiento y memoria.
VOCABULARIO O ALFABETO
Un vocabulario o alfabeto es un conjunto finito de símbolos, no vacío. Para definir que un símbolo a
pertenece a un alfabeto V, se utiliza la siguiente notación aV.
Los alfabetos se definen por enumeración de los símbolos que contienen, podemos ver los siguientes
ejemplos:
· V1={A,B,C,D,E,F,…..,X,Y,Z}
· V2={a,b,c,d,0,1,2,3,4,*,#,+}
· V3={0,1}
· V4= {if, then, begin, end, else, a,b,;,=,>}
· También se pueden definir las tablas ASCII y EBCDIC como los alfabetos de distintos
ordenadores.
Cadena
Una cadena es una secuencia finita de símbolos de un determinado alfabeto. Si no se ponen
restricciones al alfabeto, una cadena podrá estar formada por cualquier combinación finita de
los caracteres disponibles. Esta secuencia es ordenada y su longitud es arbitraria.
Ejm. Tomando en cuenta los alfabetos o vocabularios definidos anteriormente, podemos decir que:
abcb es una cadena del alfabeto V2
a+2*b es una cadena del alfabeto V2
000111 es una cadena del alfabeto V3
if a>b then b=a; es una cadena del alfabeto V4
Una cadena consiste en una secuencia de caracteres que se encuentran comprendidos entre unos
delimitadores que pueden ser:
-Comillas simples ' '
-Comillas dobles ""
-Documento incrustado <<< >>>
En caso de que se desee por ejemplo unas " " dentro de las comillas de la cadena de carácter es
necesario realizar la acción que se denomina escapar un carácter que consiste en precederlo de una
es decir". Los caracteres especiales que pueden aparecer dentro de un documento con delimitación
son:
Longitud de cadena
La longitud de una cadena consiste en el número de símbolos pertenecientes a la cadena. Ejm.
Tomando en cuenta los ejemplos de cadena podemos decir que:
· |abcb| es de longitud 4
· |a + 2*b| es de longitud 5
· |000111| es de longitud 6
· |if a>b then a=b;| es de longitud 9
Cadena vacía
Se denomina cadena vacía, que no tiene símbolos y se denota con l, por lo que su longitud es:
|l|=0
Concatenación de cadenas
Sean A y B dos cadenas cualesquiera, se denomina concatenación de A y B a una nueva cadena AB
constituida por los símbolos de la cadena A seguidos por los de la cadena B.
El elemento neutro de la concatenación es 1:
A 1 = 1A = A
Algunas operaciones con cadenas de caracteres
Las siguientes son algunas cadenas:
Asignación, consiste en asignar una cadena a otra.
Concatenación, consiste en unir dos cadenas o más (o una cadena con un carácter) para formar una
cadena de mayor tamaño.
Búsqueda, consiste en localizar dentro de una cadena una sub cadena más pequeña o un carácter.
Extracción, se trata de sacar fuera de una cadena una porción de la misma según su posición dentro
de ella.
Comparación, se utiliza para comparar dos cadenas.
Universo del discurso.
El conjunto de todas las cadenas que se pueden formar con los símbolos de un alfabeto, se denomina
universo del discurso del V y se representa por W(V). Evidentemente W(V) es un conjunto infinito.
La cadena vacía pertenece a W(V).
Ejm: Sea un alfabeto con una sola letra V={a}, entonces el universo del discurso es:
W(V) = {l, a, aa, aaa, aaaa, ….}, que contiene infinitas cadenas.
LENGUAJE
Se denomina lenguaje sobre un alfabeto V a un subconjunto del universo del discurso, o al conjunto
de cadenas de un determinado alfabeto, las cadenas del lenguaje están formadas gracias a un
alfabeto y una gramatica que están formalmente especificadas. Los lenguajes se definen por las
propiedades que cumplen sus cadenas.
Para representar las cadenas de un lenguaje se puede pensar hacerlo mediante la enumeración de sus
elementos, pero este método además de ser ineficiente en algunos casos es imposible, debido a que
la cantidad de cadenas del lenguaje puede ser infinitas.
A cada cadena de un lenguaje que ha sido formada a partir de una gramatica, también se le conoce
como fórmula bien formada.
Por ejemplo:
El conjunto de palíndromos (cadenas que se leen igual hacia adelante, que hacia atrás) sobre el
alfabeto {0,1}; algunas cadenas son:
L1= {λ, 0, 1, 00, 11, 010, 0110, 000000, 101101, 111111, ….}
Dado el vocabulario V= {a, b}; un posible lenguaje seria por ejemplo, las cadenas cuya longitud es
igual a dos L2= {aa, ab, ba, bb}.
Dada el siguiente vocabulario V={1,2}, encuentre y especifique lenguajes que sean finito e infinitos
como mínimo dos de cada uno.
Asi también un lenguaje está compuesto por Sintaxis: (gramática), que define las secuencias de
símbolos que forman cadenas válidas de un lenguaje. Y por Semántica, que es el significado de las
cadenas que componen un lenguaje.
Ejemplo 1:
Sintaxis: A
Semántica: es un número natural.
Diferente sintaxis en diferentes lenguajes:
A: natural
A: es un número que pertenece al conjunto de |N={1,2,3..N}
Ejemplo 2:
Sintaxis:
if a=b then write(a, " es igual a ", b )
else write(a, " es distinto a ", b )
Semántica:
Si se cumple la condición entonces se muestra un mensaje que ambos números son iguales.
Caso contrario, se escribe los número son distintos.
LENGUAJE VACIO
Es un conjunto vacío que se denota por {Φ}; este no debe confundirse con un lenguaje que contiene
una sola cadena y que esta sea la cadena vacía, es decir {λ}, donde el número de elementos
(cardinalidad) de estos dos conjuntos es diferente.
Cardinal ({Φ})= 0; Cardinal ({λ})= 1