Sei sulla pagina 1di 116

UNIVERSIDAD TECNOLÓGICA NACIONAL - FACULTAD REGIONAL TUCUMÁN

DEPARTAMENTO DE SISTEMAS

CÁTEDRA SINTAXIS Y SEMÁNTICA DE LOS LENGUAJES


WWW.VIRTUAL.UTN.EDU.AR/FRT

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. PRELIMINARES

LENGUAJES :

Lenguaje, medio de comunicación entre los


seres humanos a través de signos orales y
escritos que poseen un significado.
En un sentido más amplio, es cualquier
procedimiento que sirve para comunicarse.
Algunas escuelas lingüísticas entienden el
lenguaje como la capacidad humana que
conforma al pensamiento.

Microsoft ® Encarta ® 2007. © 1993-2006 Microsoft Corporation.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. PRELIMINARES

LENGUAJES:

 de Programación
 de Música
LENGUAJES FORMALES NIVELES
 de Matemática
 Léxico
 de Química
 Sintáctico
 Semántico
 Español  Pragmático
(Oral-Escrito-Señas)
LENGUAJES NATURALES
 Inglés
 Árabe

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

ALFABETOS:

ALFABETO: Conjunto finito no vacío de símbolos diferentes.

Notación: Nombre genérico de un alfabeto: Σ


Símbolos abstractos de un alfabeto
primeras letras del abecedario en minúscula (a, b, c, …)

Ejemplos: Σ = { a, b, c , d }
Binario = { 0, 1 }
Letras = { a, b, c, d, e, ….., x, y, z }
Español = {el, la, … , casa, perro, …, es, come, … , linda,
alegremente, …}
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

ALFABETOS:

 Para describir un hecho o entidad se utilizan conjuntos de símbolos


que en general llamamos DATOS.

 Por otro lado, una INFORMACIÓN es un conjunto de datos


significativos: Reconocibles, Íntegros, Inequívocos, Relevantes.

 En el ámbito de la informática son de uso frecuente los alfabetos o


códigos ASCII y EBCDIC.

 No debemos confundir el “nombre” del símbolo con el propio símbolo.


Por ejemplo: al símbolo $ lo llamamos PESO, en otro contexto
podríamos llamarlo DÓLAR, pero sigue siendo el
mismo símbolo.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

PALABRAS o CADENAS:

PALABRA: Secuencia finita de símbolos pertenecientes a un alfabeto.

Notación: últimas letras del abecedario en minúsculas (.. w, x, y, z)

Ejemplos: Σ: a, b, aa, ab, ba, bb, abcd, aadd


Binario: 011, 11011, 00, 11

Letras: casa, pieza, del, abc

Español: la_casa_es_linda
el_perro_come_alegremente

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

PALABRAS o CADENAS:

 La palabra vacía, que representamos con λ (lambda), es aquella


secuencia que no contiene símbolo alguno.
 Prefijo: secuencia de cero o más símbolos iniciales de una palabra.
 Sufijo: secuencia de cero o más símbolos finales de una palabra.
 Subcadena: secuencia de símbolos obtenida al eliminar un sufijo o un
prefijo de una palabra.
 Σ* representa al conjunto de todas las palabras w formadas por símbolos
de dicho alfabeto, es decir el Conjunto Universal de arreglos con
repeticiones de símbolos sobre Σ.
 Σ+ representa al Conjunto Universal sin la palabra vacía.
o sea que: Σ+ = Σ* - { λ }
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

LENGUAJES FORMALES:

LENGUAJE: Cualquier subconjunto L del Conjunto Universal de


palabras sobre un alfabeto Σ.

Notación: L1, L2, ….

Ejemplos: Σ: L1 = {a, b, aa, ab, ba, bb, abcd, aadd}


Binario: L2 = {011, 11011, 00, 11}

Letras: L3 = {casa, pieza, del, abc}

Español: L4 = {la_casa_es_linda,
el_perro_come_alegremente}

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

LENGUAJES FORMALES:

Podemos decir que: L ⊆ Σ*

Los siguientes son casos particulares significativos:


 El Lenguaje Universal Σ*
 El Lenguaje Vacío Ф
 El Lenguaje Lλ = { λ }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON PALABRAS:

CONCATENACIÓN:
Función con dominio en Σ*x Σ* y rango en Σ*. Tal que dadas las palabras u y
v, la concatenación de u con v da como resultado otra palabra w formada por la
secuencia de símbolos de u seguida de la secuencia de símbolos de v.

Notación: w = u.v
Propiedades: dadas las palabras {u, v, w} se cumplen las leyes:
Asociativa: (u.v).w = u.(v.w)
No conmutativa: En general u.v ≠ v.u
Elemento Neutro λ: λ.u = u.λ = u
Ejemplos: Dado el alfabeto Vocal = {a, e, i, o, u} entonces iui . λ = iui
ae . ou = aeou (ieu . aa) . u = ieu . (aa . u) = ieuaau

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON PALABRAS:

POTENCIACIÓN:
Función con dominio en Σ*x N y rango en Σ*. Tal que dada la palabra u y el
número natural i, la potencia con base u y exponente i da como resultado otra
palabra w formada por una sucesión de i palabras u.

Notación: w = u i
Propiedades:
 Desde un punto de vista práctico la potencia es una forma reducida
de representar la concatenación de una palabra consigo misma.
 Por definición u0 = λ y u1 = u
Ejemplos: Dado el alfabeto Binario = {0, 1} entonces
000 = λ 101 2 = 101101 13 = 111 01 5 = 0101010101

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON PALABRAS:

LONGITUD:
Función con dominio en Σ* y rango en N. Tal que dada la palabra u la longitud
de u da como resultado la cantidad de símbolos que forman la palabra.

Notación: w = | u | = long(u)
Propiedades:
 La longitud de λ es cero
 | u |a representa la cantidad de símbolos a que hay en u

Ejemplos: Dado el alfabeto Dígitos = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }


long(λ) = 0 | 00110 | = 5 long(1011) = 4 | 01001 | = 3
0

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON PALABRAS:

INVERSA:
Función con dominio en Σ* y rango en Σ*. Tal que dada la palabra u la inversa
de u da como resultado la imagen especular de u.

Notación: w = u -1
Propiedades:
 λ-1 = λ
 Involutiva: (u -1 ) -1 = u
 Si se cumple que: u -1 = u entonces se dice que u es palíndromo

Ejemplos: Dado el alfabeto Letras = { a, b, c, ...., z} entonces: arroz -1 = zorra


y haciendo caso omiso del espacio en blanco y la tilde, las siguientes palabras son
palíndromos: “neuquén” ; “adán nada”; “dábale arroz a la zorra el abad” ;
“satán sala las natas”

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

NOTACIÓN CONJUNTO DE SUBCONJUNTOS:

Para representar el conjunto C2 formado por todos los subconjuntos que se


pueden construir con los elementos de un conjunto C1 se utiliza la siguiente

notación: C2 = 2 C1

La misma se debe al hecho de que la cantidad de subconjuntos que se puede


formar con los elementos de C1 es igual a la potencia de base 2 y exponente
igual al módulo del conjunto C1. O sea que | C2 | = 2 | C1 |
Por ejemplo dado C1 = {a, b, c} el conjunto de todos los subconjuntos de
C1, incluidos el vacío y el propio conjunto C1, es:
3
C2 = { Ф, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c} } y | C2 | = 2 = 8

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON LENGUAJES:

UNIÓN:
Función con dominio en 2 Σ*x 2 Σ* y rango en 2Σ* . Tal que dados los lenguajes
L1 y L2, la unión entre L1 y L2 da como resultado otro lenguaje L3 formado por
todas las palabras de L1 y todas las palabras de L2 sin repeticiones.

Notación: L3 = L1 ∪ L2
Propiedades: dados los lenguajes L1, L2 y L3 se cumplen las leyes:
Asociativa: (L1 ∪ L2) ∪ L3 = L1 ∪ (L2 ∪ L3)
Conmutativa: L1 ∪ L2 = L2 ∪ L1
Elemento Neutro Ф: Ф ∪ L1 = L1 ∪ Ф = L1
Ejemplos: Dados L1 = { λ, ba }; L2 = { a, b, ab } y L3 = { aa, ab } entonces:
L1 ∪ L2 = { λ, a, b, ab, ba } L2 ∪ L3 = { a, b, aa, ab }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON LENGUAJES:

DIFERENCIA:
Función con dominio en 2 Σ*x 2 Σ* y rango en 2Σ* . Tal que dados los lenguajes
L1 y L2, la diferencia entre L1 y L2 da como resultado otro lenguaje L3 formado
por todas las palabras de L1 excepto aquellas que pertenezcan también a L2.

Notación: L3 = L1 - L2
Propiedades: dados los lenguajes L1, L2 y L3 se cumplen las leyes:
No Asociativa: (L1 - L2) - L3 ≠ L1 - (L2 - L3)
No Conmutativa: en general L1 - L2 ≠ L2 - L1
Elemento Neutro Ф: L1 - Ф = L1
Ejemplos: Dados L1 = { λ, a, ab }; L2 = { a, b, ba } y L3 = { a, b, ab }
entonces: L1 - L2 = { λ, ab } L2 - L3 = { ba } L1 - L3 = { λ }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON LENGUAJES:

INTERSECCIÓN:
Función con dominio en 2 Σ*x 2 Σ* y rango en 2Σ* . Tal que dados los lenguajes
L1 y L2, la intersección entre L1 y L2 da como resultado otro lenguaje L3 formado
por todas las palabras que pertenecen a L1 y que también pertenecen a L2.

Notación: L3 = L1 ∩ L2
Propiedades: dados los lenguajes L1, L2 y L3 se cumplen las leyes:
Asociativa: (L1 ∩ L2) ∩ L3 = L1 ∩ (L2 ∩ L3)
Conmutativa: L1 ∩ L2 = L2 ∩ L1
Elemento Neutro Σ*: Σ* ∩ L1 = L1 ∩ Σ* = L1
Ejemplos: Dados L1 = { λ, a, ab }; L2 = { a, b, bb } y L3 = { b, bb, aa }
entonces: L1 ∩ L2 = { a } L2 ∩ L3 = { b, bb } L1 ∩ L3 = Ф

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON LENGUAJES:

COMPLEMENTO:
Función con dominio en 2 Σ* y rango en 2 Σ*. Tal que dado el lenguaje L1, el
complemento de L1 da como resultado otro lenguaje L3 formado por todas las
palabras que pertenecen a Σ* y que no pertenecen a L1.
_
Notación: L3 = ∼L1 = L1
Propiedades:
 ∼L1 = Σ* - L1
 ∼Σ* = Ф y ∼Σ+ = Lλ
 Involutiva: ∼(∼L1) = L1
Ejemplos: Dado L1 = { λ, a, b } entonces:
∼L1 = {todas las secuencias de a y/o b excepto la palabra
vacía y las palabras unisimbólicas a y b }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON LENGUAJES:

PRODUCTO O CONCATENACIÓN:
Función con dominio en 2 Σ*x 2 Σ* y rango en 2Σ* . Tal que dados los lenguajes
L1 y L2, el producto o concatenación entre L1 y L2 da como resultado otro
lenguaje L3 formado por todas las palabras que resultan de concatenar una palabra
de L1 con una palabra de L2 y solo en ese orden.
Notación: L3 = L1 .L2
Propiedades: dados los lenguajes L1, L2 y L3 se cumplen las leyes:
Asociativa: (L1 . L2) . L3 = L1 . (L2 . L3)
No Conmutativa: en general L1 . L2 ≠ L2 . L1
Elemento Neutro Lλ: Lλ . L1 = L1 . Lλ = L1
Ejemplos: Dados L1 = { λ, a }; L2 = { b, bb } y L3 = { aa } entonces:
L1 . L2 = { b, bb, ab, abb } L2 . L3 = { baa, bbaa } L2 . Ф = Ф

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON LENGUAJES:

POTENCIACIÓN:
Función con dominio en 2 Σ*x N y rango en 2Σ*. Tal que dado el lenguaje L1 y
el número natural i mayor o igual que 2, la potencia con base L1 y exponente i
da como resultado otro lenguaje L3 formado por el producto de L1 consigo
mismo (i - 1) veces.

Notación: L3 = L1i
Propiedades:
 Desde un punto de vista práctico la potencia es una forma reducida
de representar el producto de un lenguaje consigo mismo.
 Por definición L1 0 = Lλ y L11 = L1
Ejemplos: Dados L1 = { a, b } L2 = { bab, bb, ab }
L13 = { aaa, aab, aba, abb, baa, bab, bba, bbb }
L2 2 = { babbab, babbb, babab, bbbab, bbbb, bbab, abbab, abbb, abab }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON LENGUAJES:

CLAUSURA, CIERRE O ESTRELLA DE KLEENE:


Función con dominio en 2 Σ* y rango en 2 Σ*. Tal que dado el lenguaje L1, la
operación “L1 estrella” da como resultado otro lenguaje L3 formado por todas
las potencias de base L1 y exponente i, desde i igual a cero hasta infinito.


Notación: L3 = L1* = L10 ∪ L11 ∪ L1 2 …… = ∪ L1 i
i=0

Propiedades:
 (L1* ) * = L1*
 Por definición Ф* = Lλ y Lλ* = Lλ
Ejemplos: Dado L1 = { aa, ab, ba, bb }
L1* = { todas las secuencias de a y/o b de long. par incluida la vacía }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON LENGUAJES:

CLAUSURA, CIERRE O ESTRELLA POSITIVA:


Función con dominio en 2 Σ* y rango en 2 Σ*. Tal que dado el lenguaje L1, la
operación “L1 estrella positiva” da como resultado otro lenguaje L3 formado por
todas las potencias de base L1 y exponente i, desde i igual a uno hasta infinito.


Notación: L3 = L1+ = L11 ∪ L12 ∪ L1 3 …… = ∪ L1 i
i=1

Propiedades:
 (L1+) + = L1+
 Por definición Ф+ = Ф y Lλ+ = Lλ
Ejemplos: Dado L1 = { aa, ab, ba, bb } L2 = { λ, aa, ab, ba, bb }
L1+ = { todas las secuencias de a y/o b de long. par }
L2+ = L2* = L1*
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

OPERACIONES CON LENGUAJES:

INVERSA:
Función con dominio en 2 Σ* y rango en 2 Σ*. Tal que dado el lenguaje L1, la
inversa de L1 da como resultado otro lenguaje L3 formado por todas las inversas
correspondientes a las palabras de L1.

Notación: L3 = L1-1
Propiedades:
Distributiva: (L1 . L2) -1 = L2-1 . L1-1 (L1*)-1 = (L1-1 )*
Involutiva: (L1-1 ) -1 = L1
Ejemplos: Dados L1 = { ab, bb } L2 = { aa, ba }
L1.L2 = { abaa, abba, bbaa, bbba}
L2-1 = { aa, ab } L1-1 = { ba, bb }
( L1 . L2 )-1 = { aaba, abba, aabb, abbb } = L2 -1 . L1-1
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:
Ejemplo 1
Dado el alfabeto Letras = { a, b, c, .…, z }
 haciendo caso omiso de las tildes y los espacios en blanco, los
siguientes son casos curiosos de palíndromos:
ananá, oso, ojo, asa, ala, sus, allá, anilina, reconocer, somos, aérea, rasar
atar a la rata, alábala a la bala, anita lava la tina, arroz a la zorra
 diversas palabras del español resultan de concatenar dos o más
palabras del mimo lenguaje:
limpia.para.brisas = limpiaparabrisas bala . cera = balacera
casa . miento = casamiento agua . tero = aguatero
rápida . mente = rápidamente villa . nada = villanada
 las siguientes palabras y sus inversas tienen distintos significados:
odio, oído, osar, raso, orar, raro, lava, aval, raza, azar, acera, areca

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:

Ejemplo 2
Dado el alfabeto Sílabas = { ma, mon, mo, ca, co, li, ra, re, ro, ta, to, ja, bron }
 haciendo caso omiso de las tildes tenemos los siguientes palíndromos:
maroma, cólico, retaré, remaré, coco, caca, caraca
 las siguientes palabras y sus inversas tienen significados distintos:
jamón, monja, bronca, cabrón, mora, ramo, coca, caco,
raco, cora, maca, cama, coma, maco, como, moco,
rata, tara, roca, caro, tomón, monto, rato, tora

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:

Ejemplo 3
Dado el alfabeto Σ = { a, b, c, …, z, 0, 1, … 9 , _ } se puede definir los
siguientes lenguajes unisimbólicos :
Letras = { a, b, c, …. , z }
Dígitos = { 0, 1, 2, 3, …. , 9}
Guión = { _ }
Combinando convenientemente estos lenguajes se puede representar el
conjunto de todos los identificadores de un lenguaje de programación:
Identificador = (Letras ∪ Guión) . (Letras ∪ Dígitos ∪ Guión)*

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:

Ejemplo 4
En un lenguaje de programación concreto (C++, Delphi, Visual Basic, Java,
etc.), los identificadores válidos tienen una longitud máxima. Supongamos
que en el ejemplo anterior queremos acotar la longitud en 40. Esto traerá
como consecuencia que el lenguaje dejará de ser infinito.
Una solución satisfactoria pero no muy eficiente sería:

Identificador = (Letras ∪ Guión) . ( { λ } ∪ (Letras ∪ Dígitos ∪ Guión)


∪ (Letras ∪ Dígitos ∪ Guión)2 ∪ (Letras ∪ Dígitos ∪ Guión) 3
∪ (Letras ∪ Dígitos ∪ Guión) 4 ∪ (Letras ∪ Dígitos ∪ Guión) 5

∪ ….... ∪ (Letras ∪ Dígitos ∪ Guión)39 )

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:

Continuación ejemplo 4
¿Cuántos palabras tiene este lenguaje ? Sigamos el siguiente razonamiento
por inducción en el largo de la palabra, suponiendo 26 letras:

Longitud Cantidad
1 27
2 27x 37 = 999
3 27x 37 2 = 36963
k 27x 37 (k-1)
39
40 27x 37 ≅ 1,445 E+61
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:

Continuación ejemplo 4
Si ahora sumamos todas estas cantidades obtenemos el total de
identificadores válidos de longitud menor o igual 40:

≅ 4,009 E+62

Este resultado se puede obtener del producto de 27 por la serie de potencias:


2 3 n
X+X + X + ….. + X para n = 39

¿Existe una fórmula para calcular este resultado?

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:

