BT雷人的程序语言.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
这个世界从来都不会缺少另类的东西,人类自然世界如此,计算机世界也一样。编程语言方面,看过本站《6个变态的C语言Hello World程序》的朋友们一定对BT和另类不会陌生,但那都是些小儿科,真正的BT和另类要是从语言级上来完成。让我们来看看其中一个比较另类的语言BrainFuck。看到这个程序语言的名字,请不要以为这是一个搞笑的语言,这是一个“严肃事情”,请大家用“最虔诚的态度”来阅读本文。 BF语言介绍 Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于“绿王八”的原因,这种语言有时被称为brainf**k或brainf***,甚至被简称为BF。这种 语言,是一种按照“Turing complete(完整图灵机)”思想设计的语言,它的主要设计思路是:用最小的概念实现一种“简单”的语言,BrainF**k 语言只有八种符号,所有的操作都由这八种符号的组合来完成。 BF基于一个简单的机器模型,除了八个指令,这个机器还包括:一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)、以及用于输入输出的两个字节流。 下面是这八种指令的描述,其中每个指令由一个字符标识: 字符 含义 指针加一 指针减一 + 指针指向的字节的值加一 - 指针指向的字节的值减一 . 输出指针指向的单元内容(ASCII码) , 输入内容到指针指向的单元(ASCII码) [ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处 ] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处 (按照更节省时间的简单说法,]也可以说成“向后跳转到对应的[状态”。这两解释是一样的。) (第三种同价的说法,[意思是向前跳转到对应的]“,]意思是”向后跳转到对应的[指令的次一指令处,如果指针指向的字节非零。) Brainfuck程序可以用下面的替换方法翻译成C语言(假设ptr是char*类型): Brainfuck C ++ptr; --ptr; + ++*ptr; - --*ptr; . putchar(*ptr); , *ptr =getchar(); [ while (*ptr) { ] } BF解释器 因为 BrainFuck 只有八种指令,并且没有关键字,也不允许自定义标识符,因此它的编译器实现起来非常简单,初学 C 语言不久的人都可以自己编出来,尽管在座的各位每人都可以自己编一个,不过为了引起大家的兴趣,我这里还是给出大家一个官方发布的版本。这个程序只有短短 50 多行,并且完全由 ANSI C 写成,因此你随便找个 C 语言编译器,把它编译一下。 查看源代码打印帮助01 #include ; 02 03 int p, r, q; 04 char a[5000], f[5000], b, o, *s=f; 05 06 void interpret(char *c) 07 { 08 char *d; 09 10 r++; 11 while( *c ) { 12 //if(strchr(?;+-,.[]\n?*c))printf(?c?*c); 13 switch(o=1,*c++) { 14 case ? : p--; break; 15 case ;? p++; break; 16 case ?? a[p]++; break; 17 case ?? a[p]? break; 18 case ?.? putchar(a[p]); fflush(stdout); break; 19 case ?? a[p]=getchar();fflush(stdout); break; 20 case 慬: 21 for( b=1,d=c; b *c; c++ ) 22 b+=*c==[, b-=*c==]? 23 if(!b) { 24 c[-1]=0; 25 while( a[p] ) 26 interpret(d); 27 c[-1]=抅; 28 break; 29 } 30 case 慮? 31 puts(揢NBALANCED BRACKETS?, exit(0); 32 case ?? 33 if(q;2) 34 printf(?2d %2d %2d %2d %2d %2d %2d %2d %2d %2d\n%*s\n? 35 *a,a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],3*p+2,擽?; 36 break; 37 default: o=0; 38 } 39 if( p0 || p;100) 40 puts(揜ANGE ERROR?, exit(0); 41

文档评论(0)

PPT精品 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档