搜索
bottom↓
回复: 3

[转]BrainFuck 语言

[复制链接]

出0入0汤圆

发表于 2011-9-23 16:30:24 | 显示全部楼层 |阅读模式
BrainFuck 语言,是一种按照“Turing complete”思想设计的语言,它的主要设计思路是:用最小的概念实现一种“简单”的语言,BrainFuck 语言只有八种符号,所有的操作都由这八种符号的组合来完成。

BrainFuck 基于一个简单的机器模型,除了八个指令,这个机器还包括:一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)、以及用于输入输出的两个字节流。

因为 BrainFuck 只有八种指令,并且没有关键字,也不允许自定义标识符,
因此它的编译器实现起来非常简单,初学 C 语言不久的人都可以自己编出来,尽管在座的各位每人都可以自己编一个,不过为了引起大家的兴趣,我这里还是给出大家一个官方发布的版本:

[Copy to clipboard] [ - ]
CODE:
#include <stdio.h>;
int  p, r, q;
char a[5000], f[5000], b, o, *s=f;
void interpret(char *c)
{
        char *d;
        r++;
        while( *c ) {
                //if(strchr("<>;+-,.[]\n",*c))printf("%c",*c);
                switch(o=1,*c++) {
                case '<': p--;        break;
                case '>;': p++;        break;
                case '+': a[p]++;     break;
                case '-': a[p]--;     break;
                case '.': putchar(a[p]); fflush(stdout); break;
                case ',': a[p]=getchar();fflush(stdout); break;
                case '[':
                        for( b=1,d=c; b && *c; c++ )
                                b+=*c=='[', b-=*c==']';
                        if(!b) {
                                c[-1]=0;
                                while( a[p] )
                                        interpret(d);
                                c[-1]=']';
                                break;
                        }
                case ']':
                        puts("UNBALANCED BRACKETS"), exit(0);
                case '#':
                        if(q>;2)
                                printf("%2d %2d %2d %2d %2d %2d %2d %2d %2d %2d\n%*s\n",
                                       *a,a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],3*p+2,"^");
                        break;
                default: o=0;
                }
                if( p<0 || p>;100)
                        puts("RANGE ERROR"), exit(0);
        }
        r--;
//        chkabort();
}

main(int argc,char *argv[])
{
       FILE *z;
        q=argc;
        if(z=fopen(argv[1],"r")) {
                while( (b=getc(z))>;0 )
                        *s++=b;
                *s=0;
                interpret(f);
        }
}

这个程序只有短短 50 多行,并且完全由 ANSI C 写成,因此你随便找个 C 语言编译器,把它编译一下:

[Copy to clipboard] [ - ]
CODE:
gcc -o bfi bfi.c

之后,你就可以用它来运行 BrainFuck 程序了。

和所有的计算机语言一样,下面我给出一个“Hello World”程序:

[Copy to clipboard] [ - ]
CODE:
>;+++++++++[<++++++++>;-]<.>;+++++++[<++++>;-]<+.+++++++..+++.[-]>;++++++++[<++++>;-]
<.#>;+++++++++++[<+++++>;-]<.>;++++++++[<+++>;-]<.+++.------.--------.[-]>;++++++++[
<++++>;-]<+.[-]++++++++++.

是不是很恐怖?

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2011-9-23 17:59:50 | 显示全部楼层
回复【楼主位】ShawnLinson 昇

和所有的计算机语言一样,下面我给出一个“Hello World”程序:

[Copy to clipboard] [ - ]
CODE:
>;+++++++++[<++++++++>;-]<.>;+++++++[<++++>;-]<+.+++++++..+++.[-]>;++++++++[<++++>;-]
<.#>;+++++++++++[<+++++>;-]<.>;++++++++[<+++>;-]<.+++.------.--------.[-]>;++++++++[
<++++>;-]<+.[-]++++++++++.
-----------------------------------------------------------------------

lz复制的不完整

出0入0汤圆

发表于 2011-9-23 19:22:52 | 显示全部楼层
这语言有何用处?

出0入0汤圆

发表于 2011-9-23 19:46:21 | 显示全部楼层
回复【2楼】ididr  
这语言有何用处?
-----------------------------------------------------------------------
强奸大脑嘛
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 04:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表