Upload
votu
View
225
Download
0
Embed Size (px)
Citation preview
1
Análisis sintáctico
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)
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
4
1. Introducción
Construcción del analizador sintáctico (parser)
Lenguaje
By hand
Tool
Gramática PARSER
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”
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)
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)
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 ‘)’
9
2. Análisis descendente (top-down)
EXPR
a + b * ( c + 2 )
10
2.1 Análisis con backtracking
EXPR
TERM
EXPR
TERMEXPR
TERM+
+
a + b * c + 2
FACT
FACT
( )id id
NO HAY MATCH-ING
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.
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
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)
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)
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.
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.
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 | ε
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 ‘)’
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’.
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
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:
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
23
Implementación
Reconocedores descendentes predictivos
2.2.1 Implementación recursiva2.2.1 Implementación iterativa
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:
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.
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
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:
28
Procedimiento EXPR (versión 2)
EXPR ( ){
if ( lookahead = { id , cte , ( } ){ TERM ( );
REXPR ( );}else
error ( );}
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}
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:
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
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.
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)
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
35
Ejemplo
S a A B eA A b c | bB d
Usemos derivaciones right-most:
S aABe aAde aAbcde abbcde
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
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
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
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 )
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:
41
Tabla de reconocimiento
R3R3R3R310
R5R5R5R511
R1R1S7R19
S11S68
10S4S57
39S4S56
R6R6R6R65
328S4S54
R4R4R4R43
R2R2S7R22
O.K.S61
321S4S50
FTE$)(*+id
GOTOACCIONESEstado
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
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
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 }
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 }
46
Tabla de reconocimiento
R2R2S9
R1S8
R4S7
S9S6
S8S5
R3R3S4
5S7S6S3
3S4S2
O.K.S11S2S0
BAS$edcba
GotoAccionesEstado
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 )
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
49
Ejercicio: transiciones del autómata SLR
S10S3S3S3F
S9S2S2T
S8S1E
S11)
S4S4S4S4(
S7S7*
S6S6+
S5S5S5S5id
S11S10S9S8S7S6S5S4S3S2S1S0
50
Ejercicio: tabla de reconocimiento SLR
R3R3R3R310
R5R5R5R511
R1R1S7R19
S11S68
10S4S57
39S4S56
R6R6R6R65
328S4S54
R4R4R4R43
R2R2S7R22
O.K.S61
321S4S50
FTE$)(*+id
GOTOACCIONESEstado
51
Ejercicio: reconocer la cadena id + id * ( id + id )
Se deja como ejercicio
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)
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 ?
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
55
Transiciones del autómata SLR
S9S7S3R
S8S8S2L
S1S
S4S4S4*
S6=
S5S5S5id
S9S8S7S6S5S4S3S2S1S0
56
Tabla de reconocimiento SLR
R1S9
R5R5S8
R3R3S7
98S4S5S6
R4R4S5
78S4S5S4
R2S3
R5S6 / R5S2
O.K.S1
321S4S5S0
RLS$*=id
GOTOACCIONESESTADO
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.
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) .
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.
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 ^ { = }
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 ^ { $ }
62
Tabla de transiciones
S13S9S7S3R
S10S10S8S2L
S1S
S11S11S4S4*
S6=
S12S12S5S5id
S13S12S11S10S9S8S7S6S5S4S3S2S1S0
63
Tabla de reconocimiento LR canónico
13973R
101082L
1SGOTO
R3R4R5R1R2R5O.K.$
S11S11S4S4*
R5R3R4S6=
S12S12S5S5idACCIONES
S13S12S11S10S9S8S7S6S5S4S3S2S1S0Estados
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.
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
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 }
67
Transiciones del autómata LR canónico
S9S8S5S2C
S1S
S7S4S7S4d
S6S3S6S3c
S9S8S7S6S5S4S3S2S1S0
68
Tabla de reconocimiento
R2S9
R2R2S8
R3S7
9S7S6S6
R1S5
R3R3S4
8S4S3S3
5S7S6S2
O.K.S1
21S4S3S0
CS$dc
GOTOACCIONESEstados
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
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.
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
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 }
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 , $ }
74
Tabla de reconocimiento LALR
R2R2R2S89
R1S5
R3R3R3S47
89S47S36S36
5S47S36S2
O.K.S1
21S47S36S0
CS$dc
GOTOACCIONESESTADOS
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.
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 = Ø
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.
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 { … }
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