La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Unidad 3 Analizador Sintáctico

Presentaciones similares


Presentación del tema: "Unidad 3 Analizador Sintáctico"— Transcripción de la presentación:

1 Unidad 3 Analizador Sintáctico

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

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

4 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 → X1, ... , 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.

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

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

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

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

9 Teoría de Gramáticas Formales
Fundamentos de la Teoría de Gramáticas Formales

10 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

11 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

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

13 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> <frase_nominal> ::= <grupo_nominal> <frase_nominal> ::= <grupo_nominal><calificativos> <grupo_nominal> ::= <nombre> <grupo_nominal> ::= <artículo><nombre> <calificativo> ::= <conjunción><oración> <calificativo> ::= <adjetivo> <predicado> ::= <verbo><complementos> <complementos> ::= <directo><indirecto><circunstancial> <complementos> ::= <directo>< circunstancial> <complementos> ::= <indirecto><circunstancial> <complementos> ::= <circunstancial> <circunstancial> ::=  <circunstancial> ::= <circunstancial><circunstancial> <directo> ::= <frase_nominal> <indirecto> ::= “a”<frase_nominal> <circunstancial> ::= <preposición><frase_nominal>

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

15 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 <nombre><predicado> → la niña <predicado> → la niña <verbo><complementos> → la niña pedía<complementos> → la niña pedía <directo><indirecto><circunstancial> → la niña pedía comida <indirecto><circunstancial>

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

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

18 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 = <expresión> → x = <sumando> + <expresión> → x = <factor> + <expresión> → x = <identificador> + <expresión> →x = y+ <expresión> →x = y+ <sumando> →x = y+ <factor> * <sumando> → x = y+ <número> * <sumando> → x = y+2* <sumando> → x = y+2* <factor> → x = y+2* <identificador> → x = y+2*z

19 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

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

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

22 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

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

24 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, NC2, 120 S = N → NC → NCC S = N → NC → NCC → NC2 S = N → NC → NCC → CCC → 1CC → 12C → 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

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

26 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

27 Tipos de Gramáticas Jerarquía de Chomsky
Chomsky clasificó las gramáticas en cuatro grandes grupos : G0, G1, G2 y G3. Cada uno de estos grupos incluye las gramáticas del siguiente, de acuerdo con el siguiente esquema: G3 ⊂ G2 ⊂ G1 ⊂ G0

28 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 = xAy 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 xAy ::= xvy, donde x, y, v ϵ ∑*, siendo A un símbolo no terminal.

29 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 ::= aABC | abC CB ::= BC bB ::= bb bC ::= b

30 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á vB 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 ::= aABC: • A = A, x= λ, y = λ. Si hacemos v = aABC, la regla se ajusta al formato considerado.

31 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(bB)CCBC → aaab(bC)CBC → aaab(bC)BC → aaab(bB)C → aaabb(bC) → aaabbb Se observa también que la gramática es compresora, debido a la presencia de la regla bC ::= b. Puede comprobarse que el lenguaje generado por esta gramática es {anbn|n=1,2,..}

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

