For a comprehensive example with comments, check out demo.boi
Here's a very simple example of some code written using the Boi interpreted language:
boi, "Hello, Boi!" boi
boi! set greet "Hello," boi
boi! set subject "Boi!" boi
boi, boi:greet " " boi:subject boi
This is an experimental language developed as a joke.
Boi-lang takes things way outside the box. It features dynamic scoping and only one variable type (byte array), which Boi-lang lets you pass around however you please.
My inspiration for this work of "art" can be attributed to a Facebook group with the following title:
we post the word "boi" every day until the James Webb telescope is launched
Every line contains the word "boi".
Developing a silly programming language is fun, and makes it possible to explore new ideas without worrying about quality and consistency.
Every statement begins with a keyword (ex: boi!) and ends with the
statement terminator, which is boi.
There are different keywords which will explained further:
| keyword | Description | 
|---|---|
boi! | 
Call a function | 
boi? | 
Call a function, and execute succeeding statements if it returns true | 
boi, | 
Shorthand to call say function | 
boi: | 
Shorthand to call set function | 
Every function call begins with the boi! keyword, followed by a list of tokens
where the first token is the function name. Note that since variables are tokens,
the function name can be taken from a variable.
The say function outputs its input arguments to standard out Example:
boi! say "Hello, Boi!" boi
Output:
Hello, Boi!
The set function takes two parameters - a variable name and value Example:
boi! set subject "Boi!" boi
boi! say "Hello, " boi:subject boi
Output
Hello, Boi!
The nyan function takes any number of parameters, strings them
together and returns the output so it's available in the
ret:exit variable.
Conditionals distinguish computers from calculators. A language without conditionals is, well, a calculator.
Conditionals aren't very useful in Boi-lang yet, but here's an example anyway:
boi? nyan true boi
    boi! say "the nyan function returned true" boi
BOI
Note that block statements end with BOI.
Also note that "true" is a string. See the "truth semantics" section below for more information.
Every variable in Boi-lang is an array of bytes. This makes the truth semantics very simple:
| Situation | Memory (hex) | Result | 
|---|---|---|
| Variable doesn't exist | N/A | false | 
| ASCII string 'false' | 66 61 6c 73 65 | false | 
| Literal binary value 0 | 00 | false | 
| Anything else | any of not the above | true | 
| Term | Description | 
|---|---|
| Identifier | A valid Boi-lang identifier is any valid string. | 
| String | A string can be "in double-quotes with \"escaped quotes\"", or outside\ quotes\ with\ escaped\ spaces. | 
| Token | A token in Boi-lang refers to an input value, which is a string or variable. |