MB0 is designed for experimental purpose. It has a very simple grammar and syntax following to assembler languages. The current implementation is as an interpreter language.
Each line of code has the following form:
[label:] command [var1 [, var2 [, var3 [, …]]] [; comment]
Each line is interpreted as a procedure call of “command” with var1, … the call parameters. All parameters are called by name. The content is completely determined by the called procedure.
The procedures are taken from some library that is implemented in any programming language – most likely the language of the implementation.
The library is indexed by the command names. The interpreter implementation provides an interface for the passed variables
If the library procedures fail, the execution is aborted.
At runtime, an agent is created. An agent can be seen as a CPU executing the code line by line.
The most simple agent has the following internal states:
IP Instruction pointer:
Points to the line of code of the current command. After execution it’s moved to the next line
Active If true, the agent is active, i.e. executing code
The agent executes the following code (written in some pseudo code):
Start agent While IP <= last line of code Read line at IP Lookup command in the library If not found abort execution Call library procedure with all variables passed by name Move IP to next line End loop
Note: this simple agent has no conditional execution.
First reference implementation is in Excel VBA.
MB0 comes with a basic library with only string support and simple global variable functionality.
The variables are available as long as the agent is running.
MsbBox creates a VBA MsgBox with message var1
Let Puts par2 into variable par1
Only strings are supported. String constant is indicated by surrounding double quotes.