Continuación ejemplo 4

¡NO! Porque la potencia no es distributiva con respecto a la suma.


Pero se puede hacer el siguiente desarrollo para simplificar el cálculo:

x + x2 + x3 + x4 + x5 = x ( 1 + x + x2 + x3 + x4 ) =

x ( 1 + x ( 1 + x + x2 + x3 ) ) = x ( 1 + x ( 1 + x ( 1 + x + x2 ) ) ) =

x(1+x(1+x(1+x(1+x))))

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:

Continuación ejemplo 4
Por último veamos como se puede obtener una solución más eficiente para
representar este lenguaje:
 En primer lugar consideremos el siguiente caso sencillo:
Dado el alfabeto Σ = { a, b } definimos los lenguajes:
L1 = { a, b } y L2 = { λ, a, b }
entonces: L12 = { aa, ab, ba, bb }
L22 = { λ, a, b, aa, ab, ba, bb }
vemos que: L22 = L10 ∪ L11 ∪ L12
podemos concluir que al agregar la palabra vacía a un
lenguaje L, logramos que:
(L ∪ Lλ) n = L 0 ∪ L 1 ∪ L 2 ∪ …… ∪ L n
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:

Continuación ejemplo 4
 Aplicando esta propiedad al lenguaje de los identificadores obtenemos una
forma simple de acotar la longitud del mismo a 40 símbolos:

39
Identificador = (Letras ∪ Guión) . (Letras ∪ Dígitos ∪ Guión ∪ Lλ)

Esta misma estrategia se puede utilizar para representar diversos lenguajes


que contienen secuencias de caracteres que deben acotarse en su longitud.
Por ejemplo cuando queremos definir un campo de datos en un formulario
de cualquier índole (nombres, número de legajo, dirección de e-mail, etc.).

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:

Ejemplo 5
Consideremos un caso similar al anterior pero más complejo.
Supongamos que se debe representar el lenguaje de todas las denominaciones
de asignaturas de una carrera, con las siguientes características:
a) Cada componente de la denominación debe comenzar con una letra
seguida o no de letras minúsculas y puede terminar o no en un punto.
b) El primer componente debe comenzar con mayúscula.
c) Debe contener al menos un componente.
d) Si tiene varios componentes deben separarse con un espacio en blanco.
e) La longitud total incluidos puntos y espacios debe ser 45

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:

Continuación del ejemplo 5


Algunas denominaciones válidas serían:
“Sintaxis y Semántica de los Lenguajes”
“Paradigmas de Prog.”
“Mat. Aplicada I I”
Como vemos, cada componente puede tener una longitud variable y el total
de una denominación no debe superar los 45 símbolos. Esta complicación
hace que no sea posible utilizar la estrategia del ejemplo 5.
En este caso se puede recurrir a otro artificio, que consiste en plantear un
lenguaje de denominaciones sin límite de longitud e intersectarlo con el
lenguaje de todas las secuencias posibles sobre el alfabeto base con longitud
no superior a 45.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de Operaciones con Palabras
y con Lenguajes:

Continuación del ejemplo 5


Consideremos el alfabeto base:
.
Σ = { a, … , z, A, … , Z, , } donde equivale a un espacio en blanco
definamos los siguientes lenguajes unisimbólicos:
L1 = { A, … , Z } L2 = { a, … , z } L3 = { .} L4 = { }
Entonces el primer lenguaje a intersectar se puede representar así:
L5 = L1 . L2* . ( L3 ∪ Lλ ) . ( L4 . (L1 ∪ L2) . L2* . ( L3 ∪ Lλ ) )*
el segundo lenguaje, es decir el de todas las secuencias con un máximo de 45:
L6 = ( L1 ∪ L2 ∪ L3 ∪ L4 ∪ Lλ ) 45
De tal modo que el lenguaje resultante para solucionar el problema queda:
L7 = L5 ∩ L6
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Niveles de un lenguaje:

Con el objetivo de estudiar una frase o sentencia, se puede considerar 4 niveles


de lenguajes. Esto facilita la tarea de análisis, ya que la divide en fases o
etapas que permiten un procesamiento escalonado del lenguaje; desde un
menor nivel de complejidad a un mayor nivel de complejidad.
Estos niveles son:

 LEXICOGRÁFICO

 SINTÁCTICO
Niveles de un Lenguaje
 SEMÁNTICO
 PRAGMÁTICO

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Niveles de un lenguaje:

Nivel Lexicográfico: Se refiere al reconocimiento del léxico de un lenguaje o


sea la identificación de los símbolos del alfabeto del lenguaje, llamados
componentes léxicos. Es lo que normalmente llamamos diccionario. También
incluye la clasificación en tipos de componentes léxicos. Cabe
destacar que este nivel no depende del contexto.

Por ejemplo:
Diccionario del Lenguaje de programación C++:

main if while switch ( ) + - * num id …

Tipos de componentes léxicos de C++:


palabras claves, delimitadores, operadores, identificadores, números, etc.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Niveles de un lenguaje:

Nivel Sintáctico: Se trata de la forma en la que los componentes léxicos se


organizan dentro de una frase o sentencia, es decir la estructura de dicha
secuencia de símbolos. Este nivel es independiente o libre del contexto.

Por ejemplo:
Lenguaje de programación C++:
Estructura de una sentencia selectiva
if ( exp.lógica ) sentencia else sentencia
Estructura de una sentencia de asignación:
identificador = expresión ;
>=0) S1 = S1 + N; else S2 = S2 + N;
if (N>

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Niveles de un lenguaje:

Nivel Semántico: Se refiere al significado o connotación de una palabra de un


lenguaje. Tiene en cuenta la coherencia de una frase o sentencia. Este nivel
es dependiente del contexto.

Por ejemplo:
Lenguaje de programación C++:
Comprobación de Tipos: verificación de la correspondencia entre las
declaraciones de identificadores y el uso de dichos identificadores.

float I , V[100]; void main (void) { I = 12.3 ; V[ I ] = 23.45 ; }

Observación: En este caso la sentencia es incorrecta semánticamente, ya que


se utiliza una variable I de tipo float como índice del arreglo V.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Niveles de un lenguaje:

Nivel Pragmático: Tiene que ver con los hechos o acciones que evocan las
frases o sentencias de un lenguaje y su utilización por parte de un procesador
humano o computacional. Este nivel es dependiente del contexto.

Por ejemplo:
Lenguaje de programación C++:
Una sentencia de entrada implica la espera del dato que ingresa por el
periférico correspondiente, la toma desde el buffer de dicho periférico, la
verificación del formato y de la coherencia del mismo; y almacenamiento en la
posición de memoria RAM correspondiente al identificador de la variable.
float N1; void main(void) { scanf ( “ % f ”, &N1 ); }
Observación: Para que no se produzca un error pragmático, en tiempo de
ejecución, el operador debe introducir un dato de tipo numérico.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

PRELIMINARES:
¿ Cómo podemos describir un lenguaje ?
Definición por extensión: Listado de todas las palabras del lenguaje.
Ejemplo: Σ = { a, b, c } L1 = { aa, ab, ac, ba, bb, bc, ca, cb, cc }
L2 = { aaa, aba, aca, bbb, bab, bcb, ccc, cac, cbc }
Definición por comprensión: Especificación de atributos de las palabras.
Ejemplo: Σ = { a, b, c } L3 = { w / w ∈ Σ* ∧ |w| = 50 }
L4 = { w / w ∈ Σ* ∧ w = w -1 }
Definición por patrones: Expresión de palabras con parámetros.
Ejemplo: Σ = { 0, 1 } L5 = { 0.1 n.0 / n ≥ 1 }
L6 = { 0 n .1 k / n ≥ 0, k ≤ 5 }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

Noción de Gramática:
De las formas de descripción de un lenguaje que vimos anteriormente,
ninguna resulta eficiente cuando se trata de un lenguaje complejo como podría
ser un lenguaje natural o un lenguaje de programación.
En estos caso resulta conveniente especificar un conjunto de reglas de
generación de las palabras que pertenecen exclusivamente al lenguaje que se
quiere describir. Este conjunto de reglas de formación junto con los símbolos
que utiliza dan lugar al concepto de GRAMÁTICA.
Ejemplo: Σ = { 0, 1 } Reglas: 1) Puede ser 0 o 1
2) Puede ser cualquier combinación de
símbolos que empiece con 1
Como vemos se trata del conjunto de números binarios naturales.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

Ejemplo de gramática para un pequeño subconjunto del Español:


Una frase sencilla en español puede construirse con un sujeto seguido por
un predicado y terminada en un punto. El sujeto podría ser un artículo
seguido de un sustantivo o solo un sustantivo, mientras que el predicado
podría ser un verbo seguido de un objeto o solo un verbo. Por último, un
objeto podría ser una preposición seguida de un sujeto.
En este caso los componentes léxicos o símbolos del lenguaje serían los
valores que pueden tomar los verbos, sustantivos, adverbios y
preposiciones.
Por otro lado frase, sujeto, predicado y objeto son estructuras sintácticas
que se forman mediante combinación de los componentes léxicos.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

