You are on page 1of 17

Teoría de Lenguajes UNASAM

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.

Estudia entidades matemáticas abstractas denominadas lenguajes que en ningún momento


debemos confundir o equiparar con las lenguas naturales. Sin embargo, en determinadas
circunstancias sirven como modelos abstractos de determinadas propiedades de las lenguas
naturales, de ahí la importancia de conocer los fundamentos de la teorí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.

1.2. HISTORIA DE LA TEORÍA DE LENGUAJES


La historia de la teoría de lenguajes de programación precede incluso al desarrollo de los
propios lenguajes de programación, entre los eventos históricos que de esta disciplina podemos
mencionar los siguientes:
- En 1930 se desarrolló el cálculo lambda, por Alonzo Church, Max HL. Solis Villareal y
Stephen Cole Kleene, es considerado como uno de los primeros lenguajes de programación
del mundo, incluso pese a que tenía intención de modelar la computación más que ser un
medio para que los programadores describan algoritmos de un sistema informático. Muchos
lenguajes de programación funcional se han caracterizado por proveer una "fina apariencia" al
cálculo lambda, y muchos se describen en sus términos.

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

- 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.

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

 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 aplicar 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).

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

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
científicos de la computación limitan el significado del término al estudio de formalismos
abstractos como el cálculo lambda tipado.
Es una familia de formalismos ideados para servir de fundamento a la Matemática que ha
demostrado tener aplicaciones muy significativas en Ciencia de la Computación. Entre ellas
se cuentan: los sistemas de tipos de los lenguajes de programación, las lógicas de
programación --especialmente las relativas a lenguajes funcionales-- y los modelos o
estructuras de sistemas lógicos. Asimismo, asociados a estos formalismos se desarrollan e
investigan asistentes de desarrollo o demostración implementados en máquina que permiten
su utilización práctica. Este curso aspira a desarrollar teoría y práctica de las teorías de tipos,
estudiando su formulación, principales propiedades matemáticas, herramientas relacionadas
y aplicaciones.
Bertrand Russell inventó la primera teoría de tipos en respuesta a su descubrimiento donde
la versión de Gottlob Frege de la teoría de conjuntos nativa es afectada por la paradoja de
Russell. Este tipo de la teoría de tipos aparece primariamente en el Principia Mathematica de
Whitehead y Russell. Esta teoría evita la paradoja de Russell creando una jerarquía de tipos,
luego asignando cada entidad matemática a un tipo. Objetos de un tipo dado son creados
exclusivamente por objetos de un tipo anterior (aquellos más abajo en la jerarquía), por lo
tanto evitando ciclos.
1.3.3. La Semántica formal.-
Es la especificación formal del comportamiento de programas de ordenador y lenguajes de
programación.
Es el estudio de las interpretaciones de los lenguajes formales. Los lenguajes formales
pueden definirse sin necesidad de dar ningún significado a sus expresiones. Una
interpretación de un lenguaje formal es básicamente una asignación de significados a sus
símbolos, y de condiciones de verdad a sus fórmulas bien formadas. Un objetivo importante
de la construcción de una semántica formal para un lenguaje formal es la caracterización de
la relación de consecuencia lógica en términos semánticos, y la demostración de meta
teoremas a partir de esa caracterización.
1.3.4. La Transformación de programas.- Es el proceso de transformar un programa de una
forma (lenguaje) a otra forma; el análisis de programas es problema general de examinar
un programa mediante la determinación de sus características clave (como la ausencia de
clases de errores de programa). Un componente importante para implementar estas

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

