Awesome Open Source
Awesome Open Source

Box is a text-based visual programming language inspired by Unreal Engine blueprint function graphs.

$ cat factorial.box

 (Factorial)                     [Branch]                       [Set]
                       True               [For Loop]                   
              n                      False                              Loop body       
                              result                                                     *=  
                 >=                                                   result         
              1                                                              1  start                     
                                                  1                                                               
                                                                                                                   index 
                                                                                                                          
                                                                                   n                              
                                                                                     +                              
                                                                                         end                 
                                                                                   1                              
                                                                                                                          
                                                                                                                          
                                                             [Return]                        1  step                
                                                                                                   Completed 
                                                    1                                                 [Return]
                                                                                                                   
                                                                                                                          result          
                                                                                                                               

$ box factorial.box -e 5
120

$ box factorial.box -o factorial.py

$ cat factorial.py
def Factorial(n):
    if (n >= 1):
        result = 1
        for index_8b6ee4f2 in range(1, (n + 1), 1):
            result *= index_8b6ee4f2
        return result
    else:
        return 1

Getting Started

Install the box interpreter with pip

pip3 install boxlang

Now open your text editor and start drawing your program! Check out existing samples here.

Anatomy of a Box

A Box has 2 types of ports: control flow ports () and data flow ports (). These ports can additionally be classified as input or output ports. All ports to the left side of a box are input ports and all ports on the right side of the box are output ports.

Below, you can see a [For Loop] box which is a special type of box that the interpreter can parse - It has 1 input control flow port, 3 input data flow ports (start, end, and step), 2 output control flow ports (the loop body and completed control flows), and 1 output data flow port (the index)

image

Function Graphs

Box programs are function graphs. Functions have a single entry point designated by a node with the name of the Function containing a single output control flow port.

Here's a simple hello world example. This example declares a Greet() function that prints the string "Hello, World!" to the console. It calls the built-in print function.

image

Execute the above program with the box interpreter like so:

$ box samples/hello_world.box -e
Hello,World!

Features

  • Function declarations
  • Defining constants and variables
  • Operators - Unary, binary, and assignment operators
  • [Set] - set the value of variables
  • Function calls - Call Python built-in functions
  • [Branch] - if-else box
  • [For Loop] - Python-style for loop with (start,end,step)
  • [While Loop] - Python-style while loop
  • [For Each] for iterables
  • [Break] and [Continue] boxes
  • [Return] box to return values from functions

Gotchas

  • The interpreter will likely fail if you have tabs in your file - replace all tabs with the appropriate number of spaces
  • There are a number of UNICODE character you'll need for this to work - Just look through the samples and COPY-PASTE (no, seriously)

Contributing

Contributions are welcome, have a look at the CONTRIBUTING.md document for more information.

License

The project is available under the MIT license.



Alternative Project Comparisons
Related Awesome Lists
Top Programming Languages
Top Projects

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Python (806,104
Unreal Engine (2,254
Transpiler (1,103
Esoteric Language (333
Esoteric Programming Language (155
Flow Based Programming (80
Visual Programming Language (46
Node Graph (27
Blueprints Visual Scripting (6