传说中的BrainFuck语言的编译器源码
c4droid吧
全部回复
仅看楼主
level 7
c4dr01d 楼主
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define TOKENS "><+-.,[]"
#define CODE_SEGMENT_SIZE 30000
#define STACK_SEGMENT_SIZE 1000
#define DATA_SEGMENT_SIZE 30000
typedef void (*Callback)(void);
struct {
char cs[CODE_SEGMENT_SIZE]; /* Code Segment */
long ip; /* Instruction Pointer */
char ss[STACK_SEGMENT_SIZE]; /* Stack Segment */
long sp; /* Stack Pointer */
char ds[DATA_SEGMENT_SIZE]; /* Data Segment */
long
bp
; /* Base Pointer */
Callback fn[128];
} vm;
void vm_forward() {
vm.bp = (vm.bp + 1) % DATA_SEGMENT_SIZE;
}
void vm_backward() {
vm.bp = (vm.bp + DATA_SEGMENT_SIZE - 1) % DATA_SEGMENT_SIZE;
}
void vm_increment() {
vm.ds[vm.bp]++;
}
void vm_decrement() {
vm.ds[vm.bp]--;
}
void vm_input() {
vm.ds[vm.bp] = getchar();
}
void vm_output() {
putchar(vm.ds[vm.bp]);
}
void vm_while_entry() {
if (vm.ds[vm.bp]) {
vm.ss[vm.sp] = vm.ip - 1;
vm.sp++;
} else {
int c = 1;
for (vm.ip++; vm.cs[vm.ip] && c; vm.ip++) {
if (vm.cs[vm.ip] == '[') {
c++;
} else if (vm.cs[vm.ip] == ']') {
c--;
}
}
}
}
void vm_while_exit() {
if (vm.ds[vm.bp]) {
vm.sp--;
vm.ip = vm.ss[vm.sp];
}
}
void setup() {
int c;
int i;
memset(&vm, 0, sizeof(vm));
vm.fn['>'] = vm_forward;
vm.fn['<'] = vm_backward;
vm.fn['+'] = vm_increment;
vm.fn['-'] = vm_decrement;
vm.fn['.'] = vm_output;
vm.fn[','] = vm_input;
vm.fn['['] = vm_while_entry;
vm.fn[']'] = vm_while_exit;
for (i = 0; (c = getchar()) != EOF;) {
if (strchr(TOKENS, c)) {
vm.cs[i] = c;
i++;
}
}
}
void run() {
while (vm.cs[vm.ip]) {
vm.fn[vm.cs[vm.ip]]();
vm.ip++;
}
}
int main(int argc, char* argv[]) {
if (argc > 1) {
freopen(argv[1], "r", stdin);
}
setup();
run();
return 0;
}
2017年03月05日 13点03分 1
level 7
c4dr01d 楼主
试运行一个BrainFuck程序如下:
2017年03月05日 13点03分 2
level 11
脑残 ??[呵呵]
2017年03月06日 01点03分 3
。。。
2017年03月06日 04点03分
回复
我是1个小白80
:Brain+Fuck不就是脑残么
2017年03月07日 15点03分
@小白爱观察 直译是脑*(脏话,不方便说)
2020年09月22日 04点09分
level 11
这么大堆,就输出一个funk?[狂汗]
2017年03月06日 05点03分 4
Hello World比这个更长
2017年03月06日 05点03分
level 10
看解释器的实现好像见过这语言但是不记得是这名字[黑线]
2017年03月07日 17点03分 5
level 1
怎么在手机上编程 的 ?
2020年06月15日 16点06分 6
我知道了 c4droid,逛哪个吧自己不知道么,没点B数。 手机下载了一个和 c4droid 界面很像的,号称 手机C语言IDE工具 的东西。开始写BrainFuck。
2020年06月18日 15点06分
level 10
好家伙,这么长代码,最终输出一个fuck???[喷]
2021年10月12日 06点10分 8
level 10
楼主写一个hello world吧[滑稽][滑稽][滑稽]
2021年10月19日 00点10分 9
level 1
看不懂
2023年08月19日 05点08分 10
1