It's my own programming language that can generate bytecodes (executed by a custom interpreter) and brainfuck (with limitations).
I found a youtuber who made a great tutorial series showing how to make a parser and a compiler. I basically copied the code with minimal changes. When the series ended, I was left on my own, so I improved the code myself.
BBLang [options...] source
-
--help
Prints some information about the program -
--verbose
Prints some information about the compilation process -
--format format
Specifies which generator to use. Supported formats arebytecode
,brainfuck
andassembly
.
Warning
Brainfuck sometimes aint working.
Warning
Assembly 100% not working.
-
--debug
Launches the debugger screen (only avaliable on Windows) More info -
--output file
Writes the generated code to the specified file (this option only works for brainfuck) -
--throw-errors
Crashes the program whenever an exception thrown. This useful for me when debugging the compiler. -
--print-instructions
Prints the generated instructions before execution -
--print-memory
Prints the memory after execution -
--basepath directory
Sets the path where source files will be searched forusing
statements -
--dont-optimize
Disables all optimization -
--no-debug-info
Disables debug information generation (if you compiling into brainfuck, generating debug informations will take a lots of time) -
--stack-size size
Specifies the stack size -
--heap-size size
Specifies the HEAP size
Note
For brainfuck, if you specify zero the HEAP will not be initialized and wherever you try to access it, it will not compile.
Note
Because of how HEAP represented, its size can't be larger than 126.
--no-nullcheck
Disables null check generation when dereferencing a pointer
using "https://raw.githubusercontent.com/BBpezsgo/Interpreter/master/StandardLibrary/System.Console.bbc";
PrintLine("hello, world");
This can be fixed by install this.
/Examples
Some basic examples for using the project. I only tested theExposedFunctions.cs
,ExternalFunctions.cs
andHelloWorld.cs
😅./StandardLibrary
Contains some preimplemented functions and structures and some "external function" declarations./TestFiles
Contains all the test files I use for testing the project./Source
All the source code for the core functionality can be found here./Utility
This contains the command line utility and the debugger.
Note
With .NET 9 this is already installed.
- The core library
- Win32-Stuff
- Maths
- Import the
/Unity/package.json
to the Unity project. - Make sure to make a symlink to the Sources directory. Run this inside the
/Unity
directory:
ln -s ../Source Runtime
Note
If you are on Windows, move and rename the /Source
directory to /Unity/Runtime
.
- Inside Unity, naviage to
Edit > Project Settings... > Player > Other Settings > Scripting Define Symbols
and add theUNITY
variable. - If you are using the Burst compiler, add
UNITY_BURST
too. - If you are not using the Burst compiler, remove the
Unity.Burst
reference from/Unity/BBLang.asmdef
. - If you want some profiler analytics, add
UNITY_PROFILER
too. - You can install the necessary NuGet packages with this tool: NuGetForUnity.