Sie sind auf Seite 1von 15

TEORIA DE LENGUAJES

CAPITULO 1
1. Elementos bsicos de la teora de lenguajes y conjuntos.

1.1.

CONCEPTO
Es una rama de la informtica que se encarga del diseo,
implementacin anlisis, caracterizacin y clasificacin de lenguajes de
programacin y su caractersticas. Es un campo multidisciplinar,
dependiendo tanto de (y en algunos casos afectando) a las matemticas,
ingeniera del software, lingstica, e incluso ciencias cognitivas. Es una
rama bien reconocida de la informtica, y un rea activa de investigacin,
con resultados publicados en un gran nmero de revistas dedicadas a la
PLT, as como en general en publicaciones de informtica e ingeniera.
Un smbolo no oficial de la teora de lenguajes de programacin es la letra
griega lambda en minsculas. Este uso deriva del clculo lambda, un
modelo computacional ampliamente usado por investigadores de
lenguajes de programacin. Muchos textos y artculos sobre
programacin y lenguajes de programacin utilizan lambda de una u otra
manera.

1.2.

HISTORIA DE LA TEORA DE LENGUAJES


La historia de la teora de lenguajes de programacin precede incluso al
desarrollo de los propios lenguajes de programacin. El clculo lambda,
desarrollado por Alonzo Church, Max HL. Solis Villareal y Stephen Cole
Kleene en la dcada de 1930, es considerado como uno de los primeros

lenguajes de programacin del mundo, incluso pese a que tena intencin


de modelar la computacin ms que ser un medio para que los
programadores describan algoritmos para un sistema informtico. Muchos
lenguajes de programacin funcional se han caracterizado por proveer
una "fina apariencia" al clculo lambda, y muchos se describen en sus
trminos.
En la dcada de 1950, Noam Chomsky desarroll la Jerarqua de
Chomsky en el campo de la lingstica; un descubrimiento que
impact directamente a la teora de lenguajes de programacin y
otras ramas de la informtica.
El primer lenguaje de programacin (como tal) que se propuso fue
Plankalkl, que fue diseado por Konrad Zuse en los aos 40, pero
fue conocido pblicamente en 1972 (y no implementado hasta 2000,
cinco aos despus de la muerte de Zuse).

El primer lenguaje de programacin 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 creacin de un comit de cientficos para
desarrollar un lenguaje de programacin "universal"; el resultado de
su esfuerzo fue ALGOL 58.
Por otro lado, John McCarthy del MIT desarroll el lenguaje de
programacin Lisp (basado en el clculo Lambda), el primer lenguaje
con orgenes acadmicos en conseguir el xito. Con el triunfo de
estos esfuerzos inciales, los lenguajes de programacin se
convirtieron en un tema candente en la investigacin en la dcada de
1960 y en adelante.
En la dcada de 1960, el lenguaje Simula fue desarrollado por OleJohan Dahl y Kristen Nygaard; muchos consideran que es el primero
lenguaje orientado a objetos; Simula tambin introdujo el concepto de
corrutinas.
En la dcada de los 70 :

Un pequeo equipo de cientfico 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 programacin


Scheme, un dialecto de Lisp que incorpora mbitos lxicos, 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 programacin ahora conocidos como
lenguajes de programacin funcional.

La aparicin del process calculi, como el clculo de sistemas


comunicantes de Robin Milner, y el modelo de Comunicacin
secuencial de procesos de C. A. R. Hoare.

La aplicacin de la teora de tipos como una disciplina a los


lenguajes de programacin, liderada por Milner; esta aplicacin ha
conducido a un tremendo avance en la teora de tipos en cuestin
de aos.

Posteriormente Philip Wadler introdujo el uso de Monads para


estructurar programas en lenguajes de programacin funcional.

1.3.

SUB DISCIPLINAS DE LA TEORA DE LENGUAJES


