Skip to content

BBpezsgo/Interpreter

Repository files navigation

My Programming Language

.Net 9.0 C# 11

About

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.

Command Line Arguments

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 are bytecode, brainfuck and assembly.

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 for using 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

Hello World:

using "https://raw.githubusercontent.com/BBpezsgo/Interpreter/master/StandardLibrary/System.Console.bbc";

PrintLine("hello, world");

api-ms-win-crt-string-l1-1-0.dll Missing Error

This can be fixed by install this.

Project Structure

  • /Examples Some basic examples for using the project. I only tested the ExposedFunctions.cs, ExternalFunctions.cs and HelloWorld.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.

Project Dependencies

Core Library

Note

With .NET 9 this is already installed.

Command Line Utility

Unity

  • 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 the UNITY 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.

About

High level programming language that compiles into custom bytecodes and brainfuck

Topics

Resources

Stars

Watchers

Forks