Unidad 3 Analizador Sintctico LA FUNCIN DEL ANALIZADOR

  • Slides: 51
Download presentation
Unidad 3 Analizador Sintáctico

Unidad 3 Analizador Sintáctico

LA FUNCIÓN DEL ANALIZADOR SINTÁCTICO • La principal tarea del analizador sintáctico (o parser)

LA FUNCIÓN DEL ANALIZADOR SINTÁCTICO • La principal tarea del analizador sintáctico (o parser) no es comprobar que la sintaxis del programa fuente sea correcta, sino construir una representación interna de ese programa y, en el caso en que sea un programa incorrecto, dar un mensaje de error. • Para ello, el analizador sintáctico (A. S. ) comprueba que el orden en que el A. L. le va entregando los tokens es válido. Si esto es así significará que la sucesión de símbolos que representan dichos tokens puede ser generada por la gramática correspondiente al lenguaje del código fuente. • Se supone que el A. S. informará de cualquier error de sintaxis de manera inteligible. • Y debería recuperarse de los errores que ocurren frecuentemente para poder continuar procesando el resto de su entrada.

Analizador Sintáctico Programa fuente Analizador léxico Componente Léxico Analizador Sintáctico Obtener siguiente componente léxico

Analizador Sintáctico Programa fuente Analizador léxico Componente Léxico Analizador Sintáctico Obtener siguiente componente léxico Árbol de análisis sintáctico Resto de etapas Representación intermedia Tabla de símbolos Posición del analizador sintáctico en el modelo del compilador

Introducción El análisis sintáctico (parser en lengua inglesa) toma los tokens que le envía

Introducción El análisis sintáctico (parser en lengua inglesa) toma los tokens que le envía el analizador léxico y comprueba si con ellos se puede formar alguna sentencia válida del lenguaje. Recuérdese que se entiende por sintaxis como el conjunto de reglas formales que especifican como se construyen las sentencias de un determinado lenguaje. La sintaxis de los lenguajes de programación habitualmente se describe mediante gramáticas libres de contexto (o gramáticas tipo 2), G = { S, VT, VNT, P } donde: S: el axioma o símbolo inicial VT : conjunto de terminales, los componentes léxicos o tokens VNT : conjunto de no-terminales P: conjunto de reglas de producción de la forma: VNT → X 1, . . . , Xn con Xi ∈ (VT ∪ VNT)* utilizando para ello algún tipo de notación como por ejemplo, las notaciones BNF y EBNF. Esta especificación ofrece numerosas ventajas.

Ventajas ØUna gramática da una especificación sintáctica precisa, y fácil de comprender, de un

Ventajas ØUna gramática da una especificación sintáctica precisa, y fácil de comprender, de un lenguaje de programación. ØPara ciertas clases de gramáticas se puede construir automáticamente un analizador sintáctico, que determina si un programa está bien construido. Como beneficio adicional, el proceso de construcción del analizador sintáctico puede revelar ambigüedades sintácticas y otras dificultades para la construcción del parser que de otra forma no serán detectadas en la fase de diseño inicial de un lenguaje y que podrían se arrastradas a su compilador. ØUna gramática bien diseñada da una estructura al lenguaje de programación que se utiliza en la traducción del programa fuente en código objeto correcto y para la detección de errores. Existen herramientas que a partir de la descripción de la gramática se puede generar el código del analizador sintáctico. ØLos lenguajes de programación después de un periodo de tiempo, adquieren nuevas construcciones y llevan a cabo tareas adicionales. Estas nuevas construcciones se pueden añadir más fácilmente al lenguaje cuando hay una implementación basada en una descripción gramatical del lenguaje.

Funciones del analizador sintáctico ØComprobar si la cadena de tokens proporcionada por el analizador

Funciones del analizador sintáctico ØComprobar si la cadena de tokens proporcionada por el analizador léxico puede ser generada por la gramática que define el lenguaje fuente (gramática libre del contexto, GLC). ØConstruir el árbol de análisis sintáctico que define la estructura jerárquica de un programa y obtener la serie de derivaciones para generar la cadena de tokens. El árbol sintáctico se utilizará como representación intermedia en la generación de código. ØInformar de los errores sintácticos de forma precisa y significativa. Deberá estar dotado de un mecanismo de recuperación de errores para continuar con el análisis.