Existen varios campos de estudio que o bien caen dentro de la teora de
lenguajes de programacin o bien tienen una profunda influencia en ella.
Entre estos tenemos:
1.3.1. La Teora de los compiladores (Resumen)
Es la base formal sobre la escritura de compiladores (o ms
generalmente traductores); programas que traducen un programa
escrito en un lenguaje a otra forma. Las acciones de un compilador
se dividen tradicionalmente en anlisis sintctico, anlisis
semntico, optimizacin y generacin de cdigo.
1.3.2. La Teora de tipos (Resumen)
Es el estudio de sistemas de tipos, que son "mtodos sintcticos
tratables para proveer la ausencia de ciertos comportamientos de
programa mediante la clasificacin de frases segn los tipos de
valores que computan." (Types and Programming Languages, MIT
Press, 2002). Muchos lenguajes de programacin se distinguen por las
caractersticas de sus sistemas de tipos. Puede referirse al diseo,
anlisis y estudio de los sistemas de tipos, aunque algunos
cientficos de la computacin limitan el significado del trmino al
estudio de formalismos abstractos como el clculo lambda tipado.
Bertrand Russell invent la primera teora de tipos en respuesta a
su descubrimiento donde la versin de Gottlob Frege de la teora
de conjuntos nativa es afectada por la paradoja de Russell. Este
tipo de la teora de tipos aparece primariamente en el Principia
Mathematica de Whitehead y Russell.
Esta teora evita la paradoja de Russell creando una jerarqua de
tipos, luego asignando cada entidad matemtica a un tipo. Objetos
de un tipo dado son creados exclusivamente por objetos de un tipo
anterior (aquellos ms abajo en la jerarqua), por lo tanto evitando
ciclos.
1.3.3. La Semntica formal (Resumen)
Es la especificacin formal del comportamiento de programas de
ordenador y lenguajes de programacin.
Es el estudio de las interpretaciones de los lenguajes formales. Los
lenguajes formales pueden definirse sin necesidad de dar ningn
significado a sus expresiones. Una interpretacin de un lenguaje
formal es bsicamente una asignacin de significados a sus
smbolos, y de condiciones de verdad a sus frmulas bien
formadas. Un objetivo importante de la construccin de una
semntica formal para un lenguaje formal es la caracterizacin de
la relacin de consecuencia lgica en trminos semnticos, y la
demostracin de meta teoremas a partir de esa caracterizacin.

1.3.4. La Transformacin de programas (Resumen)


Es el proceso de transformar un programa de una forma (lenguaje)
a otra forma; el anlisis de programas es problema general de
examinar un programa mediante la determinacin de sus
caractersticas clave (como la ausencia de clases de errores de
programa). Un componente importante para implementar estas
tcnicas viene dada por la informacin "flujo de datos" que puede
obtenerse por tcnicas de anlisis esttico. Las tcnicas de
plegado-desplegado ("folding-unfolding") son las mejor estudiadas
en el contexto de la transformacin de programas. Estas tcnicas
fueron formuladas originalmente en el caso de programas
funcionales por Burtall y Darlington y posteriormente introducidas
en la programacin lgica por Komorowski. Posteriormente, se han
realizado numerosos esfuerzos para la construccin de sistemas
automticos basados en esta metodologa, que ha sido tambin
adaptada a los sistemas de deduccin parcial que producen, a
partir de un programa y una entrada incompleta (un objetivo G
parcialmente instanciado), un programa residual ms eficiente que
es equivalente al original respecto a G y cualquiera de sus
instancias.
1.3.5. Sistemas en tiempo de ejecucin (Resumen)v
Se refiere al desarrollo de entornos run time para lenguajes de
programacin y sus componentes, incluyendo mquinas virtuales,
recoleccin de basura, e interfaces para funciones externas. Es un
software que provee servicios para un programa en ejecucin pero
no es considerado en s mismo como parte del sistema operativo.
Est diseado para apoyar la ejecucin de los programas de
ordenador escrito en algn lenguaje de programacin. El tiempo
de ejecucin del sistema contiene las implementaciones de bajo
nivel comandos bsicos y puede tambin aplicar a nivel de
comandos de alto y puede apoyar la comprobacin de tipos,
depuracin, e incluso la generacin de cdigo y optimizacin.
Algunos de los servicios del sistema en tiempo de ejecucin son
accesibles para el programador a travs de una interfaz de
programacin de aplicaciones, pero otros servicios (tales como la
programacin de tareas y gestin de los recursos) pueden ser
inaccesibles.
Alivia los programadores de la carga de la escritura de cdigo para
tareas mundanas como el dibujo de texto en la pantalla o hacer una
conexin a Internet; Tambin proporciona una capa de abstraccin
que oculta la complejidad o las variaciones en los servicios que
ofrece el sistema operativo.
En el lmite, el sistema en tiempo de ejecucin puede ser un cdigo
de mquina-P o mquina virtual, que se esconde incluso el
procesador de sistema de instruccin. Este es el enfoque adoptado
por muchos lenguajes interpretados como AWK, y algunos
lenguajes como Java que estn destinados a ser compilado en
algunos pseudo-independiente de la mquina ( cdigo de bytes ).
Este sistema simplifica enormemente la tarea de implementacin

del lenguaje y su adaptacin a diferentes mquinas, y permite el


