Protocol definition
Swarm protocols are defined within an .OSW file which can be compiled to generate C++/Java/… code. Each OSW file contains the description of the behavior of all the swarm agents (ants) that implement the protocol.
Syntax
PROTOCOL := protocol <string name> '{' IMPORT+ ANT* '}' '
IMPORT := import (for <string output>)? '{' SUBSTITUTIONS* '}'
SUBSTITUTION := <string method> as <string function> ','
ANT := ant <string name> '{' IMPORT+ BEHAVIOR? '}'
BEHAVIOR := behavior '{' <code> '}
Example
/* Comments are written this way */
protocol "BlatAnt" {
/* This is a global import part, shared among all ants */
import {
"MyAlgorithm::happyMethod" as "happyfunction",
"BinboBongo::bango" as "bango"
}
ant "PingPong" {
/* This is a local import part */
import for "oversim" {
"MyAlgorithm::sadMethod" as "sadfunction"
}
/* This is a local import part */
import for "java" {
"MyAlgorithm::sadMethod" as "sadfunction"
}
behavior {
(virtual $target)
(while 1 (begin
(var source (migrate $target))
(happyfunction "hello" [1,2,3])
(migrate source)
(sadfunction "blabla")))
}
}
ant "PingPongMad" {
/* This is a local import part */
import {
"MyAlgorithm::strangeMethod" as "strangefunction"
}
behavior {
(virtual $target)
(while 1 (begin
(var source (migrate $target))
(happyfunction "hello" [1,2,3])
(migrate source)
(strangefunction "blabla")))
}
}
ant "Taco" {
/* This is a local import part */
import {
"MyAlgorithm::strangeMethod" as "strangefunction"
}
}
ant "Loco" {
behavior {
(virtual $target)
(while 1 (begin
(var source (migrate $target))
(happyfunction "hello" [1,2,3])
(migrate source)
(strangefunction "blabla")))
}
}
}