De tal modo que una frase se puede describir con las siguientes Reglas:
〈frase〉〉 → 〈sujeto〉〉 〈predicado〉〉 〈punto〉〉
〈sujeto〉〉 → 〈artículo〉〉 〈sustantivo〉〉
〈sustantivo〉〉 → María | Juan | nave | perro
〈artículo〉〉 → El | La | λ
〈predicado〉〉 → 〈verbo〉〉 〈objeto〉〉
〈verbo〉〉 → corre | quiere | vuela
〈objeto〉〉 → 〈preposición〉〉 〈sujeto〉〉 | 〈adverbio〉〉 | λ
〈preposición〉〉 → a | con
〈adverbio〉〉 → rápidamente | ahora
〈punto〉〉 → •
Donde encerramos entre paréntesis angulares a las estructuras sintácticas
para distinguirlas de los componentes léxicos, la barra vertical se usa
como disyunción y la flecha indica que la parte izquierda puede
reemplazarse por o generar a la parte derecha de la regla.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

Veamos algunas frases que se pueden generar con esta gramática:


 María quiere a Juan.
 Juan corre con el perro.
 La nave vuela ahora.
 El perro corre rápidamente.
También se puede generar estas otras frases de sentido dudoso:
 La casa corre con el perro.
 Juan vuela con María.
 El perro vuela rápidamente.

Podemos concluir que esta gramática describe solamente la sintaxis de


este subconjunto del español, pero no su semántica.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

Definición formal de una GRAMÁTICA estructurada por frases


Σ N∪ΣT = Σ
G = 〈 ΣN , ΣT , P , S 〉
Σ N∩ΣT = Φ
 ΣN es el alfabeto de símbolos No-terminales o variables de la Gramática.

 ΣT es el alfabeto de símbolos Terminales o símbolos del Lenguaje.


P es el conjunto finito no vacío de Reglas de Producción de la forma:
α→ β
donde: α = α1.N.α
α2 con α1, α2 ∈ Σ* N∈ ΣN β ∈ Σ*
S es el Símbolo Inicial o Axioma de la Gramática, que es el comienzo de
∈ΣN
cualquier proceso de generación o derivación de una palabra. S∈Σ

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

Esta definición fue enunciada en la década de 1950


por Noam Chomsky.

El lingüista, profesor e intelectual estadounidense Noam


Chomsky es fundador de la teoría generativo-
transformacional que ha revolucionado la lingüística.
Trata la gramática dentro de la teoría general del
lenguaje: esto es, Chomsky cree que junto a las reglas
gramaticales de cada lengua concreta, existen además
unas universales comunes a todas las lenguas, lo que indica que cualquier
persona posee la capacidad innata de producir y entender el lenguaje.
También se conoce a Chomsky por su actividad como analista crítico de la
política de su país y de los medios de comunicación. En las décadas de 1960 y
1970 se opuso a la intervención de E.E.U.U. en la guerra del Vietnam por lo que
escribió varias obras y pronunció numerosas conferencias.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

En el ejemplo del subconjunto del lenguaje español, la gramática tiene los


siguientes componentes:

ΣN = { 〈frase〉〉 , 〈sujeto〉〉 , 〈predicado〉〉 , 〈punto〉〉 , 〈artículo〉〉 ,


〈sustantivo〉〉 , 〈verbo〉〉 , 〈objeto〉〉 , 〈preposición〉〉 , 〈 adverbio〉〉 }

Σ = { María , Juan , nave , perro , El , La , corre , quiere , vuela ,


T
a , con , rápidamente , ahora , • }

S = 〈frase〉〉
P ={ conjunto de reglas de producción enunciadas en el ejemplo }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

Veamos otros ejemplos abstractos de gramáticas que se ajustan a esta


definición:

1) G1 = 〈 { S, A, B } , { a, b } , { S → aSBA | abA , AB → BA ,
bB → bb , bA → ba , aA → aa } , S 〉

2) G2 = 〈 { S, X, Y, Z } , { x, y, z } , { S → XSZ | Y , Y → yY | λ ,
X→x, Z→z},S〉

3) G3 = 〈 { S } , { a } , { S → a | aS } , S 〉

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

DERIVACIÓN DE PALABRAS A PARTIR DEL AXIOMA:


Para generar o derivar una palabra del lenguaje que describe una gramática se
comienza por alguna regla que tenga el axioma a la izquierda y luego se continúa
con el resto de las reglas que sean necesarias para llegar a dicha palabra.
Este proceso se llama derivación de una palabra y se representa así:
S ⇒ α1 ⇒ α2 ⇒ ....... ⇒ αx ⇒ w
que equivale a: S ⇒* w

donde los αi son secuencias de símbolos terminales y no terminales, w es una


secuencia de terminales, el operador ⇒ (DERIVACIÓN DIRECTA) significa la
aplicación de una sola regla y el operador ⇒* (DERIVACIÓN A LA LARGA)
significa la aplicación de una cantidad finita de reglas.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

FORMA SENTENCIAL:

Cualquier secuencia γ que se obtenga a partir del axioma en un proceso de


derivación, se denomina Forma Sentencial: S ⇒ ..... ⇒ γ ⇒ .....
SENTENCIA:
Una Forma Sentencial w que esta compuesta solo por símbolos terminales, se
denomina Sentencia y constituye el final del proceso de derivación: S ⇒* w

DERIVACIÓN MÁS A LA IZQUIERDA Y MÁS A LA DERECHA:


Cuando en un proceso de derivación se busca la subsecuencia a reemplazar en la
Forma Sentencial desde la izquierda, se dice que se trata de una Derivación Más
a la Izquierda; y en caso contrario se trata de una Derivación Más a la Derecha.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

EJEMPLOS:
Para la G del español tenemos la siguiente derivación más a la izquierda:
> ⇒ <sujeto>
<frase> > <predicado>> <punto>>⇒
<artículo>> <sustantivo>
> <predicado>> <punto>>⇒
<sustantivo>> <predicado>> <punto>> ⇒ María <predicado> > <punto>
>
María <verbo> > <objeto>
> <punto>> ⇒ María corre <objeto>> <punto>
>
María corre <punto> > ⇒ María corre .
que equivale a: S ⇒* María corre .
Para la G2 tenemos la siguiente derivación más a la derecha:
S ⇒ XSZ ⇒ XSz ⇒ XYz ⇒ XyYz ⇒ Xyz ⇒ xyz
o sea que: S ⇒* xyz
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

LENGUAJE GENERADO POR UNA GRAMÁTICA:


El lenguaje generado por una gramática para estructuras de frases G,
que denotamos L(G), es el conjunto definido como:

L(G) = { w / w ∈ Σ*T ∧ S ⇒* w }

EQUIVALENCIA ENTRE GRAMÁTICAS:


Dos gramáticas G y G’ se dicen equivalentes si y solo si los lenguajes
generados por ambas son iguales, es decir:

L(G) = L(G’) ⇔ G ≡ G’
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

Veamos algunas derivaciones de las gramáticas de los ejemplos abstractos


descriptos anteriormente y tratemos de inducir que lenguajes generan:

1) Recordemos las reglas del primer ejemplo:


1.- S → aSBA 2.- S → abA 3.- AB → BA
4.- bB → bb 5.- bA → ba 6.- aA → aa
Derivemos algunas palabras:
S ⇒ abA ⇒ aba
S ⇒ aSBA ⇒ aabABA ⇒ aabBAA ⇒ aabbAA ⇒ aabbaA ⇒ aabbaa
S ⇒ aSBA ⇒ aaSBABA ⇒ aaabABABA ⇒ aaabBAABA ⇒ aaabBABAA ⇒
aaabBBAAA ⇒ aaabbBAAA ⇒ aaabbbAAA ⇒ aaabbbaAA ⇒
aaabbbaaA ⇒ aaabbbaaa
Podemos inducir que: L(G1) = { an .bn .an / n ≥ 1 }
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

2) Recordemos las reglas del segundo ejemplo:


1.- S → XSZ 2.- S → Y 3.- Y → yY
4.- Y → λ 5.- X → x 6.- Z → z
Derivemos algunas palabras:
S⇒Y⇒λ
S ⇒ XSZ ⇒ XYZ ⇒ XyYZ ⇒ xyYZ ⇒ xyZ ⇒ xyz
S ⇒ XSZ ⇒ XXSZZ ⇒ XXYZZ ⇒ XXyYZZ ⇒ XXyyYZZ ⇒ XXyyZZ ⇒
XxyyZZ ⇒ XxyyzZ ⇒ xxyyzZ ⇒ xxyyzz
S ⇒ XSZ ⇒ XYZ ⇒ XyYZ ⇒ XyyYZ ⇒ XyyyYZ ⇒ XyyyZ ⇒ xyyyZ ⇒
xyyyz

Podemos inducir que: L(G2) = { x n .y k .z n / n ≥ 0 , k ≥ 0 }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

3) Recordemos las reglas del tercer ejemplo:


1.- S → a 2.- S → aS

Derivemos algunas palabras:


S⇒a
S ⇒ aS ⇒ aa
S ⇒ aS ⇒ aaS ⇒ aaa

Podemos inducir que: L(G3) = { an / n ≥ 1 }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

Consideremos las siguientes gramáticas:

G4 = 〈 { S, Q } , { a } , { S → a | Q , Q → aQ | a } , S 〉

G5 = 〈 { S, Q, T } , { a } , { S → a | T | aTa , T → a | Q , Q → a | aQ } , S 〉

Si analizamos los lenguajes que generan estas gramáticas son iguales al


lenguaje de nuestro tercer ejemplo abstracto.