lenguaje sofisticadas caractersticas tales como la reflexin. World
Wide Web Tambin permite que el mismo programa a ser
ejecutado en cualquier mquina sin tener que recompilar, una
caracterstica que se ha vuelto muy importante, ya que la difusin
de la World Wide Web.
1.3.6. Anlisis comparativo de lenguajes de programacin
(Resumen)
Busca clasificar los lenguajes de programacin en diferentes tipos
basados en sus caractersticas; amplias categoras de diferentes
lenguajes de programacin se conocen frecuentemente como
paradigmas de computacin.
1.3.7. La Meta programacin (Resumen)
Es la generacin de programas de mayor orden que, cuando se
ejecutan, producen programas (posiblemente en un lenguaje
diferente, o en un subconjunto del lenguaje original) como
resultado. Se puede definir cmo: programar un programa que
genere o modifique otros programas o a s mismos el ejemplo ms
comn de la meta programacin es un compilador que te permite
convertir un programa escrito en un lenguaje de alto nivel en uno
con lenguaje de bajo nivel, lenguaje mquina o ensamblador. Pero
la meta programacin tiene otras aplicaciones ms potentes,
aunque algunos creen que slo es til para los programadores
flojos que no quieren escribir programas, es cierto te puede ahorrar
mucho tiempo, un ejemplo sencillo de meta programacin es:
#!/bin/bash
# metaprogram
echo '#!/bin/bash' >program
for ((I=1; I<=992; I++)); do
echo "echo $I" >>program
done

chmod +x program
Este script genera un nuevo programa que imprime por pantalla los
nmeros 1 a 992. Esto es slo una muestra de cmo usar cdigo
para escribir ms cdigo, no la forma ms eficiente de imprimir una
lista de nmeros. En cualquier caso, un buen programador puede
escribir y ejecutar esta meta programa en apenas un par de
minutos, y habr generado exactamente 1000 lneas de cdigo en
esa cantidad de tiempo.
1.3.8. Lenguajes dedicados (Resumen)
Son lenguajes construidos para resolver problemas en un dominio
de problemas en particular de manera eficiente.

1.4.

QUE SON LOS SMBOLOS


Es la representacin perceptible de una idea, con rasgos asociados por
una convencin socialmente aceptada. Es un signo sin semejanza ni
contigidad, que solamente posee un vnculo convencional entre su
significante y su denotado, adems de una clase intencional para su
designado. Los smbolos son pictografas con significado propio. Muchos
grupos tienen smbolos que los representan; existen smbolos referentes
a diversas asociaciones culturales: artsticas, religiosas, polticas,
comerciales, deportivas, etc.
Es una entidad abstracta, que no se va a definir. Normalmente los
smbolos son letras (a,b,c,z), dgitos (0,1,29) y otros caracteres
(+,*,/,-,?...).
Un smbolo tambin puede estar formado por varias letras o caracteres,
como las palabras reservadas de un lenguaje de programacin son
smbolos de dicho lenguaje.
Ejemplo:
a,b,c,#,+,-,*, then, begin, end, else,

1.4.1. Evolucin de los smbolos


En las muchas etapas que componen la evolucin, en la forma de
comunicacin humana, del desarrollo del lenguaje hablado a la escritura,
los signos visuales representan la transicin de la perspectiva visual, a
travs de las figuras y los pictogramas, a las seales abstractas.
Sistemas de notacin capaces de transmitir el significado de conceptos,
palabras o sonidos simples.
Los signos y smbolos transmiten ideas en las culturas pre alfabetizadas
y prcticamente analfabetas. Pero su utilidad no es menor entre las
verbalmente alfabetizadas: al contrario, es mayor. En la sociedad
tecnolgicamente desarrollada, con su exigencia de comprensin
inmediata, los signos y smbolos son muy eficaces para producir una
respuesta rpida. Su estricta atencin a los elementos visuales
principales y su simplicidad estructural, proporcionan facilidad de
percepcin y memoria.
1.4.2. Estudio de los smbolos
El inters por los signos ha dado lugar a un importante campo de
estudio: la semitica. sta trata tanto la funcin de los signos en el
proceso de comunicacin, como el lugar de los sntomas en el
diagnstico mdico. Los smbolos pueden componerse de informacin
realista, extradas del entorno, fcil de reconocer, o tambin por formas,
tonos, colores, texturas..., elementos visuales bsicos que no guardan
ninguna similitud con los objetos del entorno natural. No poseen ningn
significado, excepto el que se les asigna. Existen muchas formas de
clasificar a los smbolos; pueden ser simples o complicados, obvios u
oscuros, eficaces o intiles. Su valor se puede determinar segn hasta
donde penetran la mente pblica en trminos de reconocimiento y
memoria.

1.5.

