• Like
Lingüística Matemática Clase 2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Lingüística Matemática Clase 2

  • 3,301 views
Published

Gramáticas para estructuras de frases. …

Gramáticas para estructuras de frases.
Diagramas de Sintaxis y Formato BNF.
Sistemas Canónicos y Esquemas de Traducción.
Proceso de Compilación.

Published in Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
3,301
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
118
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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