![Page 1: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/1.jpg)
Fragmentación de Programascon Emparejamiento de Patrones
David Insa CabreraJoint work with
Josep Silva, Salvador Tamarit, César Tomás
![Page 2: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/2.jpg)
IntroducciónProgram Slicing
Pattern Matching
Problema: Pérdida de precisión
Solución
Conclusiones
Contenido
Peculiaridades de Erlang
Erlang Dependence Graph
![Page 3: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/3.jpg)
Program Slicing [Mark D. Weiser (1981)] Paradigma Imperativo
CONSISTE EN:• Obtener la parte del programa (slice) que influencia o es influenciado por un punto de interés (slicing criterion)
Program Slicing
int i;int sum = 0;int product = 1;for (i = 1; i < N; i++) { sum = sum + i; product = product * i;}write(sum);write(product);
Ejemplo:
int i;int sum = 0;int product = 1;for (i = 1; i < N; i++) { sum = sum + i; product = product * i;}write(sum);write(product);
Programa Original Slice
![Page 4: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/4.jpg)
Program Slicing [Mark D. Weiser (1981)] Paradigma Imperativo
DOS FASES:• Generar el System Dependence Graph (SDG) [Horwitz et al. (1990)]• Recorrer el grafo desde un punto de interés (slicing criterion)
Program Slicing
entry main
sum = 0 i = 1 while i < 11 print sum print i
call add
ain = sum bin = i sum = ret
entry add
a = ain b = bin ret = result
result = a + b
call add
ain = i bin = 1 i = ret
static void main() { int i = 1; int sum = 0; while (I < 11) { sum = add(sum, i); i = add(i, 1); } printf("sum = %d\n", sum); printf("i = %d\n", i);}
static int add(int a, int b) { return a + b;}
static void main() { int i = 1; int sum = 0; while (I < 11) { sum = add(sum, i); i = add(i, 1); } printf(“sum = %d\n”, sum); printf("i = %d\n", i);}
static int add(int a, int b) { return a + b;}
![Page 5: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/5.jpg)
IntroducciónProgram Slicing
Pattern Matching
Problema: Pérdida de precisión
Solución
Conclusiones
Contenido
Peculiaridades de Erlang
Erlang Dependence Graph
![Page 6: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/6.jpg)
Erlang es un lenguaje sencillo y eficiente que fue diseñado para la programación concurrente, en tiempo real y para sistemas distribuidos tolerantes a fallos.
Peculiaridades de Erlang
El subconjunto secuencial de Erlang es un lenguaje funcional, con evaluación estricta, asignación única y tipado dinámico.
main() -> Sum = 0, I = 0, {Res, _} = while(Sum, I, 11), Res.
while(Sum, I, Top) -> if I /= Top -> NSum = add(Sum, I), NI = (fun (Z) -> add(Z, 1) end)(I), while(NSum, NI, Top); I == Top -> {Sum, Top} end.
add(A, 0) -> A;add(A, B) -> A + B.
![Page 7: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/7.jpg)
Algunas características de Erlang:• No contiene bucles. Los bucles se consiguen mediante la recursión.• Las variables sólo pueden asignarse una vez.• El Pattern Matching se usa para seleccionar una de las clausulas de una
función.• Funciones de orden superior, list comprehensions, funciones anónimas y
otros constructores sintácticos no presentes en la programación imperativa.
Peculiaridades de Erlang
main() -> Sum = 0, I = 0, {Res, _} = while(Sum, I, 11), Res.
while(Sum, I, Top) -> if I /= Top -> NSum = add(Sum, I), NI = (fun (Z) -> add(Z, 1) end)(I), while(NSum, NI, Top); I == Top -> {Sum, Top} end.
add(A, 0) -> A;add(A, B) -> A + B.
![Page 8: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/8.jpg)
Peculiaridades de Erlang
main() -> Sum = 0, I = 0, _ = while(undef, I, 11). Res.
while(_, I, Top) -> if I /= Top -> NSum = add(Sum, I), NI = (fun (Z) -> add(Z, 1) end)(I), while(undef, NI, Top); I == Top -> {Sum, Top} end.
add(_, 0) -> undef;add(A, B) -> A + B.
main() -> Sum = 0, I = 0, {Res, _} = while(Sum, I, 11), Res.
while(Sum, I, Top) -> if I /= Top -> NSum = add(Sum, I), NI = (fun (Z) -> add(Z, 1) end)(I), while(NSum, NI, Top); I == Top -> {Sum, Top} end.
add(A, 0) -> A;add(A, B) -> A + B.
![Page 9: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/9.jpg)
IntroducciónProgram Slicing
Pattern Matching
Problema: Pérdida de precisión
Solución
Conclusiones
Contenido
Peculiaridades de Erlang
Erlang Dependence Graph
![Page 10: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/10.jpg)
Erlang Dependence Graph
![Page 11: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/11.jpg)
Erlang Dependence Graph
function in main/0
clause in
(guards) []
body
(op)+
(term)X
(term)42
(op){}
(term)X
(term)5
main() -> X = 5, X + 42, {X, 5, X + 42}.
Código:
(op)+
(term)X
(term)42
pm
(term)X
(term)5
![Page 12: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/12.jpg)
Erlang Dependence Graph
function in main/0
clause in
(guards) []
body
pm
(term)X
(op){}
(term)1
(term)2
pm
(term)X
(op){}
(term)A
(term)B
main() -> X = {1, 2}, {A, B} = X.
Código:
![Page 13: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/13.jpg)
Erlang Dependence Graph
function in main/0
clause in
(guards) []
body
pm
(term)X
(op){}
(term)1
(term)2
call
(term)X
(term)f
main() -> X = {1, 2}, f(X).
Código:
return
function in f/1
clause in
(guards) []
body
(op){}
(term)A
(term)B
(term)A
f({A, B}) -> A.
![Page 14: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/14.jpg)
IntroducciónProgram Slicing
Pattern Matching
Problema: Pérdida de precisión
Solución
Conclusiones
Contenido
Peculiaridades de Erlang
Erlang Dependence Graph
![Page 15: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/15.jpg)
Problema: Pérdida de precisión
function in main/0
clause in
(guards) []
body
pm
(term)X
(op){}
(term)1
(term)2
pm
(term)X
(op){}
(term)A
(term)B
main() -> X = {1, 2}, {A, B} = X.
Código:
main() -> X = {1, 2}. {A, B} = X.
Código obtenido:
main() -> X = {1, 2}. {A, B} = X.
Código esperado:
![Page 16: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/16.jpg)
Problema: Pérdida de precisión
function in main/0
clause in
(guards) []
body
pm
(term)X
(op){}
(term)1
(term)2
pm
(term)X
(op){}
(term)A
(term)B
main() -> X = {1, 2}, {A, B} = X.
Código:
main() -> X = {1, 2}, _ = X.
Código obtenido:
main() -> X = {1, 2}, _ = X.
Código esperado:
![Page 17: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/17.jpg)
Problema: Pérdida de precisión
function in main/0
clause in
(guards) []
body
pm
(term)X
(op){}
(term)1
(term)2
pm
(term)X
(op){}
(term)A
(term)B
main() -> X = {1, 2}, {A, B} = X.
Código:
main() -> X = {1, 2}, {A, _} = X.
Código obtenido:
main() -> X = {1, undef}, {A, _} = X.
Código esperado:
![Page 18: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/18.jpg)
IntroducciónProgram Slicing
Pattern Matching
Problema: Pérdida de precisión
Solución
Conclusiones
Contenido
Peculiaridades de Erlang
Erlang Dependence Graph
![Page 19: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/19.jpg)
Solución
function in main/0
clause in
(guards) []
body
pm
(term)X
(op){}
(term)1
(term)2
pm
(term)X
(op){}
(term)A
(term)B
main() -> X = {1, 2}, {A, B} = X.
Código:
main() -> X = {1, undef}, {A, _} = X.
Código obtenido:
![Page 20: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/20.jpg)
Solución interprocedural
function in main/0
clause in
(guards) []
body
pm
(term)X
(op){}
(term)1
(term)2
call
(term)X
(term)f
main() -> X = {1, 2}, f(X).
Código:
return
function in f/1
clause in
(guards) []
body
(op){}
(term)A
(term)B
(term)A
f({A, B}) -> A.
main() -> X = {1, undef}, f(X).
Código obtenido:
f({A, _}) -> A.
![Page 21: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/21.jpg)
Solución interprocedural
function in main/0
clause in
(guards) []
body
pm
(op){}
(term)A
(term)B
call
(term)f
main() -> {A, B} = f().
Código:
return
function in f/0
clause in
(guards) []
body
(term)X
f() -> X = {1, 2}, X.
Código obtenido:
main() -> {A, _} = f().
f() -> X = {1, undef}, X.
pm
(term)X
(op){}
(term)1
(term)2
![Page 22: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/22.jpg)
IntroducciónProgram Slicing
Pattern Matching
Problema: Pérdida de precisión
Solución
Conclusiones
Contenido
Peculiaridades de Erlang
Erlang Dependence Graph
![Page 23: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/23.jpg)
Conclusiones
Program Slicing con Pattern Matching
Ampliación del Erlang Dependence Graph
Nuevo algoritmo de Fragmentación
Mejora de la precisión
body
pm
(term)X
(op){}
(term)1
(term)2
pm
(term)X
(op){}
(term)A
(term)B
main() -> X = {1, 2}, {A, B} = X.
Código:
http://kaz.dsic.upv.es/slicerl
![Page 24: Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph](https://reader035.vdocuments.mx/reader035/viewer/2022062621/551cee82550346497a8b5277/html5/thumbnails/24.jpg)
Fragmentación de Programascon Emparejamiento de Patrones
David Insa CabreraThe Erlang Dependence Graph (EDG)
http://kaz.dsic.upv.es/slicerl