Introduccin a la Teora de Lenguajes Curso de

  • Slides: 29
Download presentation
Introducción a la Teoría de Lenguajes Curso de Compiladores Preparado por Manuel E. Bermúdez,

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

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

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

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

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. Σ*

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 =

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

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

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 = {ε}.

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

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+ ≠

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. •

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

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

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,

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

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

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 = (Φ, Σ,

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.

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

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’

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) =

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

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

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 =>

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

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 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

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).