GrGen.NET
| {{#if: | | {{#invoke:WLink|getArticleBase}} }} | |||
|---|---|---|---|
colspan="2" class="notheme" style="text-align:center; background-color:#Vorlage:Standardfarbe;" | |
{{#if: {{#invoke:Wikidata|claim|P154}} |
|
[[Datei:{{#invoke:Wikidata|claim|P154}}|150px]]
}} }} | ||
| {{{Screenshot}}}{{#if: | }}| }} | |||
| Basisdaten | |||
| Paradigmen: | Multiparadigma: deklarativ, imperativ, objekt-orientiert
}} | ||
| Erscheinungsjahr: |
{{#if: {{#invoke:Wikidata|claim|P571}} |
|
Erscheinungsjahr: | claim|P571|references=ja}}
}} }} |
| Designer: |
{{#if: {{#invoke:Wikidata|claim|P287}} |
|
Designer: | claim|P287|parameter=link|references=ja|list=, }}
}} }} |
| Entwickler: |
{{#if: {{#invoke:Wikidata|claim|P178}} |
|
Entwickler: | claim|P178|parameter=link|references=ja|list=, }}
}} }} |
| Aktuelle Version: | 4.5 ({{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}) |
{{#if: {{#invoke:Wikidata|claim|P348}} | |
Aktuelle Version | {{#invoke:Wikidata|claim|P348|references=ja}}{{#if: {{#invoke:Wikidata|claim|Version|qualifier=P577}} | ({{#invoke:Wikidata|claim|Version|qualifier=P577}})}}}}
}} |
| Aktuelle Vorabversion: | ()
}} | ||
| Typisierung: | statisch, teilweise dynamisch, stark, nominativ
}} | ||
| Wichtige Implementierungen: |
}} | ||
| Dialekte: |
}} | ||
| Standardisierungen: |
}} | ||
| Beeinflusst von: |
{{#if: {{#invoke:Wikidata|claim|P737}} |
|
Beeinflusst von: | claim|P737|parameter=link|references=ja|list=, }}
}} }} |
| Beeinflusste: |
}} | ||
| Betriebssystem: | Windows, Linux |
{{#if: {{#invoke:Wikidata|claim|P306}} |
|
Betriebssystem: | claim|P306|parameter=link|references=ja|list=, }}
}} }} |
| Lizenz: | LGPL v3 |
{{#if: {{#invoke:Wikidata|claim|P275}} |
|
Lizenz: | claim|P275|parameter=link|references=ja|list=, }}
}} }} |
https://grgen.de/ |
{{#if: {{#invoke:Wikidata|claim|P856}} |
| |||
{{#invoke: WLink | formatURL | {{#invoke:Wikidata|claim|P856|parameter=link}}}}
}} }} | |||
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
Es folgt ein Auszug aus der Graphmodell- und Ersetzungsregelspezifikation der GrGen.NET-Lösung für die {{#switch:
|0|=Vorlage:Toter Link/Core{{#if: http://www.fots.ua.ac.be/events/grabats2008/cases/grabats2008performancecase.pdf | {{#if: AntWorld-Aufgabe (PDF; 105 kB) | AntWorld-Aufgabe (PDF; 105 kB) }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: 2019-01-03 | , festgestellt im {{#invoke:DateTime|format|2019-01-03|F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: 2019-01-03 | , festgestellt im {{#invoke:DateTime|format|2019-01-03|F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://www.fots.ua.ac.be/events/grabats2008/cases/grabats2008performancecase.pdf | {{#if:{{#invoke:URLutil|isWebURL|http://www.fots.ua.ac.be/events/grabats2008/cases/grabats2008performancecase.pdf}} || {{#if: || }} }} | {{#if: AntWorld-Aufgabe (PDF; 105 kB) | {{#if: || }} | {{#if: || }} }} }}{{#if: 2019-01-03 | {{#if:{{#invoke:DateTime|format|2019-01-03|F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://www.fots.ua.ac.be/events/grabats2008/cases/grabats2008performancecase.pdf Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: 2019-01-03 | , festgestellt im {{#invoke:DateTime|format|2019-01-03|F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://www.fots.ua.ac.be/events/grabats2008/cases/grabats2008performancecase.pdf | {{#if:{{#invoke:URLutil|isWebURL|http://www.fots.ua.ac.be/events/grabats2008/cases/grabats2008performancecase.pdf}} || {{#if: || }} }} }}{{#if: 2019-01-03 | {{#if:{{#invoke:DateTime|format|2019-01-03|F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[http://www.fots.ua.ac.be/events/grabats2008/cases/grabats2008performancecase.pdf }}, die auf der Grabats 08 gestellt wurde.<ref><templatestyles src="Webarchiv/styles.css" />{{#if:20120723054735 | {{#ifeq: 20120723054735 | * | {{#if: Grabats 08 | {{#invoke:WLink|getEscapedTitle|Grabats 08}} | {{#invoke:Webarchiv|getdomain|http://fots.ua.ac.be/events/grabats2008/}} }} (Archivversionen) | {{#iferror: {{#time: j. F Y|20120723054735}} | {{#if: || }}Der Wert des Parameters{{#if: wayback | wayback | Datum }}muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein! | {{#if: Grabats 08 | {{#invoke:WLink|getEscapedTitle|Grabats 08}} | {{#invoke:Webarchiv|getdomain|http://fots.ua.ac.be/events/grabats2008/}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20120723054735}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }} }} }} | {{#if: | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}} | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}} | 16= {{#if: Grabats 08 | {{#invoke:WLink|getEscapedTitle|Grabats 08}} | {{#invoke:Webarchiv|getdomain|http://fots.ua.ac.be/events/grabats2008/}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }} | 9 = {{#if: Grabats 08 | {{#invoke:WLink|getEscapedTitle|Grabats 08}} | {{#invoke:Webarchiv|getdomain|http://fots.ua.ac.be/events/grabats2008/}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }} | #default= Der Wert des Parameters{{#if: webciteID | webciteID | ID }}muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }} }} | c|{{{webciteID}}}}} {{#if: Grabats 08 | {{#invoke:WLink|getEscapedTitle|Grabats 08}} | {{#invoke:Webarchiv|getdomain|http://fots.ua.ac.be/events/grabats2008/}} }} ({{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }} }} | {{#if: | Vorlage:Webarchiv/Today | {{#if: | Vorlage:Webarchiv/Generisch | {{#if: Grabats 08 | {{#invoke:WLink|getEscapedTitle|Grabats 08}} | {{#invoke:Webarchiv|getdomain|http://fots.ua.ac.be/events/grabats2008/}} }} }}}}}}}}{{#if: | Vorlage:Webarchiv/archiv-bot }}{{#invoke:TemplatePar|check |all = url= |opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original= |cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv |errNS = 0 |template = Vorlage:Webarchiv |format = * |preview = 1 }}{{#ifexpr: {{#if:20120723054735|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1 | {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}} }}{{#if: | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}} | web.archive.org = {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} | webcitation.org = {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}} }}{{#if: | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}} | {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}} | }} | {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}} }} | {{#if: | {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}} }} }}{{#if:{{#invoke:URLutil|isHostPathResource|http://fots.ua.ac.be/events/grabats2008/}} || {{#if: || }} }}{{#if: Grabats 08 | {{#if: {{#invoke:WLink|isBracketedLink|Grabats 08}} | {{#if: || }} }} | {{#if: || }} }}{{#switch: |addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}} }}{{#ifeq: {{#invoke:Str|find|http://fots.ua.ac.be/events/grabats2008/%7Carchiv}} |-1 || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://fots.ua.ac.be/events/grabats2008/%7C4}}%7Chttp}} |-1 || {{#switch: {{#invoke:Webarchiv|getdomain|http://fots.ua.ac.be/events/grabats2008/ }} | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = | #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}} }} }} }}</ref>
Graphmodell: <syntaxhighlight lang="cpp">
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;
</syntaxhighlight>
Ersetzungsregeln:
<syntaxhighlight lang="cpp">
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);
}
</syntaxhighlight>
Weblinks
- Hauptseite des GrGen.NET-Projektes
- GrGen.NET User Manual (englisch) (PDF; 5,9 MB)
- Kurze Einführung in GrGen.NET 1.4 (englisch, veraltet) (PDF; 174 kB)
- Wissenschaftliche Veröffentlichungen zu GrGen
Einzelnachweise
<references />
- Seiten mit defekten Dateilinks
- Wikipedia:Weblink offline fix-attempted
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link/URL fehlt
- Wikipedia:Vorlagenfehler/Parameter:Datum
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Archiv-URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Linktext fehlt
- Graphersetzung
- Deklarative Programmiersprache
- Freies Programmierwerkzeug