Write Brainfuck once, call it as a C# method.
using Esolang.Brainfuck;
Console.WriteLine(BrainfuckSample.SampleMethod1());
partial class BrainfuckSample
{
[GenerateBrainfuckMethod("++++++[>++++++++<-]++++++++++[>.+<-]")]
public static partial string? SampleMethod1();
}
// output:
// 0123456789As far as we know, this is the first Brainfuck source generator for .NET.
For detailed Generator signatures and patterns, see:
| Attribute Argument | partial Method Parameters (Input) |
partial Method Return Types (Output) |
|---|---|---|
string (Source) |
TextReader?, PipeReader?, byte[]? |
void, string, string?, int, Task, ValueTask, IEnumerable<byte>, IAsyncEnumerable<byte> |
For runnable examples, see:
| Area | Status |
|---|---|
| Core Brainfuck instructions | ✅ |
[ ] matching |
✅ |
| Event-based I/O | ✅ |
TextReader / PipeReader input (Adapter) |
✅ |
TextWriter / PipeWriter output (Adapter) |
✅ |
dotnet add package Esolang.Brainfuck.Generator
dotnet add package Esolang.Brainfuck.Parser
dotnet add package Esolang.Brainfuck.Processor
dotnet tool install -g dotnet-brainfuck| Want to do | Package |
|---|---|
| Generate C# methods from Brainfuck at compile time | Esolang.Brainfuck.Generator |
| Parse source into sequence tokens | Esolang.Brainfuck.Parser |
| Execute Brainfuck in-process (Event-based) | Esolang.Brainfuck.Processor |
| Run Brainfuck from CLI | dotnet-brainfuck |
This project is licensed under the MIT License - see the LICENSE file for details.
| Project | NuGet | Summary |
|---|---|---|
| dotnet-brainfuck | brainfuck command line utility dotnet-brainfuck command. | |
| Esolang.Brainfuck.Generator | brainfuck method generator. | |
| Esolang.Brainfuck.Parser | brainfuck source parser. | |
| Esolang.Brainfuck.Processor | brainfuck processor. |
| Project | Target frameworks |
|---|---|
| Esolang.Brainfuck.Generator | netstandard2.0 |
| Esolang.Brainfuck.Parser | net8.0, net9.0, net10.0, netstandard2.1, netstandard2.0 |
| Esolang.Brainfuck.Processor | net8.0, net9.0, net10.0, netstandard2.1, netstandard2.0 |
| dotnet-brainfuck | net8.0, net9.0, net10.0 |