Notice: Check out Silver Monkey project that uses Monkeyspeak extensively.
Description
Monkeyspeak is a dragonspeak-like interpreter written in C# 4.0. Unlike its predecessor
http://code.google.com/p/monkeyspeak/, also created by me, this version is more user friendly.
What the Furcadia?
It is a unique MMOG that lets you create a map with custom logic which they call Dreams. Monkeyspeak is inspired by Dragonspeak which is the scripting language used in Furcadia to create Dreams (or scripted maps).
The project "Monkeyspeak" and it's development team is in no way affiliated with Dragon's Eye Productions. Monkeyspeak is free for life. Free as in FREE BEER!
Example
(The example uses deprecated api please refer to the MonkeyspeakTest project for unit test examples)
string testScript = @"
*This is a comment.
(0:0) when the script is started,
(1:0) and %hello.World is not defined,
(5:1) set %hello.World to {Hello World}.
(5:0) print {%hello.World} to the console.
";
Monkeyspeak.MonkeyspeakEngine engine = new Monkeyspeak.MonkeyspeakEngine();
Monkeyspeak.Page page = engine.LoadFromString(testScript);
page.SetTriggerHandler(new Monkeyspeak.Trigger(Monkeyspeak.TriggerCategory.Cause, 0), delegate { return true; });
page.SetTriggerHandler(new Monkeyspeak.Trigger(Monkeyspeak.TriggerCategory.Condition, 0), delegate(Monkeyspeak.TriggerReader reader)
{
var variable = reader.ReadVariable();
if (variable == Monkeyspeak.Variable.NoValue)
return true; // it is not defined so return true.
return false;
}, "(1:0) and # is not defined,");
page.SetTriggerHandler(new Monkeyspeak.Trigger(Monkeyspeak.TriggerCategory.Effect, 0), delegate(Monkeyspeak.TriggerReader reader)
{
var str = reader.ReadString();
Console.WriteLine(str);
return true;
}, "(5:0) print {...} to the console.");
page.SetTriggerHandler(new Monkeyspeak.Trigger(Monkeyspeak.TriggerCategory.Effect, 1), delegate(Monkeyspeak.TriggerReader reader)
{
var variable = reader.ReadVariable();
var str = reader.ReadString();
variable.AssignValue(str);
return true;
}, "(5:1) set # to {...}.");
page.Execute(Monkeyspeak.TriggerCategory.Cause, 0);
Cross-Platform
Untested on Mono but it contains no Win32 dependencies. Pure .Net baby! Tested it with the Mono Migration Analysis and it passed.