Lenguajes y Compiladores Análisis Sintáctico Parte...
Transcript of Lenguajes y Compiladores Análisis Sintáctico Parte...
![Page 1: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/1.jpg)
Universidad Nacional San Luis GonzagaFacultad de Ing. De Sistemas
Universidad Nacional San Luis GonzagaFacultad de Ing. De Sistemas
Lenguajes y Compiladores
Análisis Sintáctico
Parte II
Teoría Lenguajes
1
Parte II
![Page 2: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/2.jpg)
Análisis AscendenteAnálisis Ascendente
� El análisis ascendente es conocido como análisis por desplazamiento y reducción.
� Intenta construir el árbol sintáctico comenzando por las hojas y avanzando hacia la raíz.
� Se puede considerar este proceso como una
Teoría Lenguajes 2
� Se puede considerar este proceso como una reducción de la cadena de entrada al símbolo inicial.
� Existen los siguientes métodos:� Sintáctico LR y sus variantes
� Sintáctico por Precedencia de operadores
![Page 3: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/3.jpg)
� Para la gramática:
S → aABe
A → Abc bB → d
La frase abbcde se puede reducir a S:
Análisis AscendenteAnálisis Ascendente
Teoría Lenguajes 3
La frase abbcde se puede reducir a S:
abbcde
aAbcde
aAde
aABe
S
![Page 4: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/4.jpg)
� Se usaron las siguientes producciones:
A → bA → Abc
B → dS → aABe
Análisis AscendenteAnálisis Ascendente
Teoría Lenguajes 4
S → aABeEstas reducciones trazan la siguiente derivación por la
derecha en orden inverso:
S → aABe → aAde → aAbcde → abbcde
![Page 5: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/5.jpg)
DefiniciónDefinición
� Si S →* αAw → αβw →* xw es a rightmost derivation (derivación más a la derecha)
Se dice que αAw, αβw y xw son formas sentenciales derecha.
• La forma sentencial derecha αβw puede ser reducida
Teoría Lenguajes 5
• La forma sentencial derecha αβw puede ser reducidacon la producción A → β a la forma sentencial αAw.
• La subcadena β es “a handle” de αβw (mango o mando de αβw).
• El análisis ascendente está basado en el uso del mango para encontrar la reducción a realizar
![Page 6: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/6.jpg)
EjemploEjemplo
� Para la gramática S → Ac Bd
A → aAb ab
B → aBbb abb
� Para la forma sentencial aabbbbd el único mango es
Teoría Lenguajes 6
� Para la forma sentencial aabbbbd el único mango es abb ya que usando B → abb, podemos reducirla a aBbbd que es una forma sentencial derecha. Observe que ab es el lado derecho de la producción A → abpero ab no es mango de aabbbbd ya que de aplicar
A → ab se tendría aAbbbd que no es una forma sentencial derecha.
![Page 7: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/7.jpg)
Ejemplo de reconocimientoEjemplo de reconocimiento
� Para la gramática( 1 ) E → E + E
( 2 ) E → E * E
( 3 ) E → (E)
( 4 ) E → id
Teoría Lenguajes 7
( 4 ) E → id
� Considere la cadena de entrada id + id * id
� Se muestra los pasos realizados por el analizador por desplazamiento y reducción.
� Note que siempre a la derecha del mango sólo hay símbolos terminales
![Page 8: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/8.jpg)
Ejemplo de reconocimientoEjemplo de reconocimiento
Forma sentencial derecha
Mango Producción dereducción
id + id * id id E → id
E + id * id id E → id
E + E * id id E → id
Teoría Lenguajes 8
E + E * id id E → id
E + E * E E * E E → E * E
E + E E + E E → E + E
E
![Page 9: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/9.jpg)
Análisis Ascendente por desplazamiento y reducción (AADR)Análisis Ascendente por desplazamiento y reducción (AADR)
� Hay que resolver dos problemas:� Determinar el mango
� Escoger la producción para la reducción caso exista más de una.
� Para el análisis ascendente por desplazamiento y
Teoría Lenguajes 9
� Para el análisis ascendente por desplazamiento y reducción se usa una pila para guardar los símbolos gramaticales, un buffer de entrada para la cadena a analizar.
� El símbolo $ sirve para marcar el fondo de la pila y el final de la cadena de entrada.
![Page 10: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/10.jpg)
Pila Entrada Acción
1. $ id + id * id$ desplazar
2. $id + id * id$ reducir por E → id
3. $E + id * id$ desplazar
4. $E + id * id$ desplazar
5. $E + id * id$ reducir por E → id
AADRAADR
Teoría Lenguajes 10
5. $E + id * id$ reducir por E → id
6. $E + E * id$ desplazar
7. $E + E * id$ desplazar
8. $E + E * id $ reducir por E → id
9. $E + E * E $ reducir por E → E * E
10. $E + E $ reducir por E → E + E
11. $E $ aceptar
![Page 11: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/11.jpg)
� Aunque las acciones básicas realizadas por el AADR son el desplazamiento y la reducción, en realidad existen cuatro acciones:
• Desplazar: el símbolo de la entrada se empila, se toma otro símbolo de entrada
• Reducir: Desempila el tope y empila el lado
AADRAADR
Teoría Lenguajes 11
• Reducir: Desempila el tope y empila el lado izquierdo de la producción que se está reduciendo
• Aceptar: fin del análisis sintáctico con éxito ($ en la entrada y $S en el tope de la pila)
• Error: hay un error de sintaxis y se llama a la rutina de recuperación de errores
![Page 12: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/12.jpg)
� Para usar el método de desplazamiento y reducción es necesario que la gramática no sea ambigua.
� EjemploProp → if Expr then Prop
if Expr then Prop else Prop
AADRAADR
Teoría Lenguajes 12
if Expr then Prop else Prop
otro
� Si tenemos:Pila: ... if Expr then Prop
Entrada: else ...$
![Page 13: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/13.jpg)
� Si no es posible escoger de manera única la producción para la reducción esa gramática no es LR(1).
� Ejemplo:1 prop → id ( lista-param)
AADRAADR
Teoría Lenguajes 13
1 prop → id ( lista-param)
2 prop → exp := exp
3 lista-param → lista-param, paramparam4 param → id
5 exp → id ( lista-exp) id
6 lista-exp → lista-exp, exp exp
![Page 14: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/14.jpg)
AADRAADR
� Si tenemos:Pila: ... id1(id
Entrada: ,id) ...$
� ¿Cuál es la reducción a aplicar?
� Si id1 es un nombre de procedimiento entonces
Teoría Lenguajes 14
� Si id1 es un nombre de procedimiento entonces usaremos la producción 4, si id1 es un arreglo usaremos la producción 5.
� Una solución es que el léxico determine si el token es un nombre de procedimiento para lo cual tendría que consultar la tabla de símbolos pero ayudaría al sintáctico.
![Page 15: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/15.jpg)
Análisis Sintáctico LRAnálisis Sintáctico LR
Programa para
a + b $
Salida
Entrada
Pila
Teoría Lenguajes 15
Programa paraParser LR
Acción$
Z
Y
XSalidaPila
ir-a
![Page 16: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/16.jpg)
Análisis Sintáctico LRAnálisis Sintáctico LR
� El analizador LR consta de:
� Una entrada
� Una pila
� Un programa conductor
Teoría Lenguajes 16
Un programa conductor
� Una tabla de análisis sintáctico dividida en dos partes:
»Acción: indica la acción del analizador.
»Ir - a: indica las transiciones entre estados.
![Page 17: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/17.jpg)
Codificación de la tabla LRCodificación de la tabla LR
� Acción� di indica desplazar, empilar la entrada y el estado i
� rj indica reducir por la producción número j
Teoría Lenguajes 17
� acep indica aceptar
� un blanco indica error de sintaxis
� Ir-a� Indica el estado a empilar junto a un no terminal
![Page 18: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/18.jpg)
Uso de la tabla LRUso de la tabla LR
� Normalmente se usa la sección Acción de la tabla para realizar un desplazamiento o una reducción� Desplazamiento: empilar entrada y estado indicado
� Cuando se reduce se usa la sección Ir-a de la tabla:� Desempilar hasta encontrar, en la pila, el símbolo más a
Teoría Lenguajes 18
� Desempilar hasta encontrar, en la pila, el símbolo más a la izquierda de la producción usada
� Accesar la tabla con la combinación
(tope expuesto, lado izquierdo de la producción usada)
en la sección Ir-a y empilar el lado izquierdo de la producción y el estado hallado en la tabla
![Page 19: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/19.jpg)
Ejemplo de Análisis Sintáctico LREjemplo de Análisis Sintáctico LR
� Para la gramática( 1 ) E → E + T
( 2 ) E → T
( 3) T → T * F
( 4) T → F
Teoría Lenguajes 19
( 4) T → F
( 5 ) F → (E)
( 6 ) F → id
� Analizar la frase id + id * id
![Page 20: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/20.jpg)
Ejemplo de Tabla LREjemplo de Tabla LR
Acción ir-aEstado
id + * ( ) $ E T F
0 d5 d4 1 2 31 d6 acep2 r2 d7 r2 r23 r4 r4 r4 r44 d5 d4 8 2 3
Teoría Lenguajes 20
4 d5 d4 8 2 35 r6 r6 r6 r66 d5 d4 9 37 d5 d4 108 d6 d119 r1 d7 r1 r110 r3 r3 r3 r3
11 r5 r5 r5 r5
![Page 21: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/21.jpg)
Ejemplo de análisis LREjemplo de análisis LR
Pila Entrada Acción
(1) 0 id * id + id $ desplazar(2) 0 id 5 * id + id $ reducir por F → id(3) 0 F 3 * id + id $ reducir por T → F
Teoría Lenguajes 21
(3) 0 F 3 * id + id $ reducir por T → F(4) 0 T 2 * id + id $ desplazar(5) 0 T 2* 7 id + id $ desplazar(6) 0 T 2* 7 id 5 + id $ reducir por F → id(7) 0 T 2* 7 F 10 + id $ reducir por T → T * F
![Page 22: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/22.jpg)
Ejemplo de análisis LREjemplo de análisis LR
Pila Entrada Acción
(8) 0 T 2 + id $ reducir por E → T(9) 0 E 1 + id $ desplazar(10) 0 E 1 + 6 id $ desplazar(11) 0 E 1 + 6 id 5 $ reducir por F → id
Teoría Lenguajes 22
(11) 0 E 1 + 6 id 5 $ reducir por F → id(12) 0 E 1 + 6 F 3 $ reducir por T → F(13) 0 E 1 + 6 T 9 $ E → E + T(14) 0 E 1 $ aceptar
![Page 23: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/23.jpg)
Ejemplo de análisis LREjemplo de análisis LR
� Pasos del analizador:� Se comienza con 0 en la pila e id en la entrada
Accion[0,id] = d5: empilar id y 5
� Acción [5,+] = r6: se usará la producción F → id para reducir,
Teoría Lenguajes 23
reducir,
desempilar hasta encontrar id
el tope expuesto es 0 y el no terminal del lado izquierdo de la producción es F
Ir-a [0,F] = 3
empilar F y 3
![Page 24: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/24.jpg)
Gramática de operadoresGramática de operadores
� Son gramáticas que cumplen:
� Ningún lado derecho de la producción es ε� No tiene dos no terminales adyacentes
� Las gramáticas de operadores permiten la construcción manual de analizadores por
Teoría Lenguajes 24
construcción manual de analizadores por desplazamiento y reducción
� Estas gramáticas permiten implementar el análisis sintáctico por precedencia de operadores.
� Tiene restricciones que hace que su uso sea limitado para un tipo especial de gramáticas.
![Page 25: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/25.jpg)
Ejemplos de gramáticas de operadoresEjemplos de gramáticas de operadores
� La siguiente gramática
E → EAE (E) -E idA → + - * / ↑↑↑↑No es una gramática de operadores, pero se puede
Teoría Lenguajes 25
No es una gramática de operadores, pero se puede transformar fácilmente a
E → E + EE - EE * EE / EE ↑↑↑↑ E (E) -E id
Que sí es una gramática de operadores y permite aplicar el método de precedencia de operadores.
![Page 26: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/26.jpg)
Análisis Sintáctico por Precedencia de Operadores (ASPO)Análisis Sintáctico por Precedencia de Operadores (ASPO)
� Se deben definir tres relaciones de precedencia
disjuntas <. , >. e =. entre algunos pares de terminales.
� Estas reglas de precedencia guían la selección de mangos con el siguiente significado
Teoría Lenguajes 26
mangos con el siguiente significado
Relación Significado
a <. b a cede precedencia a b
a =. b a tiene la misma precedencia que b
a .> b a tiene más precedencia que b
![Page 27: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/27.jpg)
ASPOASPO
� Para determinar la precedencia de operadores se puede:� Hacer un estudio intuitivo basado en el concepto de precedencia de operadores y determinar por ejemplo
que + <. *. Esto resolverá las ambigüedades de la
Teoría Lenguajes 27
que + <. *. Esto resolverá las ambigüedades de la última gramática propuesta.
� Construir una gramática no ambigua que refleje la precedencia de operadores como la gramática usada en el ejemplo de análisis LR.
![Page 28: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/28.jpg)
� Ejemplo de análisis por precedencia de operadores
� Relación de precedencia de operadores
id + * $
id .> .> .>
ASPOASPO
Teoría Lenguajes 28
.> .> .>+ <. .> <. .>* <. .> .> .>$ <. <. <.
![Page 29: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/29.jpg)
� Dada la frase: id + id * id
� Se insertan las precedencias considerando que la frase comienza y termina con $.
� Para insertar la precedencia entre dos terminales se busca el operador de precedencia en la matriz . Para
ASPOASPO
Teoría Lenguajes 29
busca el operador de precedencia en la matriz . Para el primer caso caso se busca entre la fila de $ y la
columna de id (resulta <. ).� La cadena con las relaciones de precedencia
resultante es: $ <. id >. + <. id >. * <. id >. $
![Page 30: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/30.jpg)
� Para encontrar el mango se usa el siguiente algoritmo:
� Buscar desde el extremo izquierdo el primer .>
� Luego buscar hacia atrás el primer <. Saltando los =.
ASPOASPO
Teoría Lenguajes 30
� Luego buscar hacia atrás el primer <. Saltando los =.
� El mango es todo lo que está entre <. y .>� Para la frase mostrada el primer mango sería id
entonces se reduce a E obteniendo la forma sentencial E + id * id. Luego de reducir todos los id se obtiene E + E * E.
![Page 31: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/31.jpg)
� Eliminando los no terminales se tiene: $+*$
� Insertando las relaciones de precedencia se
obtiene: $ <. + <. * .>$� El mango es E * E que se reduce a E.
<. .>
ASPOASPO
Teoría Lenguajes 31
� Quedando $+$ ($E + E$) o $ <. +.> $ � El proceso se repite hasta tener $$ en la frase (sin
considerar los no terminales).
![Page 32: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/32.jpg)
� En una implementación no es necesario:
� Insertar las precedencias en la frase
� Examinar toda la frase para determinar el mango.
� Se debe usar una pila para guardar los elementos de la entrada ya examinados.
ASPOASPO
Teoría Lenguajes 32
de la entrada ya examinados.
� Se usa la matriz de precedencia de operadores para determinar el mango
![Page 33: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/33.jpg)
Algoritmo para ASPOAlgoritmo para ASPO
� Si se cumple <. o =. entre el tope de la pila y el elemento de la entrada se realiza un desplazamiento (empilar entrada y avanza la entrada).
� Si se cumple .> ya se encontró el mango y hay que
reducir (desempilar hasta encontrar la relación <.)
Teoría Lenguajes 33
reducir (desempilar hasta encontrar la relación <.)� Si no cumple ninguna relación de precedencia se ha
detectado un error de sintaxis.
![Page 34: Lenguajes y Compiladores Análisis Sintáctico Parte IIeducaunica.galeon.com/cursos/silabo_diapositiva/SintacII.pdf · Universidad Nacional San Luis Gonzaga Facultad de Ing. De Sistemas](https://reader031.fdocuments.es/reader031/viewer/2022020303/5b1690887f8b9a726d8cac1b/html5/thumbnails/34.jpg)
Algoritmo para ASPOAlgoritmo para ASPO
repetirsi Tope(Pila) <. Entrada o Tope(Pila) =. Entrada entonces Empilar(Entrada, Pila)
Lexico(Entrada)sino si Tope(Pila) >. Entrada
entonces repetir
Teoría Lenguajes 34
Desempilar(X, Pila)hasta Tope(Pila) <. Xfrepetir
fsifsi
hasta Tope(Pila) = $ y Entrada = $frepetir