1 / 27

Induktive Synthese von rekursiven XSL Transformationen

Induktive Synthese von rekursiven XSL Transformationen. Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese aus XSL. Diplomarbeit Von Jens Waltermann Feb. 2003. Induktive Programmsynthese.

joelle
Download Presentation

Induktive Synthese von rekursiven XSL Transformationen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese aus XSL Diplomarbeit Von Jens Waltermann Feb. 2003

  2. Induktive Programmsynthese Erzeugung von Rekursiven Programmen aus nicht vollständigen Informationen (Eingabe/Ausgabe-Paaren) • Klassischer Ansatz nach Summers • Verallgemeinerung nach Schmid

  3. Ansatz nach Summers • Entwicklung rekursiver Programme aus IOPaaren anhand von Listenbeispielen in Lisp 1) Betrachtung von Prädikaten und Funktionen, die sich innerhalb der betrachteten Domäne eindeutig aus den IOPaaren ergeben 2) Suche nach Rekurrenzrelationen 3) Bau der Rekursiven Funktion als Produkt aus Funktionen und Prädiaten

  4. Beispiel Summers Domäne: cons[x,l], car[l], cdr[l], nil, atom[l] IOPaar: {()->(),(AB)->(A),(ABCD)->(AB),(ABCDEF)->(ABC)} Anfangsprogramme: f1[x] = nil, f2[x]=cons[car[x]];nil], f3[x]= cons[car[x]; cons[cadr[x]];nil]]], f4[x]= cons[car[x]; cons[cadr[x]]; cons[caddr[x]];nil]]]], Prädikate: p1[x]= atom[x], p2[x]=atom[cddr[x]], p3[x]=atom[cddddr[x]], p4[x]=atom[cddddr[x]], Rekurrenzrelation der Funktionen: f1[x]=nil, f(n+1)[x]=cons[car[x]; f(n)[cadr[x]]],n>1 Rekurrenzrelation der Prädikate: p1[x] = atom[x], p(n+1)[x]=p(n)[cddr[x]] ,n>1 h[x;y] <- [atom[y]->nil]; T <- cons[car[x];h[cdr[x];cddr[y]]]. Erzeugtes Programm: half[x]<- h[x;x]

  5. Ansatz nach Schmid • Universelle Planung innerhalb einer vorgegebenen Domäne zur Erzeugung von Anfangsprogrammen • Faltung von initialen Termen in ein RPS • Verbindung der beiden Schritte durch Transformationen zwischen spezieller Domäne und Termen/RPS

  6. Beispiel Fakultät IOPaar: { (1,1), (2,2), (3,6), (4,24)} Anfangsprogramme: f1(i)= i * if (i=1) 1;? f2(i)= i * if (i=1) 1;(i-1) * if (i-1=1)1; ? f3(i)= i * if (i=1) 1;(i-1) * if (i-1=1)1; (i-1-1) * if (i-1-1=1)1; ? f4(i)= i * if (i=1) 1;(i-1) * if (i-1=1)1; (i-1-1) * if (i-1-1=1)1; (i-1-1-1) * if (i-1-1-1=1)1;? Rekursive Programm: fak(i)= i * if (i=1)1;fak(i-1)

  7. Einsatz von TFold TFold aus dem Ansatz von Schmid benötigt zur Faltung rekursiver Programme initiale Terme mit folgenden Eigenschaften: • Hypothese der Rekursions- Verankerung (Omega-Information) • Inkrementierung und Verwendung von mindestens einem Parameter innerhalb des rekursiven Progamms (Kontext)

  8. XSL/XML/Saxon • Was sind XML/XSL Dokumente, • Wie wirkt ein XSL Dokument auf ein XML • Rekursion in XSL

  9. XML Dokument <?xml version="1.0" encoding="utf-8" ?> <order> <Element>(NLL)</Element> <Element>(NLR)</Element> <Element>(NL)</Element> <Element>(NRL)</Element> <Element>(NRR)</Element> <Element>(NR)</Element> <Element>(N)</Element> </order>

  10. XSL Dokment <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match="Trees"> <Trees> <xsl:apply-templates /> </Trees> </xsl:template> <xsl:template match="Tree"> <xsl:value-of select="Value" /> <xsl:value-of select="Tiefe" /> </xsl:template> </xsl:stylesheet>

  11. Rekursion in XSL • Parametrisierte Rekursion templates werden mit geänderten Parametern aufgerufen, die Parameter determinieren die Abarbeitung. • Kontextabhängige Rekursion Entsprechend des Eingabebaum werden templates aufgerufen. Bei rekursiv verschachtelten Eingabedokumenten kann dies zur Rekursion in der Interpretierung führen.

  12. Genetischer Algorithmus Zur schrittweisen Erzeugung initialer (nicht-rekursiver) Anfangsprogramme aus Ein/Ausgabe-Paaren.

  13. Ausgangspunkt ist ein leerer Stylesheet • Stylesheets werden durch Hinzufügen von Grundtags schrittweise erweitert • Die Grundtags ergeben sich aus dem IOPaar • Eine Popuation ist eine Menge von Stylesheets, deren Erzeugnis bezüglich der Eingabe in der Ausgabe liegen • Eine Folgepopulation eines Stylesheets ist die Menge der Stylesheets, die unter Hinzunahme von maximal N (Suchtiefe) Grundoperationen entsteht, so dass die Erzeugnisse der Stylesheets der Folgepopulation dichter im Ausgabedokument liegen.

  14. Beispiel IOPaar <order> (NLL)(NLR)(NL)(NRL)(NRR)(NR)(N) </order> <Tree> <Tree> <Tree> <inhalt>(NLL)</inhalt> </Tree> <inhalt>(NL)</inhalt> <Tree> <inhalt>(NLR)</inhalt> </Tree> </Tree> <inhalt>(N)</inhalt> <Tree> <Tree> <inhalt>(NRL)</inhalt> </Tree> <inhalt>(NR)</inhalt> <Tree> <inhalt>(NRR)</inhalt> </Tree> </Tree> </Tree>

  15. Beispiel Generator <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/" name="root"> <order> <xsl:for-each select="Tree"> <xsl:value-of select="inhalt" /> <xsl:for-each select="Tree"> <xsl:value-of select="inhalt" /> <xsl:for-each select="Tree"> <xsl:value-of select="inhalt" /> <xsl:for-each select="Tree"> <xsl:value-of select="inhalt" /> </xsl:for-each> </xsl:for-each> </xsl:for-each> </xsl:for-each> </order> </xsl:template></xsl:stylesheet>

  16. Omega-Information Finde Stellen innerhalb des Programms an denen eine Rekursionsverankerung vermutet werden kann.

  17. Algorithmus zur Omega-Information • Betrachte alle aufsteigenden Pfade • Betrachte im jeweiligen Pfad alle aufsteigenden Sequenzen, • Falls eine Sequenz aus Knoten sich 2x wiederholt betrachte Indizierung, • Entscheide ob Integration oder Substitution des Omegas

  18. Kontext-Nachtragung Integration des unsichtbaren Parameters Kontext in die Programme: • Jeder Tag verwendet seinen Kontext • Ein Template Tag hat den Kontext X • Der Kontext wird entsprechend den „xsl:for-each“ inkrementiert.

  19. Rekursive XSL <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <xsl:stylesheet version="1.0„ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template name="SUB1"> <xsl:for-each select="TREE"> <xsl:value-of select="INHALT" /> <xsl:call-template name="SUB1" /> </xsl:for-each> </xsl:template> <xsl:template name="Root" match="/"> <order><xsl:call-template name="SUB1" /> </order> </xsl:template></xsl:stylesheet>

More Related