técnicas viene dada por la información "flujo de datos" que puede obtenerse por técnicas
de análisis estático. Las técnicas de plegado-desplegado ("folding-unfolding") son las
mejor estudiadas en el contexto de la transformación de programas.
Estas técnicas fueron formuladas originalmente en el caso de programas funcionales por Burtall y
Darlington y posteriormente introducidas en la programación lógica por Komorowski.
Posteriormente, se han realizado numerosos esfuerzos para la construcción de sistemas automáticos
basados en esta metodología, que ha sido también adaptada a los sistemas de deducción parcial que
producen, a partir de un programa y una entrada incompleta (un objetivo G parcialmente
instanciado), un programa residual más eficiente que es equivalente al original respecto a G y
cualquiera de sus instancias.
1.3.5. Sistemas en tiempo de ejecución.- Se refiere al desarrollo de entornos runtime para
lenguajes de programación y sus componentes, incluyendo máquinas virtuales,
recolección de basura, e interfaces para funciones externas. Es un software que provee
servicios para un programa en ejecución pero no es considerado en sí mismo como parte
del sistema operativo. Está diseñado para apoyar la ejecución de los programas de
ordenador escrito en algún lenguaje de programación . El tiempo de ejecución del sistema
contiene las implementaciones de bajo nivel comandos básicos y puede también aplicar a
nivel de comandos de alto y puede apoyar la comprobación de tipos , depuración , e
incluso la generación de código y optimización. Algunos de los servicios del sistema en
tiempo de ejecución son accesibles para el programador a través de una interfaz de
programación de aplicaciones , pero otros servicios (tales como la programación de tareas
y gestión de los recursos ) pueden ser inaccesibles.
Alivia los programadores de la carga de la escritura de código para tareas mundanas como el dibujo
de texto en la pantalla o hacer una conexión a Internet; También proporciona una capa de
abstracción que oculta la complejidad o las variaciones en los servicios que ofrece el sistema
operativo. En el límite, el sistema en tiempo de ejecución puede ser un código de máquina-P o
máquina virtual , que se esconde incluso el procesador de sistema de instrucción . Este es el enfoque
adoptado por muchos lenguajes interpretados como AWK , y algunos lenguajes como Java que
están destinados a ser compilado en algunos pseudo-independiente de la máquina ( código de bytes
). Este sistema simplifica enormemente la tarea de implementación del lenguaje y su adaptación a
diferentes máquinas, y permite el lenguaje sofisticadas características tales como la reflexión .
World Wide Web También permite que el mismo programa a ser ejecutado en cualquier máquina
sin tener que recompilar, una característica que se ha vuelto muy importante, ya que la difusión de
la World Wide Web .

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

1.3.6. Análisis comparativo de lenguajes de programación.- Busca clasificar los lenguajes


de programación en diferentes tipos basados en sus características; amplias categorías de
diferentes lenguajes de programación se conocen frecuentemente como paradigmas de
computación.
1.3.7. La Meta programación.- Es la generación 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 cómo: “programar un
programa que genere o modifique otros programas o a si mismos” el ejemplo más común
de la meta programación es un compilador que te permite convertir un programa escrito
en un lenguaje de alto nivel en uno con lenguaje de bajo nivel, lenguaje máquina o
ensamblador. Pero la meta programación tiene otras aplicaciones más potentes, aunque
algunos creen que sólo es útil para los programadores flojos que no quieren escribir
programas, es cierto te puede ahorrar mucho tiempo, un ejemplo sencillo de meta
programación 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 números 1 a 992. Esto es sólo una
muestra de cómo usar código para escribir más código, no la forma más eficiente de imprimir una
lista de números. En cualquier caso, un buen programador puede escribir y ejecutar este
metaprogama en apenas un par de minutos, y habrá generado exactamente 1000 líneas de código en
esa cantidad de tiempo.
1.3.8. Lenguajes dedicados.- Son lenguajes construidos para resolver problemas en un
dominio de problemas en particular de manera eficiente.

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

Que son los Símbolos


Es la representación perceptible de una idea, con rasgos asociados por una convención socialmente
aceptada. Es un signo sin semejanza ni contigüidad, que solamente posee un vínculo convencional
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.

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

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 aV.
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: “/”m”
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

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

· |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.

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

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.

L1={11,12,21,22} FINITO(que la longitud es igual a dos)

L2={11,111,112,1112,……….}INFINITO(que la longitud puede ser de dos a mas)

V1= {a, b}

Encuentren 2 lenguajes finitos y 2 infinitos teniendo como base el alfabeto V1

SOLUCION AL PROBLEMA PLANTEADO


Ítem Nombre Tipo Definición Elementos
1 L1(V1) Finito Lenguaje cuyas cadenas tienen una {aa,ab,bb,ba}
longitud igual a 2
2 L2 (V1) Finito Lenguaje cuyas cadenas tienen {aaa,bbb}
símbolos iguales y de longitud 3
3 L3(V1) Infinito Lenguaje cuyas cadenas sean {abba,aaabaaa,…}
capicúa
4 L4(V1) Infinito Lenguaje cuyas cadenas tengan {aa,ab,aaaa,bab,…}
longitud mayores o iguales a 2
5 L5(v1) Infinito Lenguaje cuyas cadenas tengan {a,aba,ababa,….}
longitud primo
6 L6(v1) Vacío Lenguaje cuyas cadenas no {},
contienen los a y b.

