300 likes | 659 Views
Introducción a la Teoría de Lenguajes. Programming Language Translators. Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida. Introducción a la Teoría de Lenguajes. Definición: Un alfabeto (o vocabulario) Σ es un a conjunto finito de símbolos.
E N D
Introducción a la Teoría de Lenguajes Programming Language Translators Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida
Introducción a la Teoría de Lenguajes Definición: Un alfabeto (o vocabulario) Σ es un a conjunto finito de símbolos. Ejemplo: Alfabeto de Pascal: + - * / < … (operadores) begin end if var (Palabras reservadas) <identifier> (Identificadores) <string> (strings/cadenas) <integer> (enteros) ; : , ( ) [ ] (punctuators) Nota: Todos los identificadores son representados por un simbolo, porque Σ debe ser finito.
Introducción a la Teoría de Lenguajes Definición: Una secuencia t = t1t2…tn de símbolos de un alfabeto Σ es una cadena. Definición: La longitud de la cadena t = t1t2…tn (se denota |t|) es n. Si n = 0, la cadena es ε, la cadena está vacia. Definición: Dada las cadenas s = s1s2…sn t = t1t2…tm, la concatenación de s y t, se denota st, y la cadena es s1s2…snt1t2…tm.
Introducción a la Teoría de Lenguajes Nota: εu = u = uε, uεv = uv, para cualquier cadena u,v (incluido ε) Definición: Σ* es el conjunto de todas las cadenas de símbolos de Σ. Nota: Σ* es llamada clausula transitiva y reflexiva de Σ. Σ* esta descrito por un grafo (Σ*, ·), donde “·” denota concatenación, y hay un nodo de inicio designado, ε.
Introducción a la Teoría de Lenguajes Ejemplo: Σ = {a, b}. (Σ*, ·) Σ* es contablemente infinito, es decir no puede operar todo de Σ*, y puede solo operar subconjuntos finitos de Σ*, pero puede operar si una cadena dada está en Σ*. aa a a aba b a a ab b abb ε b ba a b b bb
Introducción a la Teoría de Lenguajes • Ejemplo: Σ = Vocabulario de Pascal. • Σ* = Todos los posibles programas mencionados de Pascal, i.e. todas las posibles entradas al compilador de Pascal. • Se necesita especificar L Σ*, los programas de Pascal correctos. • Definición: Un lenguaje L sobre un alfabeto Σ es un subconjunto de Σ*.
Introducción a la Teoría de Lenguajes • Ejemplo: Σ = {a, b}. • L1 = ø es un lenguaje • L2 = {ε} es un lenguaje • L3 = {a} es un lenguaje • L4 = {a, ba, bbab} es un lenguaje • L5 = {anbn / n >= 0} es un lenguaje • donde an = aa…a, n veces • L6 = {a, aa, aaa, …} es un lenguaje • Nota: L5 es un lenguaje infinito, pero descritofinitamente.
Introducción a la Teoría de Lenguajes • ESTE ES EL OBJETIVO PRINCIPAL DE LA ESPECIFICACION DEL LENGUAJE: • Describir (infinite) los lenguajes de programación finitos, y proporcionar los algoritmos inclusion-test finitos correspondientes.
Language Constructors Definición: El encadenamiento(o producto) de dos lenguajes L1 y L2, se denota L1L2, es un conjunto. {uv | uL1, vL2}. Ejemplo: L1 = {ε, a, bb}, L2 = {ac, c} L1L2 = {ac, c, aac, ac, bbac, bbc} = {ac, c, aac, bbac, bbc}
Language Constructors Definición: Ln = LL…L (n veces), y L0 = {ε}. Ejemplo: L = {a, bb} L3 = {aaa, aabb, abba, abbbb, bbaa, bbabb, bbbba, bbbbbb}
Language Constructors Definición: La unión de dos lenguajes L1 y L2 es el conjunto L1 L2 = {u | uL1} { v | vL2} Definición: La clausura de Kleene (L*) de un lenguaje es el conjunto L* = U Ln, n >0. Ejemplo: L = {a, bb} L* = {cualquier cadena compuesta de a’s y b’s} Definición: La clausula transitiva(L+) de un lenguaje L es el conjunto L+ = U Ln, n > 1. ∩ ∩ ** La clausura de Kleene también llamada estrella Kleene o cierre estrella.
Language Constructors Nota: En general, L* = L+ U {ε}, pero L+≠ L* - {ε}. Por Ejemplo, considerar L = {ε}. Entonces {ε} = L+≠ L* – {ε} = {ε} – {ε} = ø.
Gramática • Objetivo: Proporcionar un significado para la descripcion de lenguajes finitos. • Método: Proporcionar un subgrafo (Σ*, →*) de (Σ*, ·), y un nodo inicial S, tal que el conjunto de nodos accesibles (de S) son las cadenas en el lenguaje.
Gramática Ejemplo: Σ = {a, b} L = {anbn / n > 0} a aaa a aaba a aa b aab b b a a ab aabb ε a ba bbaa a b a b bba b bb b bbab b bbb
Gramática • “=>” (deriva) es una relacion definida por un conjunto finito de reglas reescritas conocidas como produccion. • Definición: Dado un vocabulario V, una produccion es un par (u, v) V* x V*, denotado u → v. u es llamada la parte-izquierda; v es llamada la derecha.
Gramática Ejemplo: Pseudo-English. V = {Sentence, NP, VP, Adj, N, V, boy, girl, the, tall, jealous, hit, bit} Sentence → NP VP (one production) NP → N NP → Adj NP N → boy N → girl Adj → the Adj → tall Adj → jealous VP → V NP V → hit V → bit Nota: El ingles es mucho mas complicado para ser descrito de esta manera.
Gramática Definición: Dado un conjunto finito de producciones P V* x V* la relación => es definido tal que , β, u, v V* , uβ => vβ iff u → v P es una produccion. Ejemplo: Sentence → NP VP Adj → the NP → N Adj → tall NP → Adj NP Adj → jealous N → boy VP → V NP N → girl V → hit V → bit
Gramática Sentence => NP VP => Adj NP VP => the NP VP => the Adj NP VP => the jealous NP VP => the jealous N VP => the jealous girl VP => the jealous girl V NP => the jealous girl hit NP => the jealous girl hit Adj NP => the jealous girl hit the NP => the jealous girl hit the N => the jealous girl hit the boy
Gramática Definición: Una gramatica es una tupla de 4 elementos,G = (Φ, Σ, P, S) donde Φ es un conjunto de no terminales, Σ es un conjunto de terminales, V = Φ U Σ es la gramática del vocabulario, S Φ es llamado el inicio o el “goal symbol”, y P V* x V* es un conjunto finito de producciones. Ejemplo: Gramática para {anbn / n > 0}. G = (Φ, Σ, P, S), donde Φ = {S}, Σ = {a, b}, y P = {S → aSb, S → ε}
Gramática Derivaciones: S => aSb => aaSbb => aaaSbbb => aaaaSbbbb → … ε ab aabb aaabbb aaaabbbb Nota: Normalmente, las gramaticas son dadas por un listado simple de producciones. => => => => =>
Convenciones gramáticales TWS convention Letra mayúscula (identificador) – nonterminal Letra minúscula(cadena) – terminal Letra griega minúscula– cadenas en V* Parte izquierda de la primera produccion es considerada para ser el simbolo de inicio, ej. S → aSb S → ε Parte izquierda omitida si es lo mismo para la produccion anterior, ej. S → aSb → ε
Gramática Ejemplo: Gramática para identificadores. Identificador → Letra → Identificador Letra → Identificador Dígito Letra → ‘a’ → ‘A’ → ‘b’ → ‘B’ . . → ‘z’ → ‘Z’ Dígito → ‘0’ → ‘1’ . . → ‘9’
Gramática Definición: The language generated by a grammar G, is the set L(G) = { Σ* | S =>* } Definición: A sentential form generated by a grammar G is any string α such that S =>* . Definición: A sentence generated by a grammar G is any sentential form such that Σ*.
Gramática Ejemplo: sentential forms S => aSb => aaSbb => aaaSbbb => aaaaSbbbb > … ε ab aabb aaabbb aaaabbbb Lemma: L(G) = { | is a sentence} Proof: Trivial. => => => => => sentences
Gramática Ejemplo: A → aABC → aBC aB → ab bB → bb bC → bc CB → BC cC → cc
Gramática Derivaciones: A => aABC => aaABCBC => … aBC aaBCBC aaaBCBCBC abC aabCBC aaaBBCBCC abc aabBCC aaaBBBCCC aabbCC aaabBBCCC (2) aabbcC aaabbbCCC aabbcc aaabbbcCC (2) aaabbbccc L (G) = {anbncn | n > 1} => => => => => => => => => => => => => => => =>
Jerarquía de Chomsky Es una jerarquia de gramaticas, contiene los lenguajes que generan y las maquinas que aceptan esos lenguajes.
Jerarquía del Lenguaje 0: Recursively Enumerable Languages 1: Context-Sensitive Languages We will deal with type 2 (syntax) and type 3 (lexicon) languages. 2: Context-free Languages 3: Regular Languages {an | n > 0} {anbn | n>0} {anbncn | n>0} English?