Es decir que las tres gramáticas son equivalentes: G3 ≡ G4 ≡ G5

Observemos que estas gramáticas difieren fundamentalmente en sus


reglas de producción.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Gramáticas estructuradas por frases:

Podemos afirmar que en general cada lenguaje tiene varias gramáticas


diferentes que lo generan.
Esto nos da lugar a pensar que existen distintos tipos o categorías de
gramáticas, según la forma que tengan sus producciones.
Basándose en el análisis de las formas de las reglas de producción de las
gramáticas, Noam Chomsky clasificó a las mismas en cuatro categorías que
se conocen como JERARQUÍA DE CHOMSKY y que será tema de estudio
de la siguiente Unidad Temática.
Por ahora trabajaremos con una de esas categorías, llamada Gramática
Libre de Contexto, que nos permitirá representar el nivel sintáctico de un
lenguaje de programación. Este tipo de gramática se caracteriza por tener
a la izquierda de sus reglas solamente un símbolo No-terminal.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de gramáticas para lenguajes
de programación hipotéticos:

1) Consideremos el lenguaje compuesto por el conjunto de todos los


identificadores válidos:

Σ N = { I, L, D, G, R} P: I → LR | GR
Σ T = { a, ... , z, 0, ... , 9, _ } L → a | b | ... | z
D → 0 | 1 | ... | 9
S=I R → LR | DR | GR | λ
G→_

Aplicando las reglas de esta gramática se puede generar:


I ⇒ LR ⇒ aR ⇒ a
I ⇒ GR ⇒ _R ⇒ _DR ⇒ _1R ⇒ _1LR ⇒ _1hR ⇒ _1h
I ⇒ LR ⇒ zGR ⇒ z_R ⇒ z_DR ⇒ z_5R ⇒ z_5LR ⇒ z_5pR ⇒ z_5p

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de gramáticas para lenguajes
de programación hipotéticos:

2) Consideremos el lenguaje compuesto por el conjunto de todos los números


enteros válidos:

Σ N = { N, D, U, R} P: N → 0 | UR
Σ T = { 0, ... , 9 } R → DR | λ
D→0|U
S=N U → 1 | ... | 9

Aplicando las reglas de esta gramática se puede generar:


N⇒0
N ⇒ UR ⇒ 1R ⇒ 1
N ⇒ UR ⇒ 2R ⇒ 2DR ⇒ 20R ⇒ 20
N ⇒ UR ⇒ 4R ⇒ 4DR ⇒ 4UR ⇒ 47R ⇒ 47DR ⇒ 470R ⇒ 470DR ⇒ 470UR
⇒ 4703R ⇒ 4703
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de gramáticas para lenguajes
de programación hipotéticos:
3) Consideremos un lenguaje de programación sencillo, con un mínimo de
complejidad en su sintaxis.
Supongamos los siguientes componentes léxicos, que en total constituyen el
alfabeto del lenguaje o sea el alfabeto de símbolos terminales de la gramática:

 Palabras claves: if, while, break, else , then , do


 Identificadores estándar de tipo: int, float, boolean, char
 Identificador de variable: id
 Números: entero, real
 Caracteres: literal
 Booleanos: falso, cierto
 Delimitadores: { , } , ; , [ , ]
 Operadores: = , + , < , or

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de gramáticas para lenguajes
de programación hipotéticos:

Por simplicidad se ha supuesto un solo valor de identificador {id}, solo dos


números válidos {entero, real} y un solo carácter {literal}.
Por otro lado supongamos el siguiente alfabeto de símbolos No_terminales:

Σ N = { P, D, T, A, E, N, B, S, W, I, R, F } donde P es el axioma de la gramática.


Podemos interpretar estos símbolos como nemotécnicos que representan los
componentes sintácticos: Programa, Declaración, Tipo, Arreglo, Expresión,
valor Numérico, valor Booleano, Sentencia, estructura While, estructura If,
Resto de la estructura if, Fin de la estructura while.
Por último, el conjunto de Reglas de Producción que permitirá generar las
palabras de este lenguaje formal, es decir los “programas” escritos en este
lenguaje de programación hipotético, es:

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de gramáticas para lenguajes
de programación hipotéticos:

1) P→ D ; { S }
2) D → D ; D | T id A
3) T → int | float | boolean | char
4) A → [ entero ] | λ
5) E → entero | real | falso | cierto | literal | id | id[E] | E + E | E < E | E or E
6) S → S ; S | W | break | I | id = E | id[E] = E
7) W → while E do { S F
8) I → if E then { S } R
9) R → else { S } | λ
10) F→}
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de gramáticas para lenguajes
de programación hipotéticos:
Aplicando estas reglas podemos generar los siguientes “programas”:
P ⇒ D ; { S } ⇒ T id A ; { S } ⇒ int id ; { S } ⇒ int id ; { id = E } ⇒
int id ; { id = entero }
P ⇒ D ; { S } ⇒ T id A ; { S } ⇒ float id A ; { S } ⇒ float id[entero] ; { S } ⇒
float id[entero] ; { S } ⇒ float id[entero] ; { id[E] = E } ⇒
float id[entero] ; { id[entero] = E } ⇒ float id[entero] ; { id[entero] = real }
⇒ float id[entero] ; { id[entero] = real }
También se puede generar los siguientes “programas” de dudosa coherencia:
P ⇒* boolean id ; { id = entero }
P ⇒* char id[entero] ; { id[real] = literal }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
Ejemplos de gramáticas para lenguajes
de programación hipotéticos:
Otros ejemplos de secuencias obtenidas con esta gramática son:
 int id ; { id = entero ; id = entero + entero ; id = id + id }
 float id ; { id = real ; if id < entero + entero then { id = id + entero } }
 int id ; { id = entero ; while id < real do { id = id + entero } }
char id ; { id = falso ; if id[literal] or entero then { id = literal } }
boolean id[entero] ; { id = cierto }
float id ; { if real then { id = literal } }

Podemos concluir que esta gramática es capaz de representar


la sintaxis del lenguaje de programación pero no su semántica.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

Formas de Representación de la Sintaxis y la


Semántica de los Lenguajes de Programación:

 Backus Naur Form (B.N.F.)


 SINTAXIS
 DIAGRAMAS DE SINTAXIS

 ESQUEMAS DE TRADUCCIÓN
 SEMÁNTICA
 SISTEMAS CANÓNICOS
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

FORMATO B.N.F.:

La Forma Normal de Backus (BNF) es una notación para escribir


Gramáticas Independientes del Contexto (GIC), que se usa común-
mente para especificar la sintaxis de los lenguajes de programación.

En esta notación los símbolos No-terminales se representan con


nombres nemotécnicos encerrados entre paréntesis angulares 〈 〉
El signo → se sustituye por ::= (que se lee “es reemplazado por”)
Los modos de alternativa de reescribir un No-terminal se separan
mediante barras verticales | (que se lee “o”)
Las reglas recursivas de la forma: A → Aβ β | λ se representa
encerrando entre llaves la parte que se repite: A ::= { β }
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

FORMATO B.N.F.:
Veamos como ejemplos la BNF de los lenguajes de Identificadores,
Números y Programas-sencillos, vistos anteriormente:
〈Identificador〉〉 ::= 〈Letra〉〉 〈Resto〉〉 | 〈Guión〉〉 〈Resto〉〉
〈Letra〉〉 ::= a | b | ... | z
〈Dígito〉〉 ::= 0 | 1 | ... | 9
〈Resto〉〉 ::= { 〈Letra〉〉 | 〈Dígito〉〉 | 〈Guión〉〉 }
〈Guión〉〉 ::= _

〈Número〉〉 ::= 0 | 〈Uno〉〉 〈Resto〉〉


〈Resto〉〉 ::= { 〈Dígito〉〉 }
〈Dígito〉〉 ::= 0 | 〈Uno〉〉
〈Uno〉〉 ::= 1 | 2 | ... | 9
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

FORMATO B.N.F.:

〈Programa〉〉 ::= 〈Declara〉〉 ; { 〈Sentencia〉〉 }


〈Declara〉〉 ::= 〈Declara〉〉 ; 〈 Declara〉〉 | 〈Tipo〉〉 id 〈Arreglo〉〉
〈Tipo〉〉 ::= int | float | boolean | char
〈Arreglo〉〉 ::= [ entero ] | 〈Vacía〉〉
〈Expresión〉〉 ::= entero | real | falso | cierto | literal | id | id [ 〈Expresión〉〉 ] |
〈Expresión〉〉 + 〈Expresión〉〉 | 〈Expresión〉〉 < 〈Expresión〉〉 |
〈Expresión〉〉 or 〈Expresión〉〉
〈Sentencia〉〉 ::= 〈Sentencia〉〉 ; 〈Sentencia〉〉 | 〈While〉〉 | break | 〈If〉〉 |
id = 〈Expresión〉〉 | id [ 〈Expresión〉〉 ] = 〈Expresión〉〉
〈While〉〉 ::= while 〈Expresión〉〉 do { 〈Sentencia〉〉 〈FinWhile〉〉
〈FinWhile〉〉 ::= } Nota: En este ejemplo
〈If〉〉 ::= if 〈Expresión〉〉 then { 〈Sentencia〉〉 } 〈RestoIf〉〉 las { } pertenecen al
〈RestoIf〉〉 ::= else { 〈Sentencia〉〉 } | 〈Vacía〉〉 alfabeto de terminales.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

