Introduccin a la Teora de Lenguajes Curso de





























- Slides: 29
Introducción a la Teoría de Lenguajes Curso de Compiladores Preparado por Manuel E. Bermúdez, Ph. D. Profesor Asociado University of Florida
Introducción a la Teoría de Lenguajes Definición: Un alfabeto (o vocabulario) Σ es un conjunto finito de símbolos. Ejemplo: Alfabeto de Pascal: +-*/<… (operadores) begin end if var (Palabras reservadas) <identifier> (Identificadores) <string> (hileras) <integer> (enteros) ; : , ()[] (puntuación) Nota: Todos los identificadores son representados por un símbolo, porque Σ debe ser finito.
Introducción a la Teoría de Lenguajes Definición: Una secuencia t = t 1 t 2…tn de símbolos de un alfabeto Σ es una hilera. Definición: La longitud de la hilera t = t 1 t 2…tn (se denota |t|) es n. Si n = 0, la hilera es ε, la hilera vacía. Definición: Dadas las hileras s = s 1 s 2…sn t = t 1 t 2…tm, la concatenación de s y t se denota st, y es la hilera s 1 s 2…snt 1 t 2…tm.
Introducción a la Teoría de Lenguajes Nota: εu = uε, uεv = uv, para hileras cualesquier u, v (incluyendo ε) Definición: Σ* es el conjunto de todas las hileras de símbolos de Σ. Nota: Σ* es llamada la clausura transitiva y reflexiva de Σ. Σ* está 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}. (Σ*, ·) a a a ε b aa b aba abb ba b bb Σ* es contablemente infinito: no se puede calcular todo Σ*. Solo se pueden calcular subconjuntos finitos de Σ*. Pero SÍ se puede calcular si una hilera dada pertenece a Σ*.
Introducción a la Teoría de Lenguajes • Ejemplo: Σ = Vocabulario de Pascal. Σ* = Todos los posibles programas potenciales de Pascal, i. e. todas las posibles entradas al compilador de Pascal. • Deseamos 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}. L 1 = ø es un lenguaje L 2 = {ε} es un lenguaje L 3 = {a} es un lenguaje L 4 = {a, bbab} es un lenguaje L 5 = {anbn / n >= 0} es un lenguaje donde an = aa…a, n veces L 6 = {a, aaa, …} es un lenguaje • Nota: L 5 es un lenguaje infinito, pero descrito finitamente.
Introducción a la Teoría de Lenguajes • ESTE ES EL OBJETIVO PRINCIPAL DE LA ESPECIFICACION DE LENGUAJES: Describir (en forma finita) un lenguaje de programación (infinito), y proporcionar un algoritmo de prueba-de-inclusión correspondiente (finito).
Constructores de Lenguajes Definición: La concatenación (o producto) de dos lenguajes L 1 y L 2, se denota L 1 L 2, y es el conjunto {uv | u L 1, v L 2}. Ejemplo: L 1 = {ε, a, bb}, L 2 = {ac, c} L 1 L 2 = {ac, c, aac, bbac, bbc} = {ac, c, aac, bbc}
Constructores de Lenguajes Definición: Ln = LL…L (n veces), y L 0 = {ε}. Ejemplo: L = {a, bb} L 3 = {aaa, aabb, abba, abbbb, bbaa, bbabb, bbbba, bbbbbb}
Constructores de Lenguajes Definición: La unión de dos lenguajes L 1 y L 2 es el conjunto L 1 L 2 = {u | u L 1} { v | v L 2} ∩ ∩ Definición: La clausura de Kleene (L*) de un lenguaje es el conjunto L* = U Ln, n >0. Ejemplo: L = {a, bb} L* = {cualquier hilera compuesta de a’s y bb’s} Definición: La clausura transitiva(L+) de un lenguaje L es el conjunto L+ = U Ln, n > 1.
Constructores de Lenguajes Nota: En general, L* = L+ U {ε}, pero L+ ≠ L* - {ε}. Por ejemplo, considerar L = {ε}. Entonces {ε} = L+ ≠ L* – {ε} = {ε} – {ε} = ø.
Gramáticas • Objetivo: Proporcionar un mecanismo finito para la descripción de lenguajes infinitos. • Método: Se da un subgrafo (Σ*, →*) de (Σ*, ·), y un nodo inicial S, tal que los nodos accesibles (desde S) son las hileras en el lenguaje.
Gramáticas Ejemplo: Σ = {a, b} L = {anbn / n > 0} a a a ε b a b aaa b aab ab a aaba b aabb a ba a bb b bbaa bbb b bbab
Gramáticas Definición: “=>” (deriva) es una relación definida por un conjunto finito de reglas de re-escritura conocidas como producciones. Definición: Dado un vocabulario V, una producción es un par (u, v) V* x V*, denotado u → v. u es llamada la parte-izquierda; v es llamada la parte-derecha.
Gramáticas Ejemplo: Pseudo-Inglés. V = {Sentence, NP, VP, Adj, N, V, boy, girl, the, tall, jealous, hit, bit} Sentence NP NP N N Adj Adj VP V V → → → NP VP N Adj NP boy girl the tall jealous V NP hit bit (una producción) Nota: El inglés es demasiado complicado para ser descrito de esta manera.
Gramáticas Definición: Dado un conjunto finito de producciones P V* x V*, se define la relación “=>” tal que para todo , β, u, v V* , uβ => vβ sii (u, v) P es una producción. Ejemplo: Sentence NP NP N N → → → NP VP N Adj NP boy girl Adj Adj VP V V → → → the tall jealous V NP hit bit
Gramáticas Sentence => => => => NP Adj the the the VP NP VP Adj NP jealous jealous jealous VP NP VP N VP girl V NP girl hit Adj girl hit the NP NP N boy
Gramáticas Definición: Una gramática es una tupla de 4 elementos, G = (Φ, Σ, P, S), donde Φ es un conjunto de no-terminales, Σ es un conjunto de terminales, V = Φ U Σ es el vocabulario de la gramática, S Φ es el símbolo de inicio (o meta), 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 → a. Sb, S → ε}
Gramáticas aaabbb => aabb => ab => ε => => Derivaciones: S => a. Sb => aa. Sbb => aaa. Sbbb => aaaa. Sbbbb → … aaaabbbb Nota: Normalmente, las gramáticas son dadas por un simple listado de las producciones.
Convenciones gramaticales convención del TWS 1. 2. 3. 4. Letra mayúscula (identificador) – nonterminal Letra minúscula(hilera) – terminal Letra griega minúscula– hileras en V* La parte izquierda de la primera producción se considera el símbolo de inicio, ej. S → a. Sb S→ε 1. La parte izquierda se omite si es la misma que para la producción anterior, ej. S → a. Sb →ε
Gramáticas Ejemplo: Gramática para identificadores. Identificador → Letra → Identificador Dígito Letra → ‘a’ → ‘A’ → ‘b’ → ‘B’. . → ‘z’ → ‘Z’ Dígito → ‘ 0’ → ‘ 1’. . → ‘ 9’
Gramáticas Definición: El lenguaje generado por la gramática G, es el conjunto L(G) = { Σ* | S =>* } Definición: Una forma sentencial generada por una gramática G es cualquier hilera tal que S =>* . Definición: Una sentencia generada por una gramática G es cualquier forma sentencial tal que Σ*.
Gramáticas Ejemplo: formas sentenciales aabb aaabbb sentencias Lemma: L(G) = { | es una sentencia} Prueba: Trivial. => => ab => ε => => S => a. Sb => aa. Sbb => aaa. Sbbb => aaaa. Sbbbb > … aaaabbbb
Gramáticas Ejemplo: A → a. ABC → a. BC a. B → ab B se reemplaza con b, pero b. B → bb solamente en el contexto b. C → bc de tener a ó b a la izquierda CB → BC c. C → cc
Gramáticas A => a. ABC => aaa. BBCBCC => aab. CBC aaa. BCBCBC => ab. C aabb. CC aaab. BBCCC (2) aaabbb. CCC => aaabbbc. CC (2) aaabbbccc A → a. ABC → a. BC a. B → ab b. B → bb b. C → bc CB → BC c. C → cc => L (G) = {anbncn | n > 1} => => aabbcc => => aaa. BBBCCC => aab. BCC aabbc. C => … => aa. BCBC => a. BC abc => aa. ABCBC => => Derivación: sensible al contexto
La Jerarquía de Chomsky Una jerarquía de gramáticas, de los lenguajes que generan, y de las máquinas que aceptan esos lenguajes.
La Jerarquía de Chomsky Tipo Nombre del Lenguaje Nombre de la Gramática Restricciones sobre la Gramática Máquina Aceptadora 0 Recursivamente Enumerable Sistema de re-escritura sin restricciones Ninguna Máquina de Turing 1 Lenguaje sensible al contexto Gramática sensible al contexto Para todo → , | |≤| | Máquina Acotada Lineal 2 Lenguaje libre de contexto Gramática libre de contexto Para todo → , Φ. Autómata de pila (parser) 3 Lenguaje Regular Gramática Regular Para todo → , Φ, U ΦU{ } Autómata de Estado Finito (lexer)
Jerarquía del Chomsky 0: Lenguajes Recursivamente Enumerables 1: Lenguajes Sensibles 2: al Contexto Lenguajes Libres de Contexto 3: Lenguajes Regulares {an | n > 0} {anbn | n>0} {anbncn | n>0} ¿ Lenguaje natural ? Trataremos con los lenguajes de tipo 2 (sintaxis) y los de tipo 3 (léxico).