VOCABULARIO O ALFABETO
Un vocabulario o alfabeto es un conjunto finito de smbolos, no vaco.
Para definir que un smbolo a pertenecer a un alfabeto V, se utiliza la
siguiente notacin a V . Los alfabetos se definen por enumeracin de
los smbolos que contienen, podemos ver los siguientes ejemplos:

1.6.

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,;,=,>}
Tambin se pueden definir las tablas ASCII y EBCDIC como los
alfabetos de distintos ordenadores.

CADENA
Una cadena es una secuencia finita de smbolos de un determinado
alfabeto. Ejemplo. 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 carcter es necesario realizar la accin que se denomina
escapar un carcter que consiste en precederlo de una es decir. Los
caracteres especiales que pueden aparecer dentro de un documento con
delimitacin son:
1.6.1. LONGITUD DE CADENA
La longitud de una cadena consiste en el nmero de smbolos
pertenecientes a la cadena. Ejemplo: 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

1.6.2. CADENA VACA


Se denomina cadena vaca, que no tiene smbolos y se denota con
l, por lo que su longitud es:
l 0

1.6.3. CONCATENACIN DE CADENAS


Sean A y B dos cadenas cualesquiera, se denomina concatenacin
de A y B a una nueva cadena AB constituida por los smbolos de la
cadena A seguidos por los de la cadena B.
El elemento neutro de la concatenacin es 1:
A 1=1 A= A
1.6.4. UNIVERSO DEL DISCURSO
El conjunto de todas las cadenas que se pueden formar con los
smbolos de un alfabeto, se denomina universo del discurso V y se
representa por W(V). Evidentemente W(V) es un conjunto infinito.
La cadena vaca pertenece a W(V).Ejemplo:
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.

CAPITULO 2
2. Cadenas y gramticas formales.

2.1.

QU ES UNA GRAMATICA?

2.2.

Es un ente formal para especificar de una manera finita, es el conjunto de


cadenas de smbolos que constituyen un lenguaje.
Define la estructura de las frases y palabras de un lenguaje.
Mtodo para generar las palabras de un lenguaje a partir de un alfabeto;
donde para generar estas palabras se necesitan derivaciones.
Conjunto finito de reglas para formar cadenas finitas juntando smbolos del
alfabeto.

DEFINICION FORMAL DE UNA GRAMATICA

CAPITULO 3
3. Expresiones Regulares

3.1.

DEFINICION
Las expresiones regulares son un metalenguaje para describir a otros
lenguajes. (Resumen)
Surgen para poder representar de manera condensada un lenguaje.
(Resumen)
Las expresiones regulares se corresponden con los lenguajes y es por esto
que guardan una relacin con los vocabularios o alfabetos. (Resumen)
Representan a los lenguajes regulares y su propsito es simplificar la
escritura de estos lenguajes. (Resumen)
Su objetivo es representar todos los posibles lenguajes definidos sobre un
alfabeto en base a una serie de lenguajes primitivos y unos operadores de
composicin. (Resumen)
Se usan como un lenguaje para describir patrones en texto que son sencillos
pero muy tiles. (Resumen)

3.2.

OPERACIONES CON LEGUAJES REGULARES

A. UNION O ALTERNATIVA:
B. CONCATENACION:
C. PORTENCIA DE UN LENGUAJE: No existe pero se toma por ello un caso
particular de la concatenacin.
D. CIERRE U OPERACIN ESTRELLA:
E. CIERRE POSITIVO:

+={ L } { } { } { LLL } = n=1


L Ln

3.3.

PRECEDENCIA DE OPERACIONES

Teorema
Dos expresiones regulares son iguales, si designan al mismo conjunto
regular.

3.4.

PROPIEDADES

Resolucion:

aa*bb* =
aa0bb0i= ab
aa1bb0= aab
aa3bb0= aaaab
aa0bb3= abbb
aa0bb1=abb
aa3bb0=aaaab

Sea la ER 1(01)* cuyo vocabulario es: V={0,1}


Podemos obtener las siguientes cadenas:
0
1.- 1(01) =1
3
2.- 1(01) 1(010101) = 1010101
Algunas cadenas de los lenguajes son:
L={1,1010101,.}

Sea la ER (0 | 1)

cuyo vocabulario es: V={0,1}

+
+ ++
Esto es igual a (0 | 1) = (0 1 )

Podemos obtener las siguientes cadenas:


1 11
1
1.- (0 1 ) (01) =01
1 13
3
2.- (0 1 ) (01) 010101
+ ++
2 13
3
3.- (0 1 ) (0 1 ) (001) 001001001
Algunas cadenas de los lenguajes son:
L={01,010101,001001001,.}

Escriba aqu la ecuacin.

Das könnte Ihnen auch gefallen