DIAGRAMAS DE SINTAXIS:

El Diagrama de Sintaxis es una forma gráfica de representación del


nivel sintáctico de un lenguaje de programación .

Los siguientes son los símbolos que se utiliza en estos diagramas:


Representa el valor de un componente léxico. xxxxx

Representa el valor de un símbolo especial. xx

Implica una estructura sintáctica que tiene su


XXXXX
propio diagrama de sintaxis.

Indica que componente sigue a continuación.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

DIAGRAMAS DE SINTAXIS:

Estos son algunos de los Diagramas de Sintaxis de los ejemplos anteriores:

Letra
Identificador a

- z
-
Dígito Dígito
0
Letra
Letra
9

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

DIAGRAMAS DE SINTAXIS:

Uno
1
Número

Dígito
9
Uno
Dígito

0
0
Uno

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

DIAGRAMAS DE SINTAXIS:
Programa

Declara ; { Sentencia }
Tipo
Declara
int
Tipo id Arreglo
float
;
boolean
Arreglo
[ entero ] char

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

ESQUEMAS DE TRADUCCIÓN:

Un Esquema de Traducción es una gramática independiente del contexto


en la que se agrega, a la derecha de algunas reglas de producción, un
fragmento de programa llamado acción semántica.

Las acciones semánticas se colocan entre llaves.


Al utilizar una regla de producción sintáctica se ejecuta el fragmento de
programa correspondiente, que contribuye al análisis semántico.
Vamos a utilizar un seudocódigo para representar las acciones semánticas.
El Esquema de Traducción tendrá el siguiente formato:

Esquema de Traducción
Regla de Sintaxis Acción Semántica
N→ β { fragmento programa }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

ESQUEMAS DE TRADUCCIÓN:

¿Cómo se usan estos esquemas de traducción, en un proceso de


derivación o generación de una sentencia ?
 Cada vez que se aplica una regla de sintaxis se lleva a cabo una acción
semántica.
 En este caso puede ser que las acciones semánticas se ejecuten en
forma anticipada a la definición de algún identificador de variable
incluido en la misma, entonces queda pendiente su terminación hasta
el momento en que la ejecución de otra acción semántica asigna un
valor a dicho componente.
 Se utilizan variables banderas cuyos valores finales nos permiten
determinar si la sentencia es correcta o no desde el punto de vista
semántico.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

ESQUEMAS DE TRADUCCIÓN:
Dentro de las convenciones que incluye el nivel semántico de los lenguajes de
programación, se requieren las siguientes comprobaciones:
 Comprobaciones de Tipos: Se debe tener en cuenta la compatibilidad entre
los tipos de dato de los operandos y el operador correspondiente.
Por ejemplo, si se suman una variable tipo arreglo con un número se produce
un error. También, si la expresión de comprobación de una sentencia selectiva
resulta no ser de tipo lógica, se produce un error.
 Comprobaciones del Flujo de Control: Las sentencias que producen una
bifurcación en el flujo de control deben tener algún lugar a dónde transferir
dicho flujo de control. Por ejemplo, una proposición break en el lenguaje C++
hace que el control abandone la sentencia que lo engloba, ya sea un while, un
for o un switch ; si dicha estructura englobadora no existe se produce un error.
Otro ejemplo es el de la sentencia de bifurcación incondicional goto , que debe
desviar el flujo de control hacia un rótulo específico; si dicho rótulo no figura
en ninguna sentencia se produce un error.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE ESQUEMAS DE TRADUCCIÓN:

Veamos en nuestro lenguaje hipotético algunos ejemplos de


especificación semántica:
 Comprobaciones de Tipos:
 El índice de una variable arreglo debe ser una expresión de tipo int.
 En una asignación el tipo de la variable de la izquierda debe ser
compatible con el tipo de la expresión de la derecha.
 En las expresiones los tipos de los operadores deben ser compatibles
con la operación correspondiente.
 La expresión que acompaña a un while o if debe ser de tipo boolean.
 Comprobaciones del Flujo de Control:
 La sentencia de bifurcación incondicional break debe estar dentro
de una estructura while.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE ESQUEMAS DE TRADUCCIÓN:

Esquema de Traducción
Regla de Sintaxis Acción Semántica
P→ D ; { S } { CAW=0 inicialización contador apertura de while }

D→D;D { Nula }
D → T id A { Si (A.RANGO == vacío) entonces id.TIPO = T.TIPO
sino id.TIPO = arreglo(A.RANGO , T.TIPO) }
T → int { T.TIPO=1 suponemos un código 1 para tipo int }
T → float { T.TIPO=2 suponemos un código 2 para tipo float }
T → boolean { T.TIPO=3 suponemos un código 3 para tipo boolean}

T → char { T.TIPO=4 suponemos un código 4 para tipo char }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE ESQUEMAS DE TRADUCCIÓN:

A → [ entero ] { A.RANGO=entero.VALOR }
A→λ { A.RANGO=vacío }
E → entero { E.TIPO=1 }
E → real { E.TIPO=2 }
E → falso { E.TIPO=3 }
E → cierto { E.TIPO=3 }
E → literal { E.TIPO=4 }
E → id { E.TIPO=id.TIPO }
E → id[E1] { Si (id.TIPO==arreglo(r,t)) ∧ (E1.TIPO==1)
entonces E.TIPO=t sino E.TIPO=error.t }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE ESQUEMAS DE TRADUCCIÓN:

E → E1 + E2 { Si (E1.TIPO==1 ∧ E2.TIPO==1) entonces


E.TIPO=1 sino Si (E1.TIPO==2 ∧ E2.TIPO==2) ∨
(E1.TIPO==1 ∧ E2.TIPO==2) ∨ (E1.TIPO==2 ∧
E2.TIPO==1) entonces E.TIPO=2 sino E.TIPO=error.t}
E → E1 < E2 { Si (E1.TIPO==E2.TIPO) entonces E.TIPO=3
sino E.TIPO=error.t }
E → E1 or E2 { Si (E1.TIPO==3 ∧ E2.TIPO==3) entonces
E.TIPO=3 sino E.TIPO=error.t }
S → S1 ; S2 { Si (S1.TIPO==ok ∧ S2.TIPO==ok) entonces
S.TIPO=ok sino S.TIPO=error.t
Si (S1.BIFU==ok ∧ S2.BIFU==ok) entonces
S.BIFU=ok sino S .BIFU=error.b }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE ESQUEMAS DE TRADUCCIÓN:

S→W { S.TIPO=W.TIPO , S.BIFU=W.BIFU }


S → break { S.TIPO=ok
Si (CAW > 0) entonces S.BIFU=ok
sino S.BIFU=error.b }
S→I { S.TIPO=I.TIPO , S.BIFU=I.BIFU }
S → id = E { Si (id.TIPO==E.TIPO) entonces S.TIPO=ok
sino S.TIPO=error.t
S.BIFU=ok }
S → id[E1] = E2 { Si (id.TIPO==arreglo(r,t)) ∧ (E1.TIPO==1)
∧ (E2.TIPO==t) entonces S.TIPO=ok
sino S.TIPO=error.t
S.BIFU=ok}
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE ESQUEMAS DE TRADUCCIÓN:

→ while E do {SF { Si (E.TIPO==3) entonces W.TIPO=S.TIPO


W→
sino W.TIPO=error.t
W.BIFU=S.BIFU , CAW=CAW+1 }
I → if E then {S} R { Si (E.TIPO==3) ∧ (S.TIPO==ok)
∧ (R.TIPO==ok) entonces I.TIPO=ok
sino I.TIPO=error.t
Si (S.BIFU==ok) ∧ (R.BIFU==ok)
entonces I.BIFU=ok sino I.BIFU=error.b }
R → else { S } { R.TIPO=S.TIPO , R.BIFU=S.BIFU }
R→λ { R.TIPO=ok , R.BIFU=ok }
F→} { CAW=CAW-1 }

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE ESQUEMAS DE TRADUCCIÓN:

Veamos a continuación algunos


Aplicación de acciones semánticas
casos particulares de uso de
este esquema de traducción: 1) CAW=0

1) En primer lugar derivemos 2) Si (A.RANGO == vacío) entonces id.TIPO = T.TIPO


una sentencia con sintaxis y sino id.TIPO = arreglo(A.RANGO , T.TIPO)
semántica correctas: 3) T.TIPO=2

Aplicación de reglas de sintaxis 4) A.RANGO=vacío

P ⇒ D ; { S } ⇒ T id A ; { S } ⇒ 5) Si (id.TIPO==E.TIPO) entonces S.TIPO=ok


float id A ; { S } ⇒ sino S.TIPO=error.t
float id ; { S } ⇒ 6) S.BIFU=ok Valores Finales
float id ; { id = E } ⇒
float id ; { id = real } 7) E.TIPO=2 S.TIPO==ok S.BIFU==ok

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE ESQUEMAS DE TRADUCCIÓN:

2) Ahora derivemos una sentencia


