GrGen.NET

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
GrGen.NET
Paradigmen: Multiparadigma: deklarativ, imperativ, objekt-orientiert
Erscheinungsjahr: 2003
Entwickler: Sebastian Hack, Rubino Geiss, Moritz Kroll, Edgar Jakumeit, u. v. a.
Aktuelle Version: 4.5  (9. April 2017)
Typisierung: statisch, teilweise dynamisch, stark, nominativ
Betriebssystem: Windows, Linux
Lizenz: LGPL v3
https://grgen.de/
Debugging der Sequenz zum Erzeugen einer Koch-Schneeflocke (links die Regeln, unten die GrShell mit hervorgehobener aktueller Regel, rechts yComp mit hervorgehobener Passung im Arbeitsgraph)
Ausführung des Ersetzungsschrittes

GrGen.NET ist ein Softwareentwicklungswerkzeug, das Programmiersprachen (Fachsprachen (DSL)) anbietet, die auf die Verarbeitung von graphartigen Daten hin optimiert wurden. In ihrem Kern bestehen die Sprachen aus modularen Graphersetzungregeln, die auf deklarativer Graphmustersuche- und Ersetzung aufbauen; sie werden durch viele Konstrukte, die in der imperativen und objekt-orientierten Programmierung geläufig sind ergänzt, und mit aus Datenbankenabfragesprachen bekannten Sprachmitteln vervollständigt.

Der Graph Rewrite GENerator übersetzt die Sprachen in effiziente .NET-Assemblies (über C#-Code als Zwischenschritt), die über eine Programmierschnittstelle in den Code einer beliebigen .NET-Sprache integriert werden können. GrGen kann unter Windows und Linux (Mono benötigt) ausgeführt werden und ist als Open Source unter der LGPL v3 verfügbar.

Zum Rapid Prototyping und Debugging enthält das Programmpaket eine interaktive Kommandozeile und einen (VCG-)Graphvisualisierer. Mit seinen Sprachen und seinem graphischen und schrittweisen Debugging erlaubt GrGen die Entwicklung auf dem natürlichen Abstraktionsniveau von graphbasierten Darstellungen. Selbige finden zum Beispiel im Ingenieurwesen, der Modelltransformation, der Computerlinguistik, oder dem Compilerbau (als Intermediate Representation) Verwendung.

GrGen erhöht die Produktivität für diese Art von Aufgaben deutlich über das hinaus, was mit der Programmierung in einer gewöhnlichen Programmiersprache erreicht werden kann; aufgrund der vielen implementierten Optimierungen erlaubt es dennoch schnelle Lösungen zu erreichen. Seine Entwickler bewerben das System mit der Aussage, dass es die höchste kombinierte Entwicklungs- und Ausführungsgeschwindigkeit bietet, die für das algorithmische Verarbeiten von Graphen verfügbar ist (basierend auf ihrem Abschneiden bezüglich diverser Aufgaben, die in unterschiedlichen Ausgaben des Transformation Tool Contests (/GraBaTs) gestellt wurden).

Beispielspezifikation

[Bearbeiten | Quelltext bearbeiten]

Es folgt ein Auszug aus der Graphmodell- und Ersetzungsregelspezifikation der GrGen.NET-Lösung für die @1@2Vorlage:Toter Link/www.fots.ua.ac.beAntWorld-Aufgabe (PDF; 105 kB) (Seite nicht mehr abrufbar, festgestellt im Januar 2019. Suche in Webarchiven), die auf der Grabats 08 gestellt wurde.[1]

Graphmodell:

 node class GridNode {
     food:int;
     pheromones:int;
 }
 node class GridCornerNode extends GridNode;
 node class AntHill extends GridNode {
     foodCountdown:int = 10;
 }
 node class Ant {
     hasFood:boolean;
 }

 edge class GridEdge connect GridNode[1] -> GridNode[1];
 edge class PathToHill extends GridEdge;
 edge class AntPosition;

Ersetzungsregeln:

 rule TakeFood(curAnt:Ant)
 {
     curAnt -:AntPosition-> n:GridNode\AntHill;
     if { !curAnt.hasFood && n.food > 0; }

     modify {
         eval {
             curAnt.hasFood = true;
             n.food = n.food - 1;
         }
     }
 }

 rule SearchAlongPheromones(curAnt:Ant)
 {
     curAnt -oldPos:AntPosition-> old:GridNode <-:PathToHill- new:GridNode;
     if{ new.pheromones > 9; }

     modify {
         delete(oldPos);
         curAnt -:AntPosition-> new;
     }
 }

 test ReachedEndOfWorld(curAnt:Ant) : (GridNode)
 {
     curAnt -:AntPosition-> n:GridNode\AntHill;
     negative {
         n <-:PathToHill-;
     }
     return (n);
 }

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Grabats 08 (Memento vom 23. Juli 2012 im Internet Archive)