Interfaces del analizador sintáctico Gramática Libre de Contexto token Programa fuente Analizador sintáctico Analizador

Interfaces del analizador sintáctico Gramática Libre de Contexto token Programa fuente Analizador sintáctico Analizador léxico árbol sintáctico pide siguiente token Gestor de errores Tabla de símbolos Analizador Representación semántico intermedia

En resumen: El análisis sintáctico se puede considerar como una función que toma como

En resumen: El análisis sintáctico se puede considerar como una función que toma como entrada la secuencia de componentes léxicos (tokens) producida por el análisis léxico y produce como salida el árbol sintáctico. En realidad, el análisis sintáctico hace una petición al análisis léxico del token siguiente en la entrada (los símbolos terminales) conforme lo va necesitando en el proceso de análisis.

Fundamentos de la Teoría de Gramáticas Formales

Fundamentos de la Teoría de Gramáticas Formales

Fundamentos de la Teoría de Gramáticas: üConcepto básico de Gramática. Ejemplos üConcepto de gramática

Fundamentos de la Teoría de Gramáticas: üConcepto básico de Gramática. Ejemplos üConcepto de gramática formal üTipos de Gramáticas. Jerarquía de Chomsky üÁrboles de derivación üAmbigüedad üRecursividad üFactorización a izquierdas

Fundamentos de la Teoría de Gramáticas: üConcepto básico de Gramática. Ejemplos üConcepto de gramática

Fundamentos de la Teoría de Gramáticas: üConcepto básico de Gramática. Ejemplos üConcepto de gramática formal üTipos de Gramáticas. Jerarquía de Chomsky üÁrboles de derivación üAmbigüedad üRecursividad üFactorización a izquierdas

Concepto Básico de Gramática ØUna gramática define la estructura de las frases y de

Concepto Básico de Gramática ØUna gramática define la estructura de las frases y de las palabras de un lenguaje. ØLas gramáticas son un método para la generación de palabras de un lenguaje a partir de un alfabeto. –para generar estas palabras se utilizan las derivaciones. –se denominan formales porque se centran en los estudios de los lenguajes formales que son aquellos que están definidos a partir de reglas preestablecidas. Para los lenguajes naturales existen otro tipo de gramáticas.

Concepto Básico de Gramática La gramática de la lengua castellana se expresa mediante reglas

Concepto Básico de Gramática La gramática de la lengua castellana se expresa mediante reglas sencillas que definen las partes de la oración, y que permiten comprobar fácilmente si una frase determinada es o no correcta. Analizar la frase “La niña pedía comida a María en el parque”. <oración> : : = <sujeto><predicado> <sujeto> : : = <frase_nominal> : : = <grupo_nominal><calificativos> <grupo_nominal> : : = <nombre> <grupo_nominal> : : = <artículo><nombre> <calificativo> : : = <conjunción><oración> <calificativo> : : = <adjetivo> <predicado> : : = <verbo><complementos> : : = <directo><indirecto><circunstancial> <complementos> : : = <directo>< circunstancial> <complementos> : : = <indirecto><circunstancial> <complementos> : : = <circunstancial> : : = <circunstancial> <directo> : : = <frase_nominal> <indirecto> : : = “a”<frase_nominal> <circunstancial> : : = <preposición><frase_nominal>

Concepto Básico de Gramática Obsérvese la existencia de recursividad en las reglas de producción.

Concepto Básico de Gramática Obsérvese la existencia de recursividad en las reglas de producción. Algunas la introducen directamente, como en el caso <circunstancial> : : =<circunstancial>, mientras que en otras de forma indirecta (<oración> <sujeto> <frase_nominal> <calificativo> <oración>). • Para completar las reglas sintácticas anteriores se necesita información morfológica sobre las palabras. Esta información también puede escribirse en forma de reglas de producción: <nombre> : : = “niña” <nombre> : : = “María” <nombre> : : = “comida” <nombre> : : = “parque” <artículo> : : = “la” <verbo> : : = “pedía” <preposición> : : = “en”

