análisis sintáctico - ulpgc.es · 4 1. introducción construcción del analizador sintáctico...
TRANSCRIPT
![Page 1: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/1.jpg)
1
Análisis sintáctico
![Page 2: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/2.jpg)
2
Análisis sintáctico
1. Introducción2. Análisis descendente (top-down)
2.1 Análisis con backtracking2.2 Análisis predictivo
2.2.1 Método recursivo2.2.2 Método iterativo
3. Análisis ascendente3.1 LR parsing (bottom-up)
3.1.1 SLR3.1.2 LR canónico3.1.3 LALR
3.2 YACC (parser generator)
![Page 3: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/3.jpg)
3
1. Introducción
Objetivo del análisis sintáctico:
Conocer si la sentencia que se analiza pertenece, o no, al lenguaje (no se tiene en cuenta el aspecto semántico).
Relación entre análisis léxico y sintáctico
ProgramaFuente
AnalizadorLéxico
AnalizadorSintáctico
(1)
(2)
(1) ¿ next token ?
(2) token
![Page 4: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/4.jpg)
4
1. Introducción
Construcción del analizador sintáctico (parser)
Lenguaje
By hand
Tool
Gramática PARSER
![Page 5: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/5.jpg)
5
1. Gramáticas y tipos de análisis
Nos centraremos en las gramáticas libres de contexto:
(context-free grammars) (tipo 2 según Chomsky)
Métodos de análisis sintáctico:
A) Reconocedores universalesB) Reconocedores “top-down”C) Reconocedores “bottom-up”
![Page 6: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/6.jpg)
6
1. Métodos de reconocimiento
A) Universales
Ventaja: son válidos para cualquier gramática libre de contexto.
Desventaja: su excesiva generalidad no permite que los reconocedores estén muy optimizados (son muy lentos)
![Page 7: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/7.jpg)
7
1. Métodos de reconocimiento
B) Métodos top-down
Ventaja: reconocedores muy rápidos
Desventaja: válidos para gramáticas LL(k)
C) Métodos bottom-up
Desventaja: los reconocedores son rápidos (pero no tanto como los reconocedores top-down)
Ventaja: válidos para gramáticas SLR(k), LRc(k), LALR(k), que son un superconjunto de las gramáticas LL(k)
![Page 8: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/8.jpg)
8
2. Análisis descendente (top-down)
Fundamento básico:
Generación de la sentencia mediante laleft-most derivation
EXPR EXPR ‘+’ TERM | TERMTERM TERM ‘*’ FACT | FACTFACT id | cte | ‘(‘ EXPR ‘)’
![Page 9: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/9.jpg)
9
2. Análisis descendente (top-down)
EXPR
a + b * ( c + 2 )
![Page 10: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/10.jpg)
10
2.1 Análisis con backtracking
EXPR
TERM
EXPR
TERMEXPR
TERM+
+
a + b * c + 2
FACT
FACT
( )id id
NO HAY MATCH-ING
![Page 11: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/11.jpg)
11
2.1 Análisis con backtracking
Ventajas
Política sencilla de prueba y error.
Desventajas
Para gramáticas de un tamaño normal no resulta aplicable debido al excesivo tiempo de computación.
La aplicación del método no garantiza que la gramática no sea ambigua.
![Page 12: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/12.jpg)
12
2.2 Análisis predictivo
EXPR
¿ podemos decidir en función de un símbolo de lookahead ?
a + b * ( c + 2 )
símbolo de lookahead
![Page 13: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/13.jpg)
13
Concepto de PRIMEROS
Notación PRIMEROS (símbolo/cadena) = P(símbolo/cadena)
P(a) = { a } a Є Vt
P(N) = P(α1) U P(α2) U P(αn) N Є VnN α1 | α2 | … | αn
Si ε Є P(αi) entonces hay que añadir los SIGUIENTES(N) al conjunto de P(N)
![Page 14: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/14.jpg)
14
Condiciones necesaria y suficiente para predecir
N Є VnN α1 | α2 | … | αn
1. P(αi) ∩ P(αj) = Ø Para todo i ≠ j
2. Si ε Є P(αi) debe cumplirse que:
S(N) ∩ P(αj) = Ø Para todo j ≠ iS(N) = SIGUIENTES(N)
![Page 15: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/15.jpg)
15
Ejemplo
EXPR EXPR ‘+’ TERM | TERMTERM TERM ‘*’ FACT | FACTFACT id | cte | ‘(‘ EXPR ‘)’
P(EXPR)= P(EXPR) U P(TERM) = { id , cte , ( }P(TERM)= P(TERM) U P(FACT) = { id , cte , ( }P(FACT)= { id , cte , ( }
No podemos realizar análisis sintáctico mediante el método de descenso (top-down) predictivo.
![Page 16: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/16.jpg)
16
Recursividad por la izquierda
Toda gramática recursiva por la izquierda no es válida para reconocimiento por descenso predictivo.
N N α | β Primer símbolo (β) ≠ N
P(N)= P(N) U P(β) P(Nα) ∩ P(β) ≠ Ø
Por tanto, no podemos discernir entre las dos opciones de la regla N la hora de realizar un descenso predictivo.
![Page 17: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/17.jpg)
17
Eliminación de la recursividad por la izquierda
L L α1 | L α2 | … | L αn | β1 | β2 | … | βp
Podemos generar las mismas cadenas de la siguiente forma:
L C RC β1 | β2 | … | βpR α1 R | α2 R | … | αn R | ε
![Page 18: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/18.jpg)
18
Ejemplo
G: EXPR EXPR ‘+’ TERM | TERMTERM TERM ‘*’ FACT | FACTFACT id | cte | ‘(‘ EXPR ‘)’
G’: EXPR TERM REXPRREXPR ‘+’ TERM REXPR | εTERM FACT RTERMRTERM ‘*’ FACT RTERM | εFACT id | cte | ‘(‘ EXPR ‘)’
![Page 19: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/19.jpg)
19
Calculamos PRIMEROS para G’
P(EXPR) = P(TERM) = { id , cte , ( }
P(REXPR) = { + , ε }Añadimos los S(REXPR) = { $ , ) }
P(TERM) = P(FACT) = { id , cte , ( }
P(RTERM) = { * , ε }Añadimos los S(RTERM) = { + , $ , ) }
P(FACT) = { id , cte , ( }
Por tanto, podemos realizar un reconocedor descendente predictivo para la gramática G’.
![Page 20: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/20.jpg)
20
Factorización
EXPR TERM ‘+’ EXPR | TERMTERM FACTOR ‘*’ TERM | FACTORFACTOR id | cte | ‘(‘ EXPR ‘)’
En este caso tenemos una gramática para expresiones que es recursiva por la derecha.
Sin embargo, no podemos utilizar un reconocedor descendente predictivo porque existen reglas cuyas opciones tienen el mismo encabezado.
SOLUCIÓN Factorizar dichas reglas
![Page 21: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/21.jpg)
21
Factorización
EXPR TERM REXPRREXPR ‘+’ EXPR | εTERM FACTOR RTERMRTERM ‘*’ TERM | εFACTOR id | cte | ‘(‘ EXPR ‘)’
Si realizamos el cálculo de los PRIMEROS para esta gramática modificada tenemos lo siguiente:
![Page 22: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/22.jpg)
22
Cálculo de PRIMEROS
P(EXPR) = P(TERM) = { id , cte , ( }
P(REXPR) = { + , ε }Añadimos los S(REXPR) = { ) , $ }
P(TERM) = P(FACTOR) = { id , cte , ( }
P(RTERM) = { * , ε }Añadimos los S(RTERM) = { + , ) , $ }
P(FACTOR) = { id , cte , ( }
Luego, si podemos utilizar un reconocedor descendente predictivo
![Page 23: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/23.jpg)
23
Implementación
Reconocedores descendentes predictivos
2.2.1 Implementación recursiva2.2.1 Implementación iterativa
![Page 24: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/24.jpg)
24
2.2.1 Implementación recursiva
PROCEDIMIENTO DE CONSTRUCCIÓN
1. Para cada regla (símbolo no terminal) debe construirse un procedimiento sin parámetros cuyo nombre será el del propio símbolo no terminal.
2. En función de los PRIMEROS, cada procedimiento implementa las diversas alternativas de su regla
3. Cada alternativa de una regla se implementa de la siguiente forma:
![Page 25: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/25.jpg)
25
2.2.1 Implementación recursiva
3.1 Un símbolo no terminal se implementa mediante una llamada al procedimiento de dicho símbolo.
3.2 Un símbolo terminal se implementa comprobando que el símbolo de lookahead actual se corresponde con el símbolo terminal. Caso de ser cierto, el analizador léxico debe localizar el siguiente símbolo de lookahead. En caso contrario, detenemos el proceso de análisis porque existe un error sintáctico.
![Page 26: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/26.jpg)
26
Ejemplo
Utilizaremos como ejemplo la gramática de expresiones que hemos factorizado anteriormente.
EXPR TERM REXPRREXPR ‘+’ EXPR | εTERM FACTOR RTERMRTERM ‘*’ TERM | εFACTOR id | cte | ‘(‘ EXPR ‘)’
Construyamos los procedimientos para los dos primeros símbolos no terminales: EXPR y REXPR
![Page 27: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/27.jpg)
27
Procedimiento EXPR (versión 1)
EXPR ( ){ TERM ( );
REXPR ( );}
Esta primera versión no utiliza los PRIMEROS puesto que no existen diversas alternativas en la regla.
Sin embargo, se puede realizar una detección precoz de errores si añadimos al control de la única alternativa de esta regla el conocimiento de los PRIMEROS:
![Page 28: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/28.jpg)
28
Procedimiento EXPR (versión 2)
EXPR ( ){
if ( lookahead = { id , cte , ( } ){ TERM ( );
REXPR ( );}else
error ( );}
![Page 29: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/29.jpg)
29
Procedimiento REXPR
REXPR ( ){
if (lookahead = { + } ) / alternativa 1{ lookahead = yylex ( ); / matching del símbolo ‘+’
EXPR ( );return ( );
}if (lookahead = { ) , $ } ) / alternativa 2
return ( );
error ( ); / ninguna alternativa es válida}
![Page 30: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/30.jpg)
30
2.2.2 Implementación iterativa
Se trata de construir un programa que desarrolle el proceso de análisis sintáctico descendente predictivobasándose en una tabla de reconocimiento.
El programa lleva a cabo el reconocimiento de la misma forma que lo hemos desarrollado manualmente.
La tabla para la gramática utilizada en la implementación recursiva es la siguiente:
![Page 31: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/31.jpg)
31
2.2.2 Implementación iterativa
( EXPR )idcteFACTOR
εε* TERMεRTERM
FACTOR RTERM
FACTOR RTERM
FACTOR RTERM
TERM
εε+ EXPRREXPR
TERM REXPR
TERM REXPR
TERM REXPR
EXPR
$)(*+idcte
![Page 32: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/32.jpg)
32
Gramáticas LL(k)
Toda gramática a la que se puede aplicar un reconocedor descendente predictivo pertenece a un conjunto de gramáticas denominado LL(k), siendo K el número de símbolos de lookaheadque se utilizan.
El conjunto LL(k) es un subconjunto del total de gramáticas libres de contexto. Por tanto, existen muchas gramáticas libres de contexto que no pueden ser analizadas mediante reconocedores descendentes predictivos.
![Page 33: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/33.jpg)
33
3. ANÁLISIS ASCENDENTE
3.1 LR parsing (bottom-up)3.1.1 SLR3.1.2 LR canónico3.1.3 LALR
3.2 YACC (parser generator)
![Page 34: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/34.jpg)
34
3.1 LR parsing
FUNDAMENTOS
1. Bottom-Up (frente a top-down)
2. Utiliza la derivación más a la derecha(right-most derivation) (frente a left-most derivation)
Siglas LR:L Left to right scanningR Right-most derivation
![Page 35: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/35.jpg)
35
Ejemplo
S a A B eA A b c | bB d
Usemos derivaciones right-most:
S aABe aAde aAbcde abbcde
![Page 36: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/36.jpg)
36
¿ Por qué no se elige derivación a izquierdas ?
S A B CA M NB O PC Q RM m ¿Qué sucede al realizar el análisis bottom-up ?N nO oP pQ qR r
S ABC MNBC mNBC mnBC mnOPC mnoPC mnopC
mnopQR mnopqR mnopqr
![Page 37: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/37.jpg)
37
Implementación basada en una PILA
S a A B eA A b c | bB d
S aABe aAde aAbcde abbcde
PILA + acciones SHIFT + acciones REDUCE
![Page 38: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/38.jpg)
38
PILA + SHIFT + REDUCE
PILA CADENA ACCIONESabbcde$ shift
a bbcde$ shiftab bcde$ reduce A baA bcde$ shiftaAb cde$ shiftaAbc de$ reduce A AbcaA de$ shiftaAd e$ reduce B daAB e$ shiftaABe $ reduce S aABeS $ ACEPTADA
![Page 39: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/39.jpg)
39
Modelo general de reconocedor LR
...t1 t2 t3 t i tn $
C A D E N A
S 0
V m
S m
V m - 1
S m -1
...V 1
PI L A
S i E sta d o s d e l reco n o ced o rV i S ím b o lo d e l v o ca b u la r io (term in a l o n o term in a l)
R eco n o ced o r L R
a cc io n es g o toTA B L A(g en era d a a p a rtir d e lag ra m á t ica )
...
SA L ID A(có d ig o ej ecu ta do a lred uc ir la s reg la s )
![Page 40: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/40.jpg)
40
Ejemplo
Dada la siguiente gramática para expresiones:
1) E E ‘+’ T2) E T3) T T ‘*’ F4) T F5) F ‘(‘ E ‘)’6) F id
La tabla de reconocimiento LR es la siguiente:
![Page 41: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/41.jpg)
41
Tabla de reconocimiento
R3R3R3R310
R5R5R5R511
R1R1S7R19
S11S68
10S4S57
39S4S56
R6R6R6R65
328S4S54
R4R4R4R43
R2R2S7R22
O.K.S61
321S4S50
FTE$)(*+id
GOTOACCIONESEstado
![Page 42: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/42.jpg)
42
Construcción de las tablas
Las tablas que utiliza un reconocedor LR se generan a partir del correspondiente autómata LR.
Veamos el autómata para la siguiente gramática:
S a A B eA A b c | bB d
![Page 43: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/43.jpg)
43
Autómata SLR (Simple LR)
S’ --> ^ S
S --> ^ aABe
S’ --> S ^
S --> a^ABe
A --> ^Abc A --> ^b
S --> aA^Be A --> A^bc
B --> ^d
S0
S1
S2
S3
SS1
a S2
A S3
b S4
B
b
d
S5
S6
S7
A --> b^
S --> aAB^e
A --> Ab^c
B --> d^
S --> aABe^
A --> Abc^
S4
S5
S6
S7
S8
S9
S8
S9
e
c
![Page 44: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/44.jpg)
44
Autómata: reconocedor de prefijos válidos
S a A B eA A b c | bB d
S ] aABe ] aAd ] e aAbc ] de ab ] bcde
Prefijos = { S , a , aA , aAB , aABe , aAd , aAb, aAbc , ab }
![Page 45: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/45.jpg)
45
Construcción de la tabla de reconocimiento
Necesitamos conocer:
1. El autómata correspondiente
2. Los SIGUIENTES de cada símbolo no-terminal
En el ejemplo que nos ocupa, los SIGUIENTES son:
SIGUIENTES (S) = { $ }SIGUIENTES (A) = { d , b }SIGUIENTES (B) = { e }
![Page 46: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/46.jpg)
46
Tabla de reconocimiento
R2R2S9
R1S8
R4S7
S9S6
S8S5
R3R3S4
5S7S6S3
3S4S2
O.K.S11S2S0
BAS$edcba
GotoAccionesEstado
![Page 47: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/47.jpg)
47
Ejercicio
1) E E ‘+’ T2) E T3) T T ‘*’ F4) T F5) F ‘(‘ E ‘)’6) F id
a) Obtener el autómata SLR y la tabla de reconocimientob) Reconocer la cadena: id + id * ( id + id )
![Page 48: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/48.jpg)
48
Ejercicio: estados del autómata SLR
S0:E’ ^ E S4:F ( ^ E ) S7:T T * ^ FE ^ E + T E ^ E + T F ^ (E)E ^ T E ^ T F ^ idT ^ T * F T ^ T * FT ^ F T ^ F S8:F ( E ^ )F ^ (E) F ^ (E) E E ^ + T F ^ id F ^ id
S9:E E + T ^S1:E’ E ^ S5:F id ^ T T ^ * F
E E ^ + TS6:E E + ^ T S10: T T * F ^
S2:E T ^ T ^ T * FT T ^ * F T ^ F S11: F (E) ^
F ^ (E)S3:T F ^ F ^ id
![Page 49: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/49.jpg)
49
Ejercicio: transiciones del autómata SLR
S10S3S3S3F
S9S2S2T
S8S1E
S11)
S4S4S4S4(
S7S7*
S6S6+
S5S5S5S5id
S11S10S9S8S7S6S5S4S3S2S1S0
![Page 50: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/50.jpg)
50
Ejercicio: tabla de reconocimiento SLR
R3R3R3R310
R5R5R5R511
R1R1S7R19
S11S68
10S4S57
39S4S56
R6R6R6R65
328S4S54
R4R4R4R43
R2R2S7R22
O.K.S61
321S4S50
FTE$)(*+id
GOTOACCIONESEstado
![Page 51: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/51.jpg)
51
Ejercicio: reconocer la cadena id + id * ( id + id )
Se deja como ejercicio
![Page 52: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/52.jpg)
52
3. ANÁLISIS ASCENDENTE
3.1 LR parsing (bottom-up)3.1.1 SLR3.1.2 LR canónico3.1.3 LALR
3.2 YACC (parser generator)
![Page 53: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/53.jpg)
53
3.1.1 Límites de los reconocedores SLR
Supongamos la siguiente gramática:
1) S L = R2) S R3) L * R4) L id5) R L
¿ Es reconocible mediante reconocimiento SLR ?
![Page 54: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/54.jpg)
54
Estados del autómata SLR
S0: S’ ^ S S5: L id ^S ^ L = RS ^ R S6: S L = ^ RL ^ * R R ^ LL ^ id L ^ * RR ^ L L ^ id
S1: S’ S ^ S7: L * R ^
S2: S L ^ = R S8: R L ^R L ^
S9: S L = R ^ S3: S R ^
S4: L * ^ RR ^ LL ^ * RL ^ id
![Page 55: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/55.jpg)
55
Transiciones del autómata SLR
S9S7S3R
S8S8S2L
S1S
S4S4S4*
S6=
S5S5S5id
S9S8S7S6S5S4S3S2S1S0
![Page 56: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/56.jpg)
56
Tabla de reconocimiento SLR
R1S9
R5R5S8
R3R3S7
98S4S5S6
R4R4S5
78S4S5S4
R2S3
R5S6 / R5S2
O.K.S1
321S4S5S0
RLS$*=id
GOTOACCIONESESTADO
![Page 57: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/57.jpg)
57
Conclusiones
Existe una casilla de la tabla de reconocimiento (S2,=) que tiene 2 acciones:
S6 : shift 6
R5 : reduce 5
Por tanto, existe un conflicto SHIFT-REDUCE y la gramática no se puede reconocer mediante un reconocedor SLR.
![Page 58: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/58.jpg)
58
Tipos de conflictos y ambigüedad
Los conflictos que pueden darse en los reconocedores ascendentesson los siguientes:
1. SHITF-REDUCE2. REDUCE-REDUCE
Toda gramática ambigua genera uno o varios conflictos en los reconocedores ascendentes.
La aparición de conflictos no significa necesariamente que la gramática sea ambigua (de hecho, la gramática del ejemplo anterior no es ambigua y había un conflicto) .
![Page 59: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/59.jpg)
59
Gramática no ambigua que genera conflictos
1) S L = R2) S R3) L * R4) L id5) R L
¿ Porqué esta gramática no ambigua genera conflictos ?
El reconocedor SLR no contiene la suficiente información sobre la gramática. Se hace necesario utilizar reconocedores LR más precisos.
![Page 60: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/60.jpg)
60
3.1.2 Reconocedores LR canónicos
S0:S’ ^ S { $ } S4: L * ^ R { = }S ^ L = R { $ } R ^ L { = }S ^ R { $ } L ^ * R { = }L ^ * R { = } L ^ id { = }L ^ id { = }R ^ L { $ } S5: L id ^ { = }
S1:S’ S ^ { $ } S6: S L = ^ R { $ }R ^ L { $ }
S2:S L ^ = R { $ } L ^ * R { $ }R L ^ { $ } L ^ id { $ }
S3:S R ^ { $ } S7: L * R ^ { = }
![Page 61: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/61.jpg)
61
3.1.2 Reconocedores LR canónicos
S8: R L ^ { = }
S9: S L = R ^ { $ }
S10: R L ^ { $ }
S11: L * ^ R { $ }R ^ L { $ }L ^ * R { $ }L ^ id { $ }
S12: L id ^ { $ }
S13: L * R ^ { $ }
![Page 62: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/62.jpg)
62
Tabla de transiciones
S13S9S7S3R
S10S10S8S2L
S1S
S11S11S4S4*
S6=
S12S12S5S5id
S13S12S11S10S9S8S7S6S5S4S3S2S1S0
![Page 63: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/63.jpg)
63
Tabla de reconocimiento LR canónico
13973R
101082L
1SGOTO
R3R4R5R1R2R5O.K.$
S11S11S4S4*
R5R3R4S6=
S12S12S5S5idACCIONES
S13S12S11S10S9S8S7S6S5S4S3S2S1S0Estados
![Page 64: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/64.jpg)
64
Conclusiones
No aparece ningún conflicto.
Por tanto, no era un problema de ambigüedad de la gramática, sino que el reconocedor SLR no era tan preciso como el reconocedor LR canónico.
En particular, la reducción de una regla N …. se realiza ante todos los SIGUIENTES(N) en SLR.
Por el contrario, la reducción de una regla N …. se realiza ante un subconjunto de los SIGUIENTES(N) en el reconocedor LR canónico.
![Page 65: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/65.jpg)
65
Ejercicio
Dada la siguiente gramática:
1. S CC2. C cC3. C d
Se pide:
1. Autómata de reconocimiento LR canónico
2. Tabla de reconocimiento correspondiente
![Page 66: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/66.jpg)
66
Estados del autómata LR canónico
S0:S’ ^ S { $ } S4: C d ^ { c , d }S ^ CC { $ }C ^ cC { c , d } S5: S CC ^ { $ }C ^ d { c , d }
S6: C c ^ C { $ }S1:S’ S ^ { $ } C ^ cC { $ }
C ^ d { $ }S2:S C ^ C { $ }
C ^ cC { $ } S7: C d ^ { $ }C ^ d { $ }
S8: C cC ^ { c , d }S3:C c ^ C { c , d }
C ^ cC { c , d } S9: C cC ^ { $ }C ^ d { c , d }
![Page 67: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/67.jpg)
67
Transiciones del autómata LR canónico
S9S8S5S2C
S1S
S7S4S7S4d
S6S3S6S3c
S9S8S7S6S5S4S3S2S1S0
![Page 68: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/68.jpg)
68
Tabla de reconocimiento
R2S9
R2R2S8
R3S7
9S7S6S6
R1S5
R3R3S4
8S4S3S3
5S7S6S2
O.K.S1
21S4S3S0
CS$dc
GOTOACCIONESEstados
![Page 69: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/69.jpg)
69
SLR y LR canónico: ventajas / desventajas
Ventaja fundamental LR canónico
Reconoce un conjunto mayor de gramáticas que SLR.
Desventaja fundamental
El número de estados del reconocedor aumenta de forma considerable respecto de SLR
![Page 70: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/70.jpg)
70
3.1.3 Reconocedores LALR
Se trata de un punto intermedio entre SLR y LR canónico.
La idea es reducir el número de estados de un reconocedor LR canónico mediante la fusión de estados que son idénticos (salvo en la lista de SIGUIENTES asociada a cada regla).
Al fusionar los estados tenemos que modificar las transiciones correspondientes. Además, la lista de SIGUIENTES de un estado fusionado es la UNION de las listas de los estados que se han fusionado.
![Page 71: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/71.jpg)
71
Ejemplo
Dada la siguiente gramática:
1. S CC2. C cC3. C d
Se pide:
1. Autómata de reconocimiento LALR
2. Tabla de reconocimiento correspondiente
![Page 72: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/72.jpg)
72
Estados del autómata LR canónico
S0:S’ ^ S { $ } S4: C d ^ { c , d }S ^ CC { $ }C ^ cC { c , d } S5: S CC ^ { $ }C ^ d { c , d }
S6: C c ^ C { $ }S1:S’ S ^ { $ } C ^ cC { $ }
C ^ d { $ }S2:S C ^ C { $ }
C ^ cC { $ } S7: C d ^ { $ }C ^ d { $ }
S8: C cC ^ { c , d }S3:C c ^ C { c , d }
C ^ cC { c , d } S9: C cC ^ { $ }C ^ d { c , d }
![Page 73: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/73.jpg)
73
Estados del autómata LALR
S0: S’ ^ S { $ } S47: C d ^ { c , d , $ }S ^ CC { $ }C ^ cC { c , d } S5: S CC ^ { $ }C ^ d { c , d }
S89: C cC ^ { c , d , $ }S1: S’ S ^ { $ }
S2: S C ^ C { $ }C ^ cC { $ }C ^ d { $ }
S36: C c ^ C { c , d , $ }C ^ cC { c , d , $ }C ^ d { c , d , $ }
![Page 74: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/74.jpg)
74
Tabla de reconocimiento LALR
R2R2R2S89
R1S5
R3R3R3S47
89S47S36S36
5S47S36S2
O.K.S1
21S47S36S0
CS$dc
GOTOACCIONESESTADOS
![Page 75: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/75.jpg)
75
Conflictos en la fusión LALR
1 Si no existen conflictos SHIFT-REDUCE en el autómata canónico, tampoco los habrá en el autómata LALR.
2 Aunque el autómata canónico no tenga conflictos REDUCE-REDUCE, podrían aparecer este tipo de conflictos en el autómata LALR.
![Page 76: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/76.jpg)
76
Demostración sobre conflictos shift-reduce (I)
No hay conflicto S/R
R1 α ^ { A } A ∩ a = ØR2 β ^ { B } A ∩ b = ØR3 φ ^ a { …} B ∩ a = ØR4 ρ ^ b { … } B ∩ b = Ø
R1 α ^ { C } C ∩ a = ØR2 β ^ { D } C ∩ b = ØR3 φ ^ a { …} D ∩ a = ØR4 ρ ^ b { … } D ∩ b = Ø
![Page 77: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/77.jpg)
77
Demostración sobre conflictos shift-reduce (II)
R1 α ^ { A U C }R2 β ^ { B U D }R3 φ ^ a { …}R4 ρ ^ b { … }
¿ hay conflicto S/R al fusionar los 2 estados ?
(A U C) ∩ a = (A ∩ a) U (C ∩ a) = Ø(A U C) ∩ b = (A ∩ b) U (C ∩ b) = Ø(B U D) ∩ a = (B ∩ a) U (D ∩ a) = Ø(B U D) ∩ b = (B ∩ b) U (D ∩ b) = Ø
Efectivamente, si no hay conflictos S/R antes de la fusión de estados, después de la fusión tampoco existen.
![Page 78: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/78.jpg)
78
Demostración sobre conflictos reduce-reduce (I)
No hay conflicto R/R
R1 α ^ { A } A ∩ B = ØR2 β ^ { B }R3 φ ^ a { …}R4 ρ ^ b { … }
R1 α ^ { C } C ∩ D = ØR2 β ^ { D }R3 φ ^ a { …}R4 ρ ^ b { … }
![Page 79: Análisis sintáctico - ulpgc.es · 4 1. Introducción Construcción del analizador sintáctico (parser) Lenguaje By hand Tool Gramática PARSER](https://reader034.vdocuments.net/reader034/viewer/2022052309/5bcaf6f909d3f241138db8ff/html5/thumbnails/79.jpg)
79
Demostración sobre conflictos reduce-reduce (II)
R1 α ^ { A U C }R2 β ^ { B U D }R3 φ ^ a { …}R4 ρ ^ b { … }
¿ hay conflicto R/R al fusionar los 2 estados ?
(A U C) ∩ (B U D) = { (A U C) ∩ B } U { (A U C) ∩ D } =
(A ∩ B) U (C ∩ B) U (A ∩ D) U (C ∩ D) Ø ? ? Ø
Podrían aparecer conflictos R/R después de fusionar los estados aunque antes de la fusión no existiese ningún conflicto R/R