Escolar Documentos
Profissional Documentos
Cultura Documentos
DEPARTAMENTO DE SISTEMAS
LENGUAJES :
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
ALFABETOS:
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:
PALABRAS o CADENAS:
Español: la_casa_es_linda
el_perro_come_alegremente
PALABRAS o CADENAS:
LENGUAJES FORMALES:
Español: L4 = {la_casa_es_linda,
el_perro_come_alegremente}
LENGUAJES FORMALES:
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
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
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
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
notación: C2 = 2 C1
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 }
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 = { λ }
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 = Ф
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 }
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 . Ф = Ф
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 }
∞
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 }
∞
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
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
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
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)*
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:
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
Continuación ejemplo 4
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))))
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λ)
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
Niveles de un lenguaje:
LEXICOGRÁFICO
SINTÁCTICO
Niveles de un Lenguaje
SEMÁNTICO
PRAGMÁTICO
Niveles de un lenguaje:
Por ejemplo:
Diccionario del Lenguaje de programación C++:
Niveles de un lenguaje:
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>
Niveles de un lenguaje:
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.
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
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 }
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.
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
S = 〈frase〉〉
P ={ conjunto de reglas de producción enunciadas en el ejemplo }
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 〉
FORMA SENTENCIAL:
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
L(G) = { w / w ∈ Σ*T ∧ S ⇒* w }
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
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 〉
Σ 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→_
Σ N = { N, D, U, R} P: N → 0 | UR
Σ T = { 0, ... , 9 } R → DR | λ
D→0|U
S=N U → 1 | ... | 9
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 }
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.:
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〉〉 ::= _
FORMATO B.N.F.:
DIAGRAMAS DE SINTAXIS:
DIAGRAMAS DE SINTAXIS:
Letra
Identificador a
- z
-
Dígito Dígito
0
Letra
Letra
9
DIAGRAMAS DE SINTAXIS:
Uno
1
Número
Dígito
9
Uno
Dígito
0
0
Uno
DIAGRAMAS DE SINTAXIS:
Programa
Declara ; { Sentencia }
Tipo
Declara
int
Tipo id Arreglo
float
;
boolean
Arreglo
[ entero ] char
ESQUEMAS DE TRADUCCIÓN:
Esquema de Traducción
Regla de Sintaxis Acción Semántica
N→ β { fragmento programa }
ESQUEMAS DE TRADUCCIÓN:
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
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}
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 }
Valores Finales
S.TIPO==ok S.BIFU==error.b
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 ├─
SISTEMAS CANÓNICOS:
SISTEMAS CANÓNICOS:
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
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”:
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
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
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
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
COMPILACIÓN
FASES
ENLACE
EJECUCIÓN
CARGA
Fich.fue
ETAPAS DE UN COMPILADOR