*) Se puede concluir que a partir de un vocabulario se pueden obtener o generar varios lenguajes
teniendo en cuenta la propiedad o propiedades que cumplen y además estos pueden ser finitos,
infinitos e incluso vacío.

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

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

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

LAS GRAMATICAS

Definición general
Es un ente formal o método que nos permite especificar de manera finita las cadenas de símbolos(a
partir de un vocabulario), que constituyen o forman un lenguaje, definen la estructura de esas
cadenas o frases. Para hacerlo utilizan las derivaciones basándose en un conjunto de reglas o
producciones.
Definición formal
Es una cuádrupla G=(VT, VN, S, P) que está formada por los siguientes elementos:
Vocabulario terminal (VT)
Es un conjunto finito de símbolos que por lo general se define por la enumeración de sus
símbolos, se utilizan para formar las cadenas del lenguaje; es decir las cadenas, palabras o frases del
lenguaje están formadas por los símbolos de este vocabulario.
Entre los símbolos que pueden formar parte de este vocabulario tenemos los siguientes:
 Letras minúsculas del abecedario sobre todo las primeras: (a,b,c,d,e,…).
 Operadores como (+,-,*,/,…).
 Caracteres especiales (&,#,@,%,…..).
 Los dígitos (0,1,2,3,…,8,9).
 Palabras reservadas de un lenguaje de programación (if, else, while, then, etc.).

Vocabulario No terminal (VN)


Es un conjunto finito de símbolos introducidos como elementos auxiliares para la definición de
la gramatica, estos símbolos no forman parte de las cadenas del lenguaje, no se considera el símbolo
S.
Entre los elementos o símbolos de este vocabulario tenemos:
 Letras mayúsculas del abecedario sobre todo las primeras: (A, B, C, D, E,…).

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

 Nombres en minúsculas pero encerrados entre paréntesis angulares <expresión>, <termino>,


<factor>, …..

Símbolo inicial (S)


Es un símbolo no terminal a partir del cual se aplican las reglas de la gramatica para obtener las
cadenas del lenguaje. Es decir si derivamos una cadena pero sin considerar el símbolo inicial esto
significa que dicha cadena no pertenece al lenguaje de la gramatica en cuestión.
Producciones (P)
Es un conjunto finito de producciones que se pueden enumerar por medio de reglas o por medio de
un metalenguaje. Conjunto de pares ordenados o producciones donde cada par ordenado está
formado por (x,y) con x, y ϵ ∑* (conjunto de todas las cadenas que se pueden formar con los
símbolos del vocabulario ∑, incluida la cadena vacía).
En una gramatica tenemos un Vocabulario V=VT U VN; además VT intersectado con VN es
igual al vacío.
Ejemplos de una gramática
Sea la gramatica G(VT, VN, S, P); donde:
VT= {a, b, є}; VN={A, B, C}; S=A ;
P={AaABC, AabC, Aє, CBBC, bBbb, bCb} ó
P={(A,aABC), (A,abC), (A,є), (CB,BC), (bB,bb), (bC,b)}
Genera cadenas:
Derivación 1).- A(2)abC (6)ab
Derivacion2).- A(1)aABC (1)
 aaABCBC (2)
 aaabCBCBC(6) aaabBCBC(5) aaabbCBC(6)
aaabbBC(5) aaabbbC (5) aaabbb
Derivación
P2 P6
abC ab
Resultado ab

Derivación
P1 P1 P2 P6 P5 P6 P5 P5
aABC aaABCBC aaabCBCBC AaabBCBC aaabbCB aaabbBC aaabbbC aaabbb
C
Resultado Aaabbb

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

TIPOS DE GRAMÁTICAS
Las gramáticas según Noam Chomsky se dividen en 4 tipos
Tipo 0 (Generales no restringidas), Tipo 1 (Sensibles al contexto, contextuales), Tipo 2
(independientes del contexto) y Tipo 3 (Regulares). Para lograr esa clasificación Chomsky aplico
restricciones sobre las reglas de derivación o producciones de la gramatica y el resultado fue una
jerarquía respecto a los tipos de gramatica; es decir que la gramatica más general o menos
restringida va incluyendo a la más restringida. Notaciones de la cadena vacía (l, λ, є).
Gramáticas de tipo 0 o no restringidas
En este tipo de gramatica las reglas de producción tienen la forma: αβ

