本文最后更新于:June 30, 2023 pm

一个非常简单的解释器:BrainFuck

#include <stdio.h>
#include <stdlib.h>
//
// 此处的是Brainfuck源码,从文件里面读
//
char program[] = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.";
// 内存大小默认4k
int data[1024 * 4];
int pc = 0;
char token = 0;
int current_pos = 0;
int stack = 0;
//-----------------------------------------------------------------
int main(int argc, char *v[])
{
    while ((token = program[pc]))
    {
        if (token == '>')
        {
            current_pos++;
        }
        if (token == '<')
        {
            current_pos--;
        }
        if (token == '+')
        {
            data[current_pos]++;
        }
        if (token == '-')
        {
            data[current_pos]--;
        }
        if (token == '.')
        {
            putc(data[current_pos],
                 stdout);
        }
        if (token == ',')
        {
            data[current_pos] = getc(stdin);
        }
        while (token == '[' && !data[current_pos])
        {
            if (program[pc] == '[')
            {
                stack++;
            }
            if (program[pc] == ']' && stack-- == 1)
            {
                break;
            }
            pc++;
        }
        while (token == ']' && data[current_pos])
        {
            if (program[pc] == ']')
            {
                stack++;
            }
            if (program[pc] == '[' && stack-- == 1)
                break;
            pc--;
        }
        pc++;
    }
}

可玩玩这个:https://ashupk.github.io/Brainfuck/brainfuck-visualizer-master/index.html
图形化演示,比较有助于理解。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

记录一件心痛的事情 Previous
一个非常简单的HASH函数 Next