Software development tool
GrGen.NET Paradigm Multi-paradigm : declarative , imperative , object-oriented Developer Sebastian Hack, Rubino Geiss, Moritz Kroll, Edgar Jakumeit, and others First appeared 2003 (2003 ) Stable release GrGen.NET 4.5
/ April 9, 2017; 7 years ago (2017-04-09 )
Typing discipline Static, partly dynamic, strong, safe , nominative OS Cross-platform (multi-platform)License GNU Lesser General Public License Website grgen .de
Debugging of a sequence generating a Koch-snowflake (the rules on the left, GrShell with highlighted current rule below, yComp with highlighted match in the host graph on the right)
Execution of the replace step
GrGen.NET is a software development tool that offers programming languages (domain-specific languages ) that are optimized for the processing of graph structured data.
The core of the languages consists of modular graph rewrite rules , which are built on declarative graph pattern matching and rewriting; they are supplemented by many of the constructs that are used in imperative and object-oriented programming,
and are completed with language devices known from database query languages .
The Graph Rewrite GENerator compiles the languages into efficient CLI assemblies (via C# -Code in an intermediate step), which can be integrated via an API into code written in any .NET-language .
GrGen can be executed under Windows and Linux (Mono needed) and is open source available under LGPL v3.
For rapid prototyping and debugging, an interactive shell and a (VCG-)graph viewer are included in the package.
With its languages and its visual and stepwise debugging, GrGen allows one to develop at the natural level of abstraction of graph-based representations, such as those employed in engineering , model transformation , computational linguistics , or compiler construction (as intermediate representation ).
GrGen increases productivity for those kinds of tasks far beyond what can be achieved by programming in a traditional programming language; due to many implemented performance optimizations it still allows one to achieve high-performance solutions.
Its authors claim that the system offers the highest combined speed of development and execution available for the algorithmic processing of graph -based representations (based on their performance regarding diverse tasks posed at different editions of the Transformation Tool Contest (/GraBaTs)).
Specification sample
Below is an example containing a graph model and rule specifications from the GrGen.NET-solution to the AntWorld-case Archived 2011-08-10 at the Wayback Machine posed at Grabats 08 Archived 2012-11-29 at archive.today .
Graph model:
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;
Rewrite rules:
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);
}
External links
Conference papers
See also