33 S →000S111→000000S111111→⋅ ⋅ ⋅→0(3n − 1)0S11(3n − 1)→0(3n)1(3n)
Ejemplo 1 Sea la gramática definida por G1 = ({S}, {0,1}, S,P) donde P={(S → 000S111), (0S1→ 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 →000S111→000000S111111→⋅ ⋅ ⋅→0(3n − 1)0S11(3n − 1)→0(3n)1(3n) Por consiguiente el lenguaje que genera esta gramática es el conjunto infinito de instrucciones que se indica a continuación : L(G1) = {0(3n)1(3n)/n ≥ 1} Ejemplo 2 Si la 2ª producción de la gramática del ejemplo 1 fuese S →01 el lenguaje sería : L(G2) = {0(3n + 1)1(3n + 1)/n ≥ 0}

34 S →aSb →aaSbb →a3Sb3→⋅ ⋅ ⋅→a(n − 1)Sb(n − 1)→anbn
Ejemplo 3 Sea la gramática G3 = ({S}, {a,b}, S, P) donde P={(S → aSb), (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 →aSb →aaSbb →a3Sb3→⋅ ⋅ ⋅→a(n − 1)Sb(n − 1)→anbn El lenguaje generado : L(G3)={an bn/n ≥ 1}

35 Ejemplo 4 Dada la gramática G4 = ({S,A}, {a,b}, S, P) donde P={(S → abAS), (abA → 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 →abAS →baabS →baaba S →a S →abAS →abbS →abba S →abAS →abAabAS →⋅ ⋅ ⋅→(abA)nS → (abb)na S →abAS →abAabAS →⋅ ⋅ ⋅→(abA)nS → (baab)na S →abAS →abAabAS →abbbaaba S →abAS →abAabAS →baababba S →abAS →abAabAS →abAabAabAS →baababbbaaba L(G4) = {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.

36 L(G5) = {cadenas que tienen igual nº de a que de b}
Ejemplo 5 Sea la gramática G5 = ({S,A,B}, {a,b}, S, P) donde las producciones P son : S →aB A →bAA S →bA B →b A →a B→bS A →aS B →aBB Determinar el lenguaje que genera. Solución : Se generan algunas instrucciones. S →aB →ab S →bA →ba S →aB →abS →abbA →abba S →bA →bbAA →bbaa S →aB →abS →abaB →ababS →ababaB →ababab L(G5) = {cadenas que tienen igual nº de a que de b} La demostración no es inmediata. Demostrar, ver (Hopcroft y Ullman (1979), pp ).

37 L(G6) = {conjunto de los números naturales en base diez}.
Ejemplo 6 Sea la gramática G6 = (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> <número> <número> ::= <dígito> <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 >→ 7 < número >→ 72 < número >→< dígito >→ 7 < número >→< dígito >→ 0 < número >→< dígito >< número >→< dígito >< dígito >< número >→⋅ ⋅ ⋅→235 L(G6) = {conjunto de los números naturales en base diez}.

38 Ejemplo 7 Sea la gramática G7 = ({A,S}, {a,b}, S, P) donde las reglas de producción son : S →aS S →aA A →bA A →b Determinar el lenguaje que genera esta gramática. Solución : Se muestran algunas sentencias del lenguaje generado por la gramática. S →aS →aaA →aab S →aA →ab S →aS →aaS →aaaS →⋅ ⋅ ⋅→anS →anaA →an + 1b S →aA →abA →abbA →abbbA →⋅ ⋅ ⋅→abnA →abn + 1 El lenguaje generado se puede definir con la siguiente expresión regular L(G7) = a a* b b*

39 Tipos de Gramáticas Jerarquía de Chomsky
Gramáticas tipo 1 Las reglas de producción de esta gramática tienen la forma xAy ::= 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”.

40 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 los lenguajes dependientes de contexto serán también lenguajes sin restricciones. • Ejemplo1 : G = ({S, B, C}, {a, b, b}, S,P), donde P es: S ::= aSBc | aBC bB ::= bb bC ::= bc CB ::= BC cC ::= cc aB ::= ab

41 Ejemplo 2 La gramática G = ({S,A,B}, {a,b}, S, P) cuyas producciones P son: S →aB A →bAA S →bA B →b A →a B→bS A →aS B →aBB 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> <número> <número> ::= <dígito> <dígito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

42 Ejemplo 4 La gramática G = ({a,b}, {A,S}, S, P) y sus producciones P son: S →aS S →aA A →bA A →b Ejemplo 5 La gramática definida como G = ({S}, {a,b}, S, P) donde P son las siguientes producciones : ? S →aaaaSbbbb aSb →ab La producción aSb →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 aSb →abb, entonces sería de tipo 1.

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

44 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 β | ≤| α γ β |

45 Ejemplo 7 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 →aSBC S →aBC CB →BC bB →bb bC →bc cC →cc aB →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 :

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

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

48 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 ::= aSb | ab}). Es una gramática de tipo 2. La derivación de la palabra aaabbb será: S → aSb → aaSbb → 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.

49 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 →aB A →bAA S →bA B →b A →a B→bS A →aS B →aBB 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> <número> <número> ::= <dígito> <dígito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

50 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 ::= aV • Los lenguajes representados por este tipo de gramáticas se denominan lenguajes regulares.

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


Descargar ppt "Unidad 3 Analizador Sintáctico"

Presentaciones similares


Anuncios Google