Concepto Básico de Gramática Teniendo en cuenta todas estas reglas, y aplicando el concepto

Concepto Básico de Gramática Teniendo en cuenta todas estas reglas, y aplicando el concepto de derivación, se puede obtener la frase considerada partiendo de una palabra de una sola letra <oración>: <oración> → <sujeto><predicado> → <frase_nominal><predicado> → <grupo_nominal><predicado> → <artículo><nombre><predicado> → la niña <verbo><complementos> → la niña pedía <directo><indirecto><circunstancial> → la niña pedía comida <indirecto><circunstancial>

Concepto Básico de Gramática → la niña pedía comida a <frase_nominal><circunstancial> → la niña

Concepto Básico de Gramática → la niña pedía comida a <frase_nominal><circunstancial> → la niña pedía comida a <grupo_nominal><circunstancial> → la niña pedía comida a <nombre><circusntancial> → la niña pedía comida a María <circunstancial> → la niña pedía comida a María <preposición><frase_nominal> → la niña pedía comida a María en <grupo_nominal> → la niña pedía comida a María en <articulo><nombre> → la niña pedía comida a María en el parque Por tanto, al haber una derivación que produce dicha frase partiendo de <oración>, se sigue que se trata de una frase correcta que pertenece al lenguaje representado por la gramática.

Concepto Básico de Gramática Ejemplo: consideremos la instrucción de cualquier lenguaje con: – Conjunto

Concepto Básico de Gramática Ejemplo: consideremos la instrucción de cualquier lenguaje con: – Conjunto de producciones : <instrucción> : : = <asignación> : : = <identificador>”=”<expresión> : : = <sumando>”+”<expresión> <sumando> : : = <factor> “*” <sumando> <factor> : : = <identificador> <factor> : : = <número> – Reglas morfológicas : <identificador> : : = “x” <identificador> : : = “y” <identificador> : : = “z” <número> : : = “ 2” x = y+2*z

Concepto Básico de Gramática Obtenemos la expresión x = y+2*z a partir de <instrucción>

Concepto Básico de Gramática Obtenemos la expresión x = y+2*z a partir de <instrucción> así: <instrucción> → <asignación> → <identificador> = <expresión> → x = <sumando> + <expresión> → x = <factor> + <expresión> → x = <identificador> + <expresión> →x = y+ <sumando> →x = y+ <factor> * <sumando> → x = y+ <número> * <sumando> → x = y+2* <factor> → x = y+2* <identificador> → x = y+2*z

Fundamentos de la Teoría de Gramáticas: üConcepto básico de Gramática. Ejemplos üConcepto de gramática

Fundamentos de la Teoría de Gramáticas: üConcepto básico de Gramática. Ejemplos üConcepto de gramática formal üTipos de Gramáticas. Jerarquía de Chomsky üÁrboles de derivación üAmbigüedad üRecursividad üFactorización a izquierdas

Concepto de Gramática Formal Definiciones • Producción o regla (x: : =y): es un

Concepto de Gramática Formal Definiciones • Producción o regla (x: : =y): es un par ordenado (x, y) con x, y ϵ ∑*, es decir, si se encuentra x como parte de cualquier palabra v se puede sustituir x por y en v, lo que permite transformar palabras en otras • Derivación directa v → w: aplicación de una producción (x : : = y) a una palabra v para convertirla en otra w donde v=zxu y w=zyu (v, w, z, u ϵ ∑*) – Se cumple que para cada producción x: : =y existe una derivación directa (haciendo z=u=λ): x → y • Derivación v → * w: aplicación de una secuencia de producciones a una palabra. • Longitud de la derivación: número de derivaciones que hay que aplicar para obtener la palabra.

Concepto de Gramática Formal Definiciones • Derivación más a la izquierda: Se utiliza en

Concepto de Gramática Formal Definiciones • Derivación más a la izquierda: Se utiliza en cada derivación directa la producción aplicada a los símbolos más a la izquierda de la palabra. • Derivación más a la derecha: Se utiliza en cada derivación directa la producción aplicada a los símbolos más a la derecha de la palabra.