con sintaxis correcta, pero con Aplicación de acciones semánticas
semántica incorrecta con un 1) CAW=0
error de tipo: 2) Si (A.RANGO == vacío) entonces id.TIPO = T.TIPO
Aplicación de reglas de sintaxis sino id.TIPO = arreglo(A.RANGO , T.TIPO)
P ⇒ D ; { S } ⇒ T id A ; { S } ⇒ 3) T.TIPO=3
boolean id A ; { S } ⇒
4) A.RANGO=vacío
boolean id ; { S } ⇒
boolean id ; { id = E } ⇒ 5) Si (id.TIPO==E.TIPO) entonces S.TIPO=ok
boolean id ; { id = real } sino S.TIPO=error.t
6) S.BIFU=ok Valores Finales

7) E.TIPO=2 S.TIPO==error.t S.BIFU==ok

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE ESQUEMAS DE TRADUCCIÓN:

3) Este es otro caso de sentencia Aplicación de acciones semánticas


con sintaxis y semántica 1) CAW=0
correctas: 2) Si (A.RANGO == vacío) entonces id.TIPO = T.TIPO
Aplicación de reglas de sintaxis sino id.TIPO = arreglo(A.RANGO , T.TIPO)
3) T.TIPO=3
P ⇒ D ; { S } ⇒ T id A ; { S } ⇒ 4) A.RANGO=vacío
boolean id A ; { S } ⇒
5) S.TIPO=W.TIPO , S.BIFU=W.BIFU
boolean id ; { S } ⇒
boolean id ; { W } ⇒ 6) Si (E.TIPO==3) entonces W.TIPO=S.TIPO
boolean id ; {while E do sino W.TIPO=error.t
{ S F } ⇒ boolean id ; { W.BIFU=S.BIFU , CAW=CAW+1
while cierto do { S F } ⇒ 7) E.TIPO=3 Valores
boolean id ; { while cierto 8) S.TIPO=ok Finales
do { break F } ⇒ boolean Si (CAW > 0) entonces S.BIFU=ok
S.TIPO==ok
id ; { while cierto do { sino S.BIFU=error.b
break } } 9) CAW=CAW-1 S.BIFU==ok
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE ESQUEMAS DE TRADUCCIÓN:

Aplicación de acciones semánticas


4) Por último veamos un ejemplo
similar al anterior, pero con un 1) CAW=0
error semántico de bifurcación: 2) Si (A.RANGO == vacío) entonces id.TIPO = T.TIPO
sino id.TIPO = arreglo(A.RANGO , T.TIPO)
Aplicación de reglas de sintaxis
3) T.TIPO=3
P ⇒ D ; { S } ⇒ T id A ; { S } ⇒
boolean id A ; { S } ⇒ 4) A.RANGO=vacío
boolean id ; { S } ⇒
5) S.TIPO=ok
boolean id ; { break }
Si (CAW > 0) entonces S.BIFU=ok
sino S.BIFU=error.b

Valores Finales
S.TIPO==ok S.BIFU==error.b

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

SISTEMAS CANÓNICOS:

PRELIMINARES:
Recordemos los siguientes conceptos de la Lógica de Proposiciones:
 Enunciado: Es cualquier afirmación que nos permita tomar alguna decisión.
Un enunciado puede ser falso o cierto. Se puede combinar varios enunciados
(p, q) con los operadores de conjunción, disyunción y negación ( p∧q , p∨q , ~p
) para formar un enunciado compuesto.
 Proposición: Es un enunciado variable o un enunciado compuesto donde los
enunciados que lo conforman son variables. Por ejemplo, si p, q y r son
enunciados entonces: p , ~q , q ∨ p , p ∧ q ∨ r ∧ ~q son proposiciones.
 Argumento: Es una relación entre un conjunto de proposiciones P1, P2, ... , PN ,
llamadas premisas y otra proposición Q llamada conclusión.
Denotamos un argumento por: P1, P2, ... , PN ├─ Q SÍMBOLO DE ASEVERACIÓN ├─

Un argumento es válido cuando se cumple que la conclusión Q es cierta cada


vez que las premisas Pi son ciertas. En caso contrario es una falacia.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

SISTEMAS CANÓNICOS:

Un Sistema Canónico es un conjunto de argumentos válidos que permiten


definir lenguajes formales tanto en su nivel sintáctico como semántico.
Cada argumento válido se conoce como CANON (regla, norma, precepto).
Un canon que no tiene premisas se llama AXIOMA.
Un TERMINAL es un componente léxico o símbolo del lenguaje.
Una VARIABLE es un símbolo que se puede reemplazar por el valor de un
TERMINAL o por un TÉRMINO.
Un TÉRMINO es una serie de TERMINALES y VARIABLES concatenados.
Un PREDICADO es el nombre que se le da a un conjunto de TÉRMINOS. Se
llama GRADO del predicado a la cantidad de términos del conjunto. Cuando
son varios términos se los encierra entre paréntesis angulares.
Una REMARCA es un TÉRMINO seguido de un PREDICADO.
Cada PREMISA o CONCLUSIÓN en un CANON es una REMARCA.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE SISTEMAS CANÓNICOS:

Para aclarar estos conceptos vemos como ejemplo el lenguaje de códigos


binarios, es decir de todas las combinaciones de 0 y 1:
1) Los dígitos “0” y “1” son TERMINALES.
2) Los nombres “dígito” y “código”, que denotan un dígito binario y un
código binario cualquiera, son PREDICADOS de grado 1.
3) La letra “x”, que representa un valor de un dígito y la letra “y”, que
representa un valor de un código; son VARIABLES.
4) Las cadenas “y”, “1”, “yx”, “y0” y “1y0x”, es decir cualquier
secuencia de terminales y/o variables, es un TÉRMINO.
5) Las secuencias “1 dígito” y “yx código”, es decir un término seguido
de un predicado, son REMARCAS.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

SISTEMAS CANÓNICOS:

En base a estos elementos se puede definir el siguiente Sistema Canónico,


que describe el lenguaje de los códigos binarios:

1) ├─ 0 dígito
2) ├─ 1 dígito
3) x dígito ├─ x código
4) x dígito ; y código ├─ yx código

Como vemos los cánones 1) y 2) son AXIOMAS. Es decir que se parte


de la aseveración de que 0 y 1 son dígitos. Luego con el canon 3) se
afirma que un dígito es un código y con el canon 4) se define un código
como una secuencia de dígitos.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE SISTEMAS CANÓNICOS:

Consideremos ahora el problema de comprobación del flujo de control


para una sentencia de bifurcación incondicional explícita, es decir la típica
proposición “goto”.
Normalmente la sintaxis de esta sentencia consiste en la escritura de la
palabra clave “goto” seguida de un “rótulo” que representa la posición de
otra sentencia del programa donde se debe dirigir el flujo de control.
Por simplicidad y con el objetivo de estudiar solo el problema que se
presenta con esta sentencia, vamos a suponer un lenguaje de programación
hipotético que consista exclusivamente de proposiciones “goto”.

También supondremos que los “rótulos” son secuencias de letras


mayúsculas.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE SISTEMAS CANÓNICOS:

Teniendo en cuenta estas hipótesis, las siguientes secuencias serían programas con
“sentencias goto”, cada sentencia consta de un “rótulo de enunciado”, seguido de
la palabra clave “goto” y un “rótulo de referencia”:

En este programa todos los rótulos de referencia


1) B goto D
figuran como rótulos de enunciado. Por lo tanto
C goto D podemos decir que es correcto en su sintaxis y su
D goto B semántica.

En este otro caso hay un rótulo de referencia que no


2) X goto Y
figura como rótulo de enunciado. Por lo tanto
D goto C podemos decir que es correcto en su sintaxis pero no en
Y goto D su semántica.
Esta sentencia podría interpretarse como incorrecta
3) A goto A
desde el punto de vista pragmático.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE SISTEMAS CANÓNICOS:

El objetivo de este ejemplo es definir un Sistema Canónico capaz de


describir el lenguaje hipotético de “sentencias goto”, teniendo en cuenta
en primer lugar el nivel de sintaxis y luego el nivel semántico.

Es decir que permita generar series de “sentencias goto”, donde la lista de


“rótulos de enunciado” contenga a la lista de “rótulos de referencia”.

Antes de presentar dicho Sistema Canónico, aclaremos una notación para


simplificar la escritura de cánones con idénticas premisas R1 ; ... ; RN y
diferentes conclusiones con igual predicado α1P, ... , αNP:

R1 ; ... ; RN ├─ α1+ α2+ .... + αNP

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE SISTEMAS CANÓNICOS:

Este es un Sistema Canónico que solo tiene en cuenta la sintaxis:

1) ├─ A + B + ...... + Z letra
2) l letra ├─ l identificador
3) l letra ; y identificador ├─ yl identificador
4) y identificador ├─ goto y enunciado_goto
5) e identificador ; x enunciado_goto ├─ ex programa
6) e identificador ; x enunciado_goto ; p programa ├─ exp programa

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE SISTEMAS CANÓNICOS:

Teniendo en cuenta este sistema canónico, los siguientes son programas


correctos en su sintaxis:
1) Z goto DX 2) AB goto AB 3) HG goto Z
DX goto Z X goto Z

En cambio los siguientes son programas incorrectos desde el punto de vista


sintáctico:
4) goto DX 5) AB goto 6) goto Z
DX goto Z X goto

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE SISTEMAS CANÓNICOS:

En cambio este otro Sistema Canónico tiene en cuenta tanto la sintaxis


como la semántica:

1) ├─ A + B + ...... + Z letra
2) l letra ├─ l identificador
3) l letra ; y identificador ├─ yl identificador
4) y identificador ├─ 〈 goto y , y 〉 enunciado_goto_con_rótulo_de_referencia
5) e identificador ; 〈 x , r 〉 enunciado_goto_con_rótulo_de_referencia ├─
〈 ex , e , r 〉 programa_con_rótulos_de_enunciado_y rótulos_de_referencia

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE SISTEMAS CANÓNICOS:

6) i identificador ; 〈 x , l 〉 enunciado_goto_con_rótulo_de_referencia ;
〈 p , e , r 〉 programa_con_rótulos_de_enunciado_y rótulos_de_referencia
├─ 〈 ixp , ei , rl 〉 programa_con_rótulos_de_enunciado_y rótulos_de_referencia

7) 〈 p , e , r 〉 programa_con_rótulos_de_enunciado_y rótulos_de_referencia ;
〈 r , e 〉 verifica_relación_pertenencia ├─ p programa_válido
8) ├─ λ lista
9) i identificador ├─ i lista
10) x lista ; y lista ├─ xy lista
11) x lista ; y lista ; z lista ├─ 〈 y , xyz 〉 verifica_relación_pertenencia
12) 〈 a , l 〉 verifica_relación_pertenencia ; 〈 b , l 〉 verifica_relación_pertenencia
├─ 〈 ab , l 〉 verifica_relación_pertenencia

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

EJEMPLOS DE SISTEMAS CANÓNICOS:

Veamos a continuación un ejemplo de uso de este sistema canónico:


 Aplicando el canon 1) tenemos que “A”, “B” y “F” son letras.
 Según cánones 2) y 3) tenemos que “BA”, “AF”, “B” y “F” son identificadores.
 De acuerdo al canon 4) podemos aseverar que “goto F”, “goto AF” y “goto B”
son enunciados goto con rótulo de referencia.
 Aplicando el canon 5) se llega a que “BA goto F”, “B goto AF”, “F goto B” y
“AF goto F” son programas con rótulos de enunciado y rótulo de referencia.
 El canon 6) nos permite aseverar que la secuencia “BA goto F B goto AF F
goto B AF goto F” es un programa con rótulos de enunciado (BA, B, F, AF) y
rótulos de referencia (F, AF, B).
 De cuerdo a los cánones del 8) al 12) podemos afirmar que las listas de rótulos
(BA, B, F, AF) y (F, AF, B) cumplen con la relación de pertenencia. Por lo que
según el canon 7) la secuencia “BA goto F B goto AF F goto B AF goto F”
es un programa válido.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

CONCEPTO DE TRADUCTOR: Un traductor se define como un


programa que traduce o convierte desde un texto o programa escrito
en un lenguaje fuente hasta un texto o programa equivalente escrito en
un lenguaje destino produciendo, si cabe, mensajes de error.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

 Preprocesadores
 Compiladores de L.A.N.
 Interpretes de L.A.N.
TIPOS DE
TRADUCTORES  Interpretes de comandos
 Ensambladores
 Conversores fuente-fuente
 Traductores de idioma
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

COMPILADOR: Es aquel traductor que tiene como entrada


sentencias en un lenguaje formal y como salida tiene un fichero
en un lenguaje de bajo nivel, es decir, realiza una traducción de
un de lenguaje alto nivel (LAN) a código máquina.
Ejemplo: C++ , Delphi , VisualBasic, etc.

INTERPRETE: Es un traductor/ejecutor que toma como


entrada sentencias escritas en un lenguaje formal y como salida
realiza la ejecución de dichas sentencias sin almacenarlas, es
decir, que traduce sentencia por sentencia de un LAN y la va
ejecutando sin crear un fichero donde se guarde el código de
máquina correspondiente. Ejemplo: Lisp, Snobol, etc.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

PSEUDOINTERPRETE: Algunos lenguajes intentan aunar las ventajas


de los compiladores y de los intérpretes y evitar sus desventajas; son los
lenguajes pseudointerpretados. En estos, el programa fuente pasa por
un pseudocompilador que genera un pseudoejecutable. Para ejecutar
este pseudoejecutable se le hace pasar por un motor de ejecución que lo
interpreta de manera relativamente eficiente. Ejemplo: Java, Cobol, etc.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

PREPROCESADORES: Permiten modificar el programa fuente antes


de la verdadera compilación. Hacen uso de macroinstrucciones y
directivas de compilación.
Por ejemplo, en lenguaje C++, el preprocesador sustituye la directiva
#include Uno.c por el código completo que contiene el fichero “Uno.c”,
de manera que cuando el compilador comienza su ejecución se
encuentra con el código ya insertado en el programa fuente. Algunas
otras directivas de preprocesamiento permiten compilar trozos de
códigos opcionales (lenguajes C++ y Clipper): #ifndef, #endif, #define.
Los preprocesadores suelen actuar de manera transparente para el
programador, pudiendo incluso considerarse que son una fase
preliminar del compilador.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

INTÉRPRETES DE COMANDOS: Un intérprete de comandos traduce


sentencias simples a invocaciones a programas de una biblioteca.
Se utilizan especialmente en los sistemas operativos (la shell de Unix es
un intérprete de comandos).
Los programas invocados pueden residir en el kernel (núcleo) del sistema
o estar almacenados en algún dispositivo externo como rutinas
ejecutables que se traen a memoria bajo demanda.
Por ejemplo, si bajo MS-DOS se teclea el comando copy se ejecutará la
función de copia de ficheros del sistema operativo, que se encuentra
residente en memoria.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

ENSAMBLADOR: Un ensamblador es un compilador sencillo, en el que


el lenguaje fuente tiene una estructura tan simple, que permite la
traducción de cada sentencia fuente a una única instrucción en código
máquina.
Al lenguaje que admite este compilador también se le llama lenguaje
ensamblador o simbólico. Este lenguaje fuente utiliza nemotécnicos para
hacer referencia a operaciones, registros, direcciones de memoria, etc.
En definitiva, existe una correspondencia uno a uno entre las
instrucciones ensamblador y las instrucciones máquina.
Ejemplo: Instrucción ensamblador INTEL 8088: MOV AH,09h
Código máquina generado en Binario: 1011- 0100- 0000- 1001

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

CONVERSORES FUENTE-FUENTE: Permiten traducir desde


un LAN (Lenguaje de Alto Nivel) a otro LAN, con lo que se
consigue una mayor portabilidad de estos lenguajes.
Por ejemplo un conversor de Java a C++, permitiría ejecutar
programas escritos en Java en computadores que solo tengan
compilador de C++.

TRADUCTORES DE IDIOMAS: Son traductores de lenguajes


naturales, es decir, tienen como entrada un texto escrito en un
idioma y dan como salida una texto equivalente escrito en otro
idioma. Por ejemplo: Systran (traductor Inglés-Español),
Traductor del Google (varios idiomas al español y viceversa), etc.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

FASES BÁSICAS PARA LA EJECUCIÓN DE UN PROGRAMA


ESCRITO CON LENGUAJE DE ALTO NIVEL

 COMPILACIÓN
FASES
 ENLACE
EJECUCIÓN

 CARGA

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

COMPILADOR: Por regla general un compilador no produce un


fichero ejecutable, sino que el código generado se estructura en módulos
que se almacenan en un fichero objeto.
Los ficheros objeto poseen información relativa tanto al código máquina
como a una tabla de símbolos que almacena la estructura de las variables
y tipos utilizados por el programa fuente.

Fich.fue

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

ENLAZADOR: Engloba en un único bloque los distintos módulos que


almacenan código máquina, estructura el bloque de memoria destinado a
almacenar las variables en tiempo de ejecución y genera el ejecutable
final incorporando algunas rutinas adicionales procedentes de librerías.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

CARGADOR: El fichero ejecutable consta de varios segmentos,


entre ellos el de código máquina, el de datos y el de pila. En estos
segmentos se hace referencia a direcciones de memoria principal
en forma relativa.
El cargador, que suele ser parte del S.O., coloca los diferentes
segmentos del fichero ejecutable en las direcciones de memoria
disponibles.
De tal modo que a las direcciones relativas del código se le suma la
dirección base del segmento correspondiente, para obtener la
dirección absoluta de memoria que tomará el microprocesador
para acceder a una variable o realizar una bifurcación.
ING. JORGE BUABUD
U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

ETAPAS DE UN COMPILADOR

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

EJEMPLO DE COMPILACIÓN: Supongamos que se está compilando


un programa en lenguaje C++, que contiene la siguiente expresión:
posición = inicial + velocidad * 60 , donde los identificadores posición,
inicial y velocidad se declararon de tipo float.

Salida del analizador léxico: Salida del analizador sintáctico:


id1 = id2 + id3 * nument = id1 + id2 * id3 nument

Salida del analizador semántico:


= id1 + id2 * id3 entareal(nument)

ING. JORGE BUABUD


U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA

APLICACIÓN: Proceso de Compilación.

Salida del generador de código


intermedio de 3 direcciones:
temp1 = entareal(60) Salida del generador de código:

temp2 = id3 * temp1 MOVF id3, R2

temp3 = id2 +temp2 MULF #60.0 , R2

id1 = temp3 MOVF id2, R1


ADDF R2, R1
Salida del optimizador de código: MOVF R1, id1
temp1 = id3 * 60.0
id1 = id2 + temp1
ING. JORGE BUABUD

Potrebbero piacerti anche