Siendo, α є (VN U VT)+ Y β є (VN U VT)* , La única restricción es que ninguna de sus
producciones debe tener la forma: λ β
Por lo tanto en realidad todas las gramáticas son del tipo 0.
Por ejemplo la gramatica cuyas producciones son las siguientes:
P={AaABC, AabC, Aє, CBBC, bBbb, bCb}
Gramáticas de tipo 1 o no sensibles al contexto
En este tipo de gramáticas las producciones o reglas de derivación tienen la siguiente forma:

αAβ  αᵞβ

siendo A є VN; α,β є (VN U VT)* y ᵞ є (VN U VT)+


por ejemplo: G= ({S,A,B}, {a,b}, S, P)
Producciones:
P= {SaB, SbA, Aa, AaS, AbAA, Bb, BbS, BaBB}
Analizando:

(S, aB); A=S α=λ ; β= λ ᵞ=aB


λSλ λaBλ

Aa ; A=A α=λ ; β= λ ᵞ=a ; todas sus producciones cumplen con las restricciones, por lo

tanto si es una gramatica de tipo 1.

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

1.- Sea la Gramatica G1=({S},{a,b},S,P={SaaaaSbbbb, aSbab}); determinar si es o no del tipo 1:

Analizando
Producción αAβ  αᵞβ Situación

SaaaaSbbbb S; aaaaSbbbb;
α=λ; A=S ; α=λ; ᵞ= Cumple
β= λ aaaaSbbbb ; β= λ
aSbab aSb ; ab;
α=a; A=S ; α=a; ᵞ= b ;
β= b β= λ No cumple.
o
α= λ; ᵞ= a;
β= b
Resultado La segunda producción no cumple con las reglas, por lo
tanto esta gramatica no es del tipo 1.

2.- Sea la Gramatica G2=({S,A},{a,b},S,P={SabAS, abAbaab, Sa, Ab}); determinar si es o


no del tipo 1:
Analizando
Producción αAβ  αᵞβ Situación

SabAS S; abAS;
α=λ; A=S ; α=λ; ᵞ= abAS ; Cumple
β= λ β= λ
abAbaab abA ; baab;
α=ab; A=A ; α=b; ᵞ= aa ;
β= λ β= b No cumple.
o
α= λ; ᵞ= baab;
β= λ
Sa S; a; Cumple
α=λ; A=S ; α= λ; ᵞ= a;
β= λ β= λ
Ab A; b; Cumple
α=λ; A=A ; α= λ; ᵞ= b;
β= λ β= λ
Resultado La segunda producción no cumple con las restricciones,
por lo tanto esta gramatica no es del tipo 1.

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

Propiedades de las Gramáticas de Tipo 1


Las gramáticas de tipo 1 deben cumplir 2 propiedades que son las siguientes:
a. Propiedad de no decrecimiento

b. Propiedad de sensibilidad al contexto

Sea G ({A,S},{a,b}, S, P={SaS, SaA, AbA, Ab})

Derivación
P1 P2 P3 P4
aS aaA aabA aabb

Resultado Computo: P1, P2, P3, P4 Cadena= aabb

Derivación
P2 P3 P3 P4
aA abA abbA abbb
Resultado Computo: P2, P3, P3, P4 Cadena= abbb

L(G)={anbm/ n>=1 ˄ m>=1}

aabb , a2b2 n=2 ˄ m=2

abbb , n=1 ˄ m=3 a 1b3

n=1 ˄ m=1 ab

Derivación
P2 P4
aA ab
Resultado Computo: P2, P4 Cadena= ab

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática


Teoría de Lenguajes UNASAM

n=3 m=3 ; aaabbb


Sea G ({A,S},{a,b}, S, P={SaS, SaA, AbA, Ab})
Derivación
P1 P1 P2 P3 P3 P4
aS aaS aaaA aaabA aaabbA aaabbb
Resultado Computo: P1, P1, P2, P3, P3, P4 Cadena= aaabbb

Ing. Miguel Angel Silva Zapata Ingeniería de Sistemas e Informática

You might also like