1. 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
2. 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
3. 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
4. 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
5. 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
6. 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
∈Σ
cualquier proceso de generación o derivación de una palabra. S∈ΣN
ING. JORGE BUABUD
7. 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
8. 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
9. 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
10. 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
11. 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
12. 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:
<frase> ⇒ <sujeto> <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
13. 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 ∈ Σ* ∧ S ⇒* w }
T
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
14. 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
15. 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
16. 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
17. 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
18. 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
19. 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
20. 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
21. 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
22. 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
23. 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
24. 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
25. 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
26. 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
27. 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
28. 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
29. 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
30. 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
31. 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
32. 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
33. 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
34. 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
35. 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
36. 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
37. 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
38. 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
39. 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
40. 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
41. 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
42. U.T.N. – F.R.T.
S. y S. de los L. LINGÜÍSTICA MATEMÁTICA
EJEMPLOS DE ESQUEMAS DE TRADUCCIÓN:
→
W→ while E do {SF { Si (E.TIPO==3) entonces W.TIPO=S.TIPO
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
43. 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
44. 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
45. 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
46. 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
47. 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
48. 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
49. 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
50. 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
51. 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
52. 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
53. 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
54. 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
55. 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
56. 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
57. 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
58. 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
59. 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
60. 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
61. 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
62. 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
63. 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
64. 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
65. 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
66. 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
67. 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
68. 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
69. 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
70. 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
71. 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
72. 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
73. 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
74. 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
75. 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
76. 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