Concepto de Gramática Formal Definiciones Se denomina gramática formal a la cuádrupla G =

Concepto de Gramática Formal Definiciones Se denomina gramática formal a la cuádrupla G = (∑T, ∑N, S, P) – ∑T, alfabeto de símbolos terminales – ∑N, alfabeto de símbolos no terminales – S ϵ ∑N, es el axioma o símbolo inicial – P es un conjunto finito de reglas de producción de la forma u : : = v, donde u ϵ ∑+ y v ϵ ∑*. Se verifica además que: – ∑T ∩ ∑N = Φ – el alfabeto es ∑ = ∑T U ∑N

Concepto de Gramática Formal Forma normal de Backus • Ejemplo : consideremos la gramática

Concepto de Gramática Formal Forma normal de Backus • Ejemplo : consideremos la gramática ST = {0, 1, 2} SN = {N, C} S=N P = { N: : =NC, N: : =C, C: : =0, C: : =1, C: : =2} • Es posible establecer una notación simplificada para las reglas de producción. Si existen dos reglas de la forma u: : =v u: : =w se pueden representar de la forma: u: : =v | w Esta forma de representar las reglas de producción recibe el nombre de “forma normal de Backus” (o BNF)

Concepto de Gramática Formal Forma normal de Backus Ø Sea G = (∑T, ∑N,

Concepto de Gramática Formal Forma normal de Backus Ø Sea G = (∑T, ∑N, S, P). Una palabra x ϵ ∑* se denomina forma sentencial de G si se verifica que S →* x – Considerando la gramática anterior, las siguientes son formas sentenciales : NCC, NC 2, 120 S = N → NCC → NC 2 S = N → NCC → CCC → 12 C → 120 Ø Si una forma sentencial x cumple que x ϵ ∑T* se dice que x es una sentencia o instrucción de G. Es decir, las sentencias estarán compuestas únicamente por símbolos terminales. – En el ejemplo anterior es sentencia: 120

Concepto de Gramática Formal Lenguaje asociado a una gramática • Sea una gramática G

Concepto de Gramática Formal Lenguaje asociado a una gramática • Sea una gramática G = (∑T, ∑N, S, P). Se llama lenguaje asociado a la G, o lenguaje generado por G, o lenguaje descrito por G, al conjunto : L(G) = { x / S → * x and x ϵ ∑T * } Conjunto de todas las sentencias de la gramática • Ya que la teoría de gramáticas formales (Chomsky), junto con la notación BNF, proporciona una forma de describir lenguajes, esta simbología se considera como un metalenguaje (lenguaje para describir lenguajes).

Fundamentos de la Teoría de Gramáticas: üConcepto básico de Gramática. Ejemplos üConcepto de gramática

Fundamentos de la Teoría de Gramáticas: üConcepto básico de Gramática. Ejemplos üConcepto de gramática formal üTipos de Gramáticas. Jerarquía de Chomsky üÁrboles de derivación üAmbigüedad üRecursividad üFactorización a izquierdas

Tipos de Gramáticas Jerarquía de Chomsky clasificó las gramáticas en cuatro grandes grupos :

Tipos de Gramáticas Jerarquía de Chomsky clasificó las gramáticas en cuatro grandes grupos : G 0, G 1, G 2 y G 3. Cada uno de estos grupos incluye las gramáticas del siguiente, de acuerdo con el siguiente esquema: G 3 ⊂ G 2 ⊂ G 1 ⊂ G 0

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 0 • Las reglas de producción

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 0 • Las reglas de producción tienen la forma u : : = v donde u ϵ ∑+, v ϵ ∑*, u = x. Ay con x ϵ ∑*, y ϵ ∑*, A ϵ ∑N sin otra restricción – En las reglas de producción: • La parte izquierda no puede ser la palabra vacía. • En la parte izquierda (u) ha de aparecer algún símbolo no terminal. • Los lenguajes representados por estas gramáticas reciben el nombre de lenguajes sin restricciones. Puede demostrarse que todo lenguaje representado por este tipo de gramáticas pueden ser descritos también por un grupo de gramáticas un poco más restringido (llamado de gramáticas de estructura de frases), cuyas producciones tienen la forma x. Ay : : = xvy, donde x, y, v ϵ ∑*, siendo A un símbolo no terminal.

Tipos de Gramáticas Jerarquía de Chomsky ØYa que v puede ser la palabra vacía,

Tipos de Gramáticas Jerarquía de Chomsky ØYa que v puede ser la palabra vacía, se sigue que en estas reglas podemos encontrar situaciones en que la parte derecha sea más corta que la izquierda. Las reglas en que ocurre esto se denominan compresoras. Una gramática que contenga al menos una regla compresora se denomina gramática compresora. ØEn las gramáticas compresoras, las derivaciones pueden ser decrecientes, ya que la longitud de las palabras puede disminuir en cada uno de los pasos de derivación. – Ejemplo: sea G = ({a, b}, {A, B, C}, A, P), donde P: A : : = a. ABC | ab. C CB : : = BC b. B : : = bb b. C : : = b

Tipos de Gramáticas Jerarquía de Chomsky Ø Esta gramática es de tipo 0, no

Tipos de Gramáticas Jerarquía de Chomsky Ø Esta gramática es de tipo 0, no es de estructura de frases por la regla CB : : = BC ØFormas de considerarla: • Considerando x = λ, A = C, y = B. Estaría formada la parte izquierda de la producción, pero la derecha será v. B y sea cual sea v, no podrá ser BC. • Considerando x = C, A = B, y = λ. Así tendríamos formada la parte izquierda de la regla, pero en la derecha tendríamos Cv, y sea v lo que sea no podremos obtener CB. • Ya no es posible hacer ninguna otra descomposición, por lo que esta regla no pertenece al esquema de reglas visto para las gramáticas de estructura de frases. Ø Para la producción : A : : = a. ABC: • A = A, x= λ, y = λ. Si hacemos v = a. ABC, la regla se ajusta al formato considerado.

Tipos de Gramáticas Jerarquía de Chomsky Ø Sin embargo la regla CB : :

Tipos de Gramáticas Jerarquía de Chomsky Ø Sin embargo la regla CB : : = BC puede descomponerse en las cuatro reglas siguientes, que permiten obtener las mismas derivaciones con más pasos, pero ajustándose a las condiciones exigidas para que la gramática sea de estructura de frases. CB : : = XB XB : : = XY XY : : = BY BY : : = BC La gramática resultante, tendrá 3 reglas de producción más y dos símbolos adicionales (X, Y) en el alfabeto de símbolos no terminales. Ø Veamos la derivación de la sentencia aaabbb, mediante la gramática original : A → a(A)BC → aa(A)BCBC → aaab(CB)CBC → aaa(b. B)CCBC → aaab(b. C)BC → aaab(b. B)C → aaabb(b. C) → aaabbb Ø Se observa también que la gramática es compresora, debido a la presencia de la regla b. C : : = b. Ø Puede comprobarse que el lenguaje generado por esta gramática es {anbn|n=1, 2, . . }

En resumen: Gramáticas de tipo 0 También llamadas gramáticas no restringidas o gramáticas con

En resumen: Gramáticas de tipo 0 También llamadas gramáticas no restringidas o gramáticas con estructura de frase. Las reglas de derivación son de la forma: α→β siendo α ∈ (VN∪VT)+ β ∈ (VN∪VT)* , es decir la única restricción es que no puede haber reglas de la forma λ → β donde λ es la cadena vacía.

Ejemplo 1 Sea la gramática definida por G 1 = ({S}, {0, 1}, S,

Ejemplo 1 Sea la gramática definida por G 1 = ({S}, {0, 1}, S, P) donde P={(S → 000 S 111), (0 S 1→ 01)}. Determinar el lenguaje que genera. Solución : La única forma de generar sentencias es aplicando cualquier nº de veces la primera producción y terminando con la aplicación de la segunda, así se obtiene el lenguaje: S → 000 S 111→ 000000 S 111111→⋅ ⋅ ⋅→ 0(3 n − 1)0 S 11(3 n − 1)→ 0(3 n)1(3 n) Por consiguiente el lenguaje que genera esta gramática es el conjunto infinito de instrucciones que se indica a continuación : L(G 1) = {0(3 n)1(3 n)/n ≥ 1} Ejemplo 2 Si la 2ª producción de la gramática del ejemplo 1 fuese S → 01 el lenguaje sería : L(G 2) = {0(3 n + 1)1(3 n + 1)/n ≥ 0}

Ejemplo 3 Sea la gramática G 3 = ({S}, {a, b}, S, P) donde

Ejemplo 3 Sea la gramática G 3 = ({S}, {a, b}, S, P) donde P={(S → a. Sb), (S → ab)}. Determinar el lenguaje que genera. Solución : Aplicando la primera producción n-1 veces, seguida por la aplicación de la segunda producción, se tiene que : S →a. Sb →aa. Sbb →a 3 Sb 3→⋅ ⋅ ⋅→a(n − 1)Sb(n − 1)→anbn El lenguaje generado : L(G 3)={an bn/n ≥ 1}

Ejemplo 4 Dada la gramática G 4 = ({S, A}, {a, b}, S, P)

Ejemplo 4 Dada la gramática G 4 = ({S, A}, {a, b}, S, P) donde P={(S → ab. AS), (ab. A → baab), (S → a), (A → b)}. Determinar el lenguaje que genera. Solución : Se generan sentencias del lenguaje aplicando las reglas hasta que se pueda ver la forma general del lenguaje. S →ab. AS →baaba S →ab. AS →abba S →ab. Aab. AS →⋅ ⋅ ⋅→(ab. A)n. S → (abb)na S →ab. Aab. AS →⋅ ⋅ ⋅→(ab. A)n. S → (baab)na S →ab. Aab. AS →abbbaaba S →ab. Aab. AS →baababba S →ab. Aab. AS →baababbbaaba L(G 4) = {cadenas que contienen abb y baab intercambiándose y reproduciéndose cualquier número de veces, y terminando siempre con el símbolo a} Se puede observar que la forma de expresar este lenguaje no es simple, y surge la necesidad de tener una herramienta que permita describir los lenguajes de otra forma.

Ejemplo 5 Sea la gramática G 5 = ({S, A, B}, {a, b}, S,

Ejemplo 5 Sea la gramática G 5 = ({S, A, B}, {a, b}, S, P) donde las producciones P son : S →a. B A →b. AA S →b. A B →b A →a B→b. S A →a. S B →a. BB Determinar el lenguaje que genera. Solución : Se generan algunas instrucciones. S →a. B →ab S →b. A →ba S →a. B →ab. S →abb. A →abba S →b. A →bb. AA →bbaa S →a. B →ab. S →aba. B →abab. S →ababa. B →ababab L(G 5) = {cadenas que tienen igual nº de a que de b} La demostración no es inmediata. Demostrar, ver (Hopcroft y Ullman (1979), pp. 81 -82).

Ejemplo 6 Sea la gramática G 6 = (VN, VT, S, P) donde :

Ejemplo 6 Sea la gramática G 6 = (VN, VT, S, P) donde : VN = { <número> , <dígito> } VT = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } S = <número> Las reglas de producción P son : <número> : : = <dígito> : : = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Determinar el lenguaje que genera. Solución : Acontinuación se muestran algunas sentencias del lenguaje generado por esta gramática. < número >→< dígito >< número >→ 72 < número >→< dígito >→ 7 < número >→< dígito >→ 0 < número >→< dígito >< número >→⋅ ⋅ ⋅→ 235 L(G 6) = {conjunto de los números naturales en base diez}.

Ejemplo 7 Sea la gramática G 7 = ({A, S}, {a, b}, S, P)

Ejemplo 7 Sea la gramática G 7 = ({A, S}, {a, b}, S, P) donde las reglas de producción son : S →a. S S →a. A A →b Determinar el lenguaje que genera esta gramática. Solución : Se muestran algunas sentencias del lenguaje generado por la gramática. S →aa. A →aab S →a. A →ab S →aaa. S →⋅ ⋅ ⋅→an. S →ana. A →an + 1 b S →a. A →abbb. A →⋅ ⋅ ⋅→abn. A →abn + 1 El lenguaje generado se puede definir con la siguiente expresión regular L(G 7) = a a* b b*

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 1 Las reglas de producción de

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 1 Las reglas de producción de esta gramática tienen la forma x. Ay : : = xvy donde x, y ϵ ∑*, v ϵ ∑+ y A ha de ser un símbolo no terminal. (A puede transformarse en v sólo si aparece en el contexto definido por x e y) • Ya que v no puede ser la palabra vacía, se deduce de aquí que este tipo de gramáticas no pueden tener reglas compresoras. Se admite una excepción en la regla S : : = λ (siendo S el axioma de la gramática). Como consecuencia se tiene que la palabra vacía pertenece al lenguaje generado por la gramática sólo si contiene esta regla. • Los lenguajes generados por este tipo de gramáticas se denominan “dependientes del contexto”.

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 1 Evidentemente todas las gramáticas de

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 1 Evidentemente todas las gramáticas de tipo 1 son también de tipo 0, y así, todos lenguajes dependientes de contexto serán también lenguajes sin restricciones. • Ejemplo 1 : G = ({S, B, C}, {a, b, b}, S, P), donde P es: S : : = a. SBc | a. BC b. B : : = bb b. C : : = bc CB : : = BC c. C : : = cc a. B : : = ab

Ejemplo 2 La gramática G = ({S, A, B}, {a, b}, S, P) cuyas

Ejemplo 2 La gramática G = ({S, A, B}, {a, b}, S, P) cuyas producciones P son: S →a. B S →b. A A →a. S A →b. AA B →b B→b. S B →a. BB Ejemplo 3 La gramática G = (VN, VT, S, P) donde VN = { <número> , <dígito> }; VT = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; S = <número> y las reglas de producción P son: <número> : : = <dígito> : : = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Ejemplo 4 La gramática G = ({a, b}, {A, S}, S, P) y sus

Ejemplo 4 La gramática G = ({a, b}, {A, S}, S, P) y sus producciones P son: S →a. S S →a. A A →b Ejemplo 5 La gramática definida como G = ({S}, {a, b}, S, P) donde P son las siguientes producciones : ? S →aaaa. Sbbbb a. Sb →ab La producción a. Sb →ab no es del tipo 1, pues se sustituye S por vacío en el contexto a. . . b. Sin embargo si esta producción fuera S →ab o a. Sb →abb, entonces sería de tipo 1.

Ejemplo 6 ? La gramática G = ({S, A}, {a, b}, S, P) con

Ejemplo 6 ? La gramática G = ({S, A}, {a, b}, S, P) con las producciones P siguientes : S →ab. AS ab. A →baab S →a A →b No es del tipo 1, ya que la producción ab. A →baab no es sensible al contexto. Lo sería si fuese ab. A →abab.

Propiedades de las gramáticas de tipo 1 Propiedad de no decrecimiento Las cadenas que

Propiedades de las gramáticas de tipo 1 Propiedad de no decrecimiento Las cadenas que se obtienen en cualquier derivación de una gramática de tipo 1 son de longitud no decreciente, es decir : α→β ⇒ | β |≥| α | y que se puede enunciar como la longitud de la parte derecha de la producción es mayor o igual a la de la parte izquierda. La demostración es inmediata. Si se define una producción de un lenguaje tipo 1 como : αAβ→αγβ siendo γ ∈ (VN∪VT)+, es decir γ nunca puede ser la cadena vacía, lo que implica que | γ |≥ 1 y como | A | como mínimo vale 1, queda demostrada la propiedad : | α A β | ≤| α γ β |

Propiedad de sensibilidad al contexto También se puede demostrar que si todas las reglas

Propiedad de sensibilidad al contexto También se puede demostrar que si todas las reglas de una gramática cumplen la condición de no decrecimiento, se puede hallar una gramática equivalente con las producciones sensibles al contexto. Esta segunda propiedad combinada con la primera hace que se pueda intercambiar la característica de no decrecimiento con la definición. Ejemplo 7 Sea la gramática G = ({S, B, C}, {a, b, c}, S, P) donde P son las producciones : S →a. SBC S →a. BC CB →BC b. B →bb b. C →bc c. C →cc a. B →ab La gramática anterior no es de tipo 1 según la definición dada, ya que la regla CB → BC no respeta el contexto. Sin embargo puede apreciarse que todas las reglas de esta gramática son no decrecientes, por lo tanto es posible encontrar una gramática equivalente que genere el mismo lenguaje. Se puede sustituir la regla CB → BC por :

CB → XB XB → XY XY → BY BY → BC Puede observarse

CB → XB XB → XY XY → BY BY → BC Puede observarse que ambas gramáticas son equivalentes y que generan el lenguaje : L(G) = { an bn cn / n ≥ 1 }

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 2 Ø Las reglas de estas

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 2 Ø Las reglas de estas gramáticas se ajustan al siguiente esquema: A : : = v donde v ϵ ∑*, y A ϵ ∑N En concreto v puede ser λ. ØPara toda gramática de tipo 2 existe una gramática equivalente desprovista de reglas de la forma A : : = λ, que generará el mismo lenguaje que la de partida, excepto la palabra vacía. Si se le añade a la segunda gramática la regla S : : = λ, las gramáticas generarán el mismo lenguaje. ØPor lo tanto, se pueden definir las gramáticas de tipo 2 de una forma más restringida, en el que las reglas de producción tendrán la siguiente forma A : : = v donde v ϵ ∑+, y A ϵ ∑N. Además podrán contener la regla S : : = λ ØLos lenguajes generados por este tipo de gramáticas se denominan independientes de contexto, ya que la conversión de A en v puede realizarse independientemente del contexto en que aparezca A.

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 2 Ø La mayor parte de

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 2 Ø La mayor parte de los lenguajes de programación de ordenadores pueden describirse mediante gramáticas de este tipo. ØEjemplo : sea la gramática G = ({a, b}, {S}, S, { S : : = a. Sb | ab}). Es una gramática de tipo 2. La derivación de la palabra aaabbb será: S → a. Sb → aa. Sbb → aaabbb Puede verse que el lenguaje definido por esta gramática es {anbn | n=1, 2, . . . } ØUn mismo lenguaje puede generarse por muchas gramáticas diferentes. Sin embargo, una gramática determinada describe siempre un lenguaje único.

Ejemplo 1 La gramática G = ({S, A, B}, {a, b}, S, P) cuyas

Ejemplo 1 La gramática G = ({S, A, B}, {a, b}, S, P) cuyas producciones P se muestran a continuación es de tipo 2. S →a. B S →b. A A →a. S A →b. AA B →b B→b. S B →a. BB Ejemplo 2 La gramática G = (VN, VT, S, P) donde VN = { <número> , <dígito> }; VT = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; S = <número> y las reglas de producción P que se muestran a continuación es de tipo 2. <número> : : = <dígito> : : = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 3 Estas gramáticas se clasifican en

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 3 Estas gramáticas se clasifican en los dos grupos siguientes: • Gramáticas lineales por la izquierda, cuyas reglas de producción pueden tener una de las formas siguientes: A : : = a A : : = Va S : : = λ donde a ϵ ∑T , A, V ϵ ∑N, y S es el axioma de la gramática. • Gramáticas lineales por la derecha, cuyas reglas de producción tendrán la forma: A : : = a. V S : : = λ donde a ϵ ∑T , A, V ϵ ∑N, y S es el axioma de la gramática. • Los lenguajes representados por este tipo de gramáticas se denominan lenguajes regulares.

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 3 ØG 1 = ({ 0,

Tipos de Gramáticas Jerarquía de Chomsky Gramáticas tipo 3 ØG 1 = ({ 0, 1}, {A, B}, A, { A : : = B 1 | 1, B : : = A 0}) Gramática lineal por la izquierda que describe el lenguaje: L 1 = { 1, 10101, . . . } = {1(01)n | n = 0, 1, 2, . . . } ØG 2 = ({ 0, 1}, {A, B}, A, { A : : = 1 B | 1, B : : = 0 A}) Gramática lineal por la derecha que genera el mismo lenguaje que la gramática anterior.