`
谁解怨妇心
  • 浏览: 28397 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

打造BrainFuck解释器

阅读更多
  关于BrainFuck的wiki百科解释:http://zh.wikipedia.org/wiki/Brainfuck
  虽然这门语言的名字很不雅,但能实现几乎所有的功能,虽然写出来的程序要看懂就是一件十分难的事情了……不过可以看出外国人是将技术跟恶搞娱乐地结合在一起,啥时候咱们中国人也能搞点这样的东西出来呢?
  由于只有8个字符,所以解释器实现起来是十分简单,就算要写编译器的话……无非也就是将8个状态换成是opcode,再构造一个PE文件头将汇编代码写进去而已……
  解释器代码如下:
#include<stdio.h>
#include<malloc.h>
#include<string.h>

char br[]="++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.";

int main()
{
	char *eip = br;
	char *mem = (char*)malloc(100);
	char *ptr = mem;
	bool isright = true;
	while(*eip != 0)
	{
		if(*eip == '[')
		{
			while(*eip!=0 && *eip!=']')
				++eip;
			if(*eip == 0)
				isright = false;
		}
		else if(*eip == ']')
			isright = false;

		if(!isright)
		{
			printf("The brainfuck code has some wrong!\n");
			return 0;
		}
		++eip;
	}
	
	memset(ptr,0,100);

	eip = br;

	do
	{
		switch(*eip)
		{
		case '>':
			++ptr;
			break;
		case '<':
			--ptr;
			break;
		case '+':
			++*ptr;
			break;
		case '-':
			--*ptr;
			break;
		case '.':
			putchar(*ptr);
			break;
		case ',':
			*ptr = getchar();
			break;
		case '[':
			if(*ptr == 0)
			{
				do
				{
					++eip;
				}while(*eip!=']');
			}
			break;
		case ']':
			if(*ptr != 0)
			{
				do
				{
					--eip;
				}while(*eip!='[');
			}
			break;
		}
		if( (ptr-mem)>100)
		{
			printf("Stack overflow!\n");
			break;
		}
		++eip;
	}while(*eip!=0);
	free(mem);
	return 0;
}
				

  br字符数组中的是Hello world!的代码,编译后运行果然就出现了Hello world!的字符串了~
分享到:
评论

相关推荐

    Brainfuck VM Brainfuck解释器

    Brainfuck解释器,以一个虚拟机的形式运行Brainfuck代码,完整支持Brainfuck标准语句(&gt;。,[])。

    brainfuck, 在C 语言中,Brainfuck解释器编写了.zip

    brainfuck, 在C 语言中,Brainfuck解释器编写了 brainfuck 用C 编写的Brainfuck解释器。用法brainfuck [-veh] file...-e --eval run code directly-v --version show versi

    Brainfuck-RF解释器

    Brainfuck-RF解释器,这个语言很少见啊。。

    BrainFuck语言解释器及一些demo

    这个压缩包包含的资源是关于BrainFuck语言解释器及其一些示例程序。 BrainFuck的语言结构非常简单,只有8个基本命令,分别用英文字符表示: 1. `&gt;`:指针移动(Pointer Increment):将数据指针向右移动一位。 2. ...

    brainfuck:Brainfuck解释器和Eclipse编辑器

    Brainfuck解释器和Eclipse编辑/调试支持。 用Java编写的Brainfuck解释器。 解释器支持进程调试,即调试器必须在同一Java进程中运行。 Eclipse功能,包括编辑器和调试插件。 Brainfuck口译员 特征: 内部存储器...

    Python-systemf一个brainfuck解释器支持Linux系统调用

    **Python-systemf:一个Brainfuck解释器支持Linux系统调用** 在编程世界中,Brainfuck是一种极简主义的编程语言,旨在挑战程序员的创新思维,而不是用于实际开发。它的语法非常简单,只有8个基本操作符,但在实现...

    Brainfuck:小型 Python Brainfuck 解释器和文本编码器

    Brainfuck 解释器和编码器 Brainfuck 是一种,有 8 条指令。 这个项目有两个部分: 解释器 - 解释无脑代码 编码器 - 生成(合理地)压缩的脑子代码来输出字​​符串( ) 口译员( Brainfuck.py ) Brainfuck 的...

    brainfuck_interpreter:C语言中的Brainfuck解释器

    标题"brainfuck_interpreter:C语言中的Brainfuck解释器"表明这是一个用C语言编写的程序,它的主要功能是解释执行Brainfuck编程语言的代码。Brainfuck是一种极简主义的编程语言,设计初衷是为了挑战编程语言的极限,...

    Brainfuck代码解释器(C++)

    注意事项:这个解释器对于Brainfuck有65536个存储空间,存储空间采用unsigned char存储(即范围为0~255),代码嵌套不能超过1024层,代码长度不能超过16777216。由于这里的输入输出采用getch和putch,因此用户输入...

    BRAINFUCK解释器:编译BRAINFUCK语言

    将你要编译的BRAINFUCK程序保存为Compilation.brainfuck在同目录下,运行本程序,即可

    python-brainfuck:用Python编写的Brainfuck解释器

    用Python编写的Brainfuck解释器。 要求 类似于UNIX的操作系统 吉特 Python 本地安装 HTTPS $ git clone https://github.com/aminnairi/python-brainfuck $ cd python-brainfuck SSH协议 $ git clone git@github....

    brainjack:用Java编写的Brainfuck解释器

    在Java中编写Brainfuck解释器涉及到以下几个关键步骤: 1. **字符读取与解析**:首先,程序需要读取Brainfuck源代码,并将这些源代码转换成可执行的指令序列。这通常通过遍历源代码字符串,对每个字符进行处理来...

    brainfuck:Android Brainfuck解释器

    标题“brainfuck:Android Brainfuck解释器”揭示了我们要讨论的是一个在Android平台上运行的特定编程语言解释器,这个解释器是为Brainfuck语言设计的。Brainfuck是一种极简主义的、低级的编程语言,由Urban Müller...

    brainfuck:Brainfuck解释器的多语言实现

    脑干Brainfuck解释器的多语言实现。 完全没有限制! 做你想干的事!执行C cpp 节点PHPBrainfuck脚本hello-world-1 hello-world-2 添加乘up贡献拉请求是受欢迎的:)关于Brainfuck 以下内容来自维基百科。 检查以了解...

    Brainfuck编译器和JIT解释器bfc.zip

    这个名为"bfc.zip"的压缩包包含了一个开源项目,旨在为Brainfuck语言提供一个基于LLVM的编译器和即时(JIT)解释器。下面我们将深入探讨Brainfuck、LLVM以及编译器和解释器的工作原理。 1. **Brainfuck语言** - ...

    [brainfuck解密工具](完整源代码程序)

    C/C++/asm/Javascript/Python/Rust+others中的脑洞解释器/翻译器的集合。JS版本包含一个交互式“IDE”,可以在纯JS或Wasm引擎之间进行选择。有两种JIT实现:在C++和Rust中。 Contents Intro Programs Languages asm ...

    brainfuck:用JavaScript编写的交互式Brainfuck解释器

    "brainfuck:用JavaScript编写的交互式Brainfuck解释器" 这个标题告诉我们,我们正在讨论一个项目,它是一个基于JavaScript实现的Brainfuck编程语言的解释器。Brainfuck是一种极简主义的、低级的编程语言,主要用于...

    一个简单的brainfuck语言的解释器.zip

    一个简单的brainfuck语言的解释器.zip一个简单的brainfuck语言的解释器.zip一个简单的brainfuck语言的解释器.zip一个简单的brainfuck语言的解释器.zip一个简单的brainfuck语言的解释器.zip

    Missandei:Brainfuck解释器的Java实现

    《Missandei:Java实现的Brainfuck解释器详解》 在编程世界中,存在一种名为Brainfuck的语言,它以其简洁的语法和极高的抽象性著称。这种语言的设计旨在挑战程序员的理解极限,同时也为理解计算机底层工作原理提供...

    BFR:Brainfuck 解释器使用 ANTLR3 解析器生成器

    "BFR: Brainfuck 解释器使用 ANTLR3 解析器生成器" 这个标题提到了两个关键概念:Brainfuck 和 ANTLR3。Brainfuck 是一种极简主义的编程语言,设计用于教育和娱乐,其语法极其简单,只有八个基本命令。ANTLR3 是一个...

Global site tag (gtag.js) - Google Analytics