免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 44389 | 回复: 64
打印 上一主题 下一主题

娱乐一下,介绍一种语言——brainfuck [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-31 20:49 |只看该作者 |倒序浏览
语言一共只有8个符号
+-><.,[]
brainfuck的程序全部都由这8个符号构成
初始化的时候,有一个连续的两个方向都无限长的内存,内存的每个字节值是0。
有一个指针p,指向其中一个字节。
每个符号的意义如下:
+  指针指向的这个字节自加
-   指针指向的这个字节自减
>  指针向右移一个字节
<  指针向左移一个字节
.   输出指针指向的这个字节
,   输入这个字节,存在指针指向的这个字节
[   如果指针指向的这个字节,则进入循环节
]   回到匹配的[(比如[--.[++>.[+]---].-],^指着的两个是匹配的])
                               ^              ^

以下程序输出我的ID

  1. ++++++++++[>++++++++++[>+<-]<-]>>-.+++++++.---------.++++++++.
  2. >>++++[<++++[<+>-]>-]<<+.-------..
复制代码


自举编译器在39楼
C语言写的解释器在42楼

[ 本帖最后由 cjaizss 于 2008-6-9 17:05 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2008-05-31 22:07 |只看该作者
以下是用sed写的一个编译器:
  1. #! /bin/sed -f
  2. s/[^][+<>.,-]//g
  3. s/\([-+]\)/\1\1*p;/g
  4. s/</p--;/g
  5. s/>/p++;/g
  6. s/\./putchar(*p);/g
  7. s/,/*p=getchar();/g
  8.      s/\[/while (*p) {/g
  9.      s/\]/}/g
  10.      1s/^/#include <stdio.h>\
  11.      int main(void){char *p=calloc(1,10000);/
  12.      $s/$/}/

  13.      /./!d

  14. # Here is an example BF program
  15. #
  16. # +[>>+++++[<++++++>-]<[>++++[>++++++++<-]<[->+>.<<]>[-<+>]+++++
  17. # [>+++++<-]>+++.-.<+++[>------<-]>.---------.<+++++[>++++++<-]>
  18. # .--.[-]++++++++++.[-]<<-]>+++++[<++++++>-]>>[-]<<<[>++++[>++++
  19. # ++++<-]>>[<.>>+<-]>[-<+>]<+<<+++++[->++++++<]>.--.<++++[>-----
  20. # --<-]>.++++++++.<+++[>++++++<-]>.++++.[-]++++++++++.[-]<<-]<]

复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2008-05-31 22:13 |只看该作者
我写的C语言解释器:

  1. /*bf.c*/
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. char s[30000]={0};
  5. char code[100000];
  6. int len = 0;
  7. int  stack[100];
  8. int stack_len=0;
  9. int main(int argc,char**argv)
  10. {
  11.         char c;
  12.         int i=0,j,k,x=0;
  13.         FILE* f;
  14.         char* p=s+10000;
  15.         if(argc==2) {
  16.                 f=fopen(argv[1],"r");
  17.                 if(f==NULL) {
  18.                         perror("fopen");
  19.                                 return 1;
  20.                 }
  21.                 while(fread(&code[len],1,1,f)==1) {
  22.                         len++;
  23.                 }
  24.         } else {
  25.                 fprintf(stderr,"%s:%d\n",__FILE__,__LINE__);
  26.                 return 2;
  27.         }
  28.         setbuf(stdout,NULL);
  29.         while(i<len) {
  30.                 switch(code[i]) {
  31.                         case '+':
  32.                                 (*p)++;
  33.                                 break;
  34.                         case '-':
  35.                                 (*p)--;
  36.                                 break;
  37.                         case '>':
  38.                                 p++;
  39.                                 break;
  40.                         case '<':
  41.                                 p--;
  42.                                 break;
  43.                         case '.':
  44.                                 putchar((int)(*p));
  45.                                 //printf("put:%hd\n",*p);
  46.                                 break;
  47.                         case ',':
  48.                                 *p=getchar();
  49.                                 break;
  50.                         case '[':
  51.                                 if(*p) {
  52.                                         stack[stack_len++]=i;
  53.                                 } else {
  54.                                         for(k=i,j=0;k<len;k++) {
  55.                                                 code[k]=='['&&j++;
  56.                                                 code[k]==']'&&j--;
  57.                                                 if(j==0)break;
  58.                                         }
  59.                                         if(j==0)
  60.                                                 i=k;
  61.                                         else {
  62.                                                 fprintf(stderr,"%s:%d\n",__FILE__,__LINE__);
  63.                                                 return 3;
  64.                                         }
  65.                                 }
  66.                                 break;
  67.                         case ']':
  68.                                 i=stack[stack_len-- - 1]-1;
  69.                                 break;
  70.                         default:
  71.                                 break;
  72.                 }
  73.                 i++;
  74.                 //x++;
  75.                 //printf("%d : i=%d\n",x,i);
  76.         }
  77.         return 0;
  78. }

复制代码

[ 本帖最后由 cjaizss 于 2008-6-7 12:36 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2008-05-31 22:15 |只看该作者
准备写个brainfuck自举编译器,但是写的过程中才意识到并非那么容易。要解决一个看起来其实很微小的东西——分支,但是想不出如何解决,今天放弃,明天继续

[ 本帖最后由 cjaizss 于 2008-6-1 04:19 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2008-06-01 13:42 |只看该作者
终于写成了一个,可是我并不是很满意。我写的这个程序只接受bf语言的8个符号,如果有别的符号过来,编译的结果会是错误的,即使进来的字符是\n,\t和空格
另外就是编译器实际所需内存与源码长度成正比(在规则如此简单的语言里不应该存在这种问题,但我暂时只能想到这个办法)
假如把我那个C语言的bf解释器编译之后定为/usr/local/bin/mybf
以下编译器文件为/usr/local/bin/bf2c.bf
源文件为1.bf
则编译1.bf为1.c的命令为
bf2c.bf <1.bf >1.c
如果1.bf中含有8个符号之外的符号,一般编译则可以如下:
cat 1.bf|tr -dC '<>[]+.,-'| bf2c.bf >1.c
则bf的自举编译器如下:

  1. #!/usr/local/bin/mybf
  2. +++++++++++++++++++++++++++++++++++.
  3. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  4. +++++.
  5. -----------.
  6. +++++++++.
  7. +++++++++.
  8. -----------------.
  9. +.
  10. ---------------------------------------------------------------------.
  11. ++++++++++++++++++++++++++++.
  12. +++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  13. +.
  14. ----------------.
  15. +++++.
  16. ++++++.
  17. -----------------------------------------------------------------.
  18. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  19. ------------------------------------------.
  20. ----------------------------------------------------.
  21. +++++++++++++++++++++++++.
  22. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  23. +++++.
  24. -----------.
  25. +++++++++.
  26. +++++++++.
  27. -----------------.
  28. +.
  29. ---------------------------------------------------------------------.
  30. ++++++++++++++++++++++++++++.
  31. +++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  32. +.
  33. ----------------.
  34. ++++++++.
  35. ---.
  36. -------.
  37. ----------------------------------------------------.
  38. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  39. ------------------------------------------.
  40. ----------------------------------------------------.
  41. +++++++++++++++++++++++++.
  42. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  43. +.
  44. +.
  45. +++.
  46. +++++.
  47. ---------.
  48. ---------------------------------------------------------------------.
  49. +++++++++++++++++++++++++++++++++.
  50. ---------------------------------.
  51. +++++++++++..
  52. -.
  53. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  54. -----------------------------------------------------.
  55. -------------------------------------------------.
  56. +++++++++++++++++++++++++.
  57. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  58. +.
  59. +.
  60. +++.
  61. +++++.
  62. ---------.
  63. ---------------------------------------------------------------------.
  64. ++++++++++++++++++++++++++++++++++.
  65. ----------------------------------.
  66. ++++++++++.
  67. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  68. ---------------------------------------------------.
  69. ++++++++++++++++++++++++++++++++++++++++++.
  70. --.
  71. +++++++++++++++.
  72. -----------------.
  73. +++++.
  74. -------.
  75. +++++++++++++++++.
  76. --------------------------------------------------------------------------.
  77. +.
  78. ++++++++++++++++++.
  79. -------------------------------------------------.
  80. +++++++++++++++++++++++++.
  81. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  82. +.
  83. +.
  84. +++.
  85. +++++.
  86. ---------.
  87. ---------------------------------------------------------------------.
  88. +++++++++++++++++++++++++++++++++++.
  89. -----------------------------------.
  90. +++++++++++++..
  91. ---.
  92. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  93. -----------------------------------------------------.
  94. -------------------------------------------------.
  95. +++++++++++++++++++++++++.
  96. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  97. +.
  98. +.
  99. +++.
  100. +++++.
  101. ---------.
  102. ---------------------------------------------------------------------.
  103. ++++++++++++++++++++++++++++++++++++.
  104. ------------------------------------.
  105. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  106. +++++.
  107. -.
  108. -----------------.
  109. +++++.
  110. -------.
  111. +++++++++++++++++.
  112. --------------------------------------------------------------------------.
  113. ++.
  114. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  115. -----------------------------------------------------------------------.
  116. ++++++++++++++++++.
  117. -------------------------------------------------.
  118. +++++++++++++++++++++++++.
  119. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  120. +.
  121. +.
  122. +++.
  123. +++++.
  124. ---------.
  125. ---------------------------------------------------------------------.
  126. ++++++++++++++++++++++++++++++++++++++++++++++++++.
  127. --------------------------------------------------.
  128. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  129. -------------------------------------------------------------------..
  130. ++++++++++++++.
  131. -------------------------------------------------.
  132. +++++++++++++++++++++++++.
  133. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  134. +.
  135. +.
  136. +++.
  137. +++++.
  138. ---------.
  139. ---------------------------------------------------------------------.
  140. ++++++++++++++++++++++++++++++++++++++++++++++++++++.
  141. ----------------------------------------------------.
  142. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  143. ---------------------------------------------------------------------..
  144. ++++++++++++++++.
  145. -------------------------------------------------.
  146. +++++++++++++++++++++++++.
  147. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  148. +.
  149. +.
  150. +++.
  151. +++++.
  152. ---------.
  153. ---------------------------------------------------------------------.
  154. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  155. ---------------------------------------------------------------------------------.
  156. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  157. ---------------.
  158. +.
  159. +++.
  160. -------.
  161. -------------------------------------------------------------.
  162. ++.
  163. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  164. -----------------------------------------------------------------------.
  165. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  166. -----------------------------------------------------------------------------------------------------------------.
  167. +++++++++++++++++++++++++.
  168. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  169. +.
  170. +.
  171. +++.
  172. +++++.
  173. ---------.
  174. ---------------------------------------------------------------------.
  175. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  176. -----------------------------------------------------------------------------------.
  177. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  178. -------------------------------------------------------------------------------------------------------------------.
  179. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  180. +++++.
  181. -------.
  182. +++++++++++++++++.
  183. ----------------------------------------------------------------------------------.
  184. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  185. -----------------------.
  186. ---------------------------------------.
  187. ----....
  188. +++++++++++++++++++++++++++++++++++++++++++++.
  189. --------------------------------.
  190. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  191. ---------------------------------------------------------------------------.
  192. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  193. ------------------------------------------------------------------.
  194. ++++++++++++++++++++++++++++++++++++++++++++++.
  195. +++++.
  196. ++++++.
  197. ------------------------------------------------------------------------------------.
  198. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  199. ------------.
  200. ++++++++.
  201. +++++.
  202. ----------------------------------------------------------------------.
  203. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  204. -------.
  205. ------.
  206. -----.
  207. -----------------------------------------------------------.
  208. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  209. ------------------------.
  210. +++++.
  211. -------.
  212. +++++++++++++++++.
  213. ------------------------------------------------------------------------.
  214. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  215. ---------------------------------------------------.
  216. +++++++++++++++++++++++++++++++++++++++++++++++++++++.
  217. -----------------------------------------------------------------------.
  218. ++++++.
  219. -....
  220. +++++++++++.
  221. -------------------------------------------------..


  222. /////////////////////////////cjaizss compile////////////////////////
  223. >
  224. +
  225. [
  226.         [-]+
  227.         >
  228.         ,
  229.         +
  230.         [
  231.                 +++++++++++++++++++++.
  232.                 [-]
  233.                 ++++++++++.
  234.                 [-]
  235.                 >
  236.         ]
  237.         <
  238.         -
  239. ]
  240. ////////////////////////////////////////////////////////////////


  241. [-]
  242. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  243. -------------.
  244. +++++++++++++++.
  245. +.
  246. ---.
  247. ----.
  248. ------------------------------------------------------------------------------.
  249. ++++++++++++++++.
  250. +++++++++++.
  251. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
  252. [-]
  253. ++++++++++.

复制代码

[ 本帖最后由 cjaizss 于 2008-6-7 19:24 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-06-01 13:51 |只看该作者
c版在深入计算理论?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2008-06-01 14:41 |只看该作者
呵呵,做这个纯属娱乐

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
8 [报告]
发表于 2008-06-01 17:10 |只看该作者
优化之后的bf解释器程序bf

  1. /*bf.c*/
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. char s[30000]={0};
  5. char code[100000];
  6. int len = 0;
  7. int  stack[100];
  8. int stack_len=0;
  9. int main(int argc,char**argv)
  10. {
  11.         char c;
  12.         int i,j,k,x=0;
  13.         int m,n;
  14.         FILE* f;
  15.         char* p=s+10000;
  16.         if(argc==2) {
  17.                 f=fopen(argv[1],"r");
  18.                 if(f==NULL) {
  19.                         perror("fopen");
  20.                                 return 1;
  21.                 }
  22.                 while(fread(&code[len],1,1,f)==1) {
  23.                         len++;
  24.                 }
  25.         } else return 2;
  26.        
  27.         /*optimization*/
  28.         /*We can prove that n is never greater than m.So we can use the same memory*/
  29.         for(m=0,n=0,c=0,j=0;m<len;m++) {
  30.                 switch(code[m]) {
  31.                         case '+':
  32.                                 switch (j) {
  33.                                         case 1:
  34.                                                 code[n++]='>';
  35.                                                 break;
  36.                                         case -1:
  37.                                                 code[n++]='<';
  38.                                                 break;
  39.                                         case 0:
  40.                                                 break;
  41.                                         default:
  42.                                                 code[n++]='p';
  43.                                                 code[n++]=j;
  44.                                                 break;
  45.                                 }
  46.                                 j=0;
  47.                                 c++;
  48.                                 break;
  49.                         case '-':
  50.                                 switch (j) {
  51.                                         case 1:
  52.                                                 code[n++]='>';
  53.                                                 break;
  54.                                         case -1:
  55.                                                 code[n++]='<';
  56.                                                 break;
  57.                                         case 0:
  58.                                                 break;
  59.                                         default:
  60.                                                 code[n++]='p';
  61.                                                 code[n++]=j;
  62.                                                 break;
  63.                                 }
  64.                                 j=0;
  65.                                 c--;
  66.                                 break;
  67.                         case '>':
  68.                                 switch (c) {
  69.                                         case ((char)1):
  70.                                                 code[n++]='+';
  71.                                                 break;
  72.                                         case ((char)(-1)):
  73.                                                 code[n++]='-';
  74.                                                 break;
  75.                                         case ((char)0):
  76.                                                 break;
  77.                                         default:
  78.                                                 code[n++]='a';
  79.                                                 code[n++]=c;
  80.                                                 break;
  81.                                 }
  82.                                 c=0;
  83.                                 j++;
  84.                                 if(j==0x7f) {
  85.                                         code[n++]='p';
  86.                                         code[n++]=0x7f;
  87.                                         j=0;
  88.                                 }
  89.                                 break;
  90.                         case '<':
  91.                                 switch (c) {
  92.                                         case ((char)1):
  93.                                                 code[n++]='+';
  94.                                                 break;
  95.                                         case ((char)(-1)):
  96.                                                 code[n++]='-';
  97.                                                 break;
  98.                                         case ((char)0):
  99.                                                 break;
  100.                                         default:
  101.                                                 code[n++]='a';
  102.                                                 code[n++]=c;
  103.                                                 break;
  104.                                 }
  105.                                 c=0;
  106.                                 j--;
  107.                                 if(j==-128) {
  108.                                         code[n++]='p';
  109.                                         code[n++]=-128;
  110.                                         j=0;
  111.                                 }
  112.                                 break;
  113.                         case '.':
  114.                         case ',':
  115.                         case '[':
  116.                                 switch (c) {
  117.                                         case ((char)1):
  118.                                                 code[n++]='+';
  119.                                                 break;
  120.                                         case ((char)(-1)):
  121.                                                 code[n++]='-';
  122.                                                 break;
  123.                                         case ((char)0):
  124.                                                 break;
  125.                                         default:
  126.                                                 code[n++]='a';
  127.                                                 code[n++]=c;
  128.                                                 break;
  129.                                 }
  130.                                 c=0;
  131.                                 switch (j) {
  132.                                         case 1:
  133.                                                 code[n++]='>';
  134.                                                 break;
  135.                                         case -1:
  136.                                                 code[n++]='<';
  137.                                                 break;
  138.                                         case 0:
  139.                                                 break;
  140.                                         default:
  141.                                                 code[n++]='p';
  142.                                                 code[n++]=j;
  143.                                                 break;
  144.                                 }
  145.                                 j=0;
  146.                                 code[n++]=code[m];
  147.                                 break;
  148.                         case ']':
  149.                                 switch (c) {
  150.                                         case ((char)1):
  151.                                                 code[n++]='+';
  152.                                                 break;
  153.                                         case ((char)(-1)):
  154.                                                 code[n++]='-';
  155.                                                 break;
  156.                                         case ((char)0):
  157.                                                 break;
  158.                                         default:
  159.                                                 code[n++]='a';
  160.                                                 code[n++]=c;
  161.                                                 break;
  162.                                 }
  163.                                 c=0;
  164.                                 switch (j) {
  165.                                         case 1:
  166.                                                 code[n++]='>';
  167.                                                 break;
  168.                                         case -1:
  169.                                                 code[n++]='<';
  170.                                                 break;
  171.                                         case 0:
  172.                                                 break;
  173.                                         default:
  174.                                                 code[n++]='p';
  175.                                                 code[n++]=j;
  176.                                                 break;
  177.                                 }
  178.                                 j=0;
  179.                                 if(n-1>=0&&n-2>=0&&code[n-2]=='['&&(code[n-1]=='+'||code[n-2]=='-')) {
  180.                                         code[n-2]='0';
  181.                                         n--;
  182.                                 } else {
  183.                                         code[n++]=code[m];
  184.                                 }
  185.                                 break;
  186.                         default:
  187.                                 break;
  188.                 }
  189.         }
  190.         len=n;
  191.         setbuf(stdout,NULL);
  192. #if 0
  193.         for(i=0;i<len;i++)
  194.                 putchar(code[i]);
  195.         return 0;
  196. #endif
  197.         i=0;
  198.         while(i<len) {
  199.                 switch(code[i]) {
  200.                         case '0':
  201.                                 *p=0;
  202.                                 break;
  203.                         case 'a':
  204.                                 i++;
  205.                                 *p+=code[i];
  206.                                 break;
  207.                         case 'p':
  208.                                 i++;
  209.                                 p+=code[i];
  210.                                 break;
  211.                         case '+':
  212.                                 (*p)++;
  213.                                 break;
  214.                         case '-':
  215.                                 (*p)--;
  216.                                 break;
  217.                         case '>':
  218.                                 p++;
  219.                                 break;
  220.                         case '<':
  221.                                 p--;
  222.                                 break;
  223.                         case '.':
  224.                                 putchar((int)(*p));
  225.                                 //printf("put:%hd\n",*p);
  226.                                 break;
  227.                         case ',':
  228.                                 *p=getchar();
  229.                                 break;
  230.                         case '[':
  231.                                 if(*p) {
  232.                                         stack[stack_len++]=i;
  233.                                 } else {
  234.                                         for(k=i,j=0;k<len;k++) {
  235.                                                 if(code[k]=='a'||code[k]=='p') {
  236.                                                         k++;
  237.                                                         continue;
  238.                                                 }
  239.                                                 code[k]=='['&&j++;
  240.                                                 code[k]==']'&&j--;
  241.                                                 if(j==0)break;
  242.                                         }
  243.                                         if(j==0)
  244.                                                 i=k;
  245.                                         else {
  246.                                                 fprintf(stderr,"%s:%d\n",__FILE__,__LINE__);
  247.                                                 return 3;
  248.                                         }
  249.                                 }
  250.                                 break;
  251.                         case ']':
  252.                                 i=stack[stack_len-- - 1]-1;
  253.                                 break;
  254.                         default:
  255.                                 break;
  256.                 }
  257.                 i++;
  258.                 //x++;
  259.                 //printf("%d : i=%d\n",x,i);
  260.         }
  261.         return 0;
  262. }
复制代码

[ 本帖最后由 cjaizss 于 2008-6-7 12:37 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-06-01 18:38 |只看该作者
楼主的工作很棒!

论坛徽章:
0
10 [报告]
发表于 2008-06-02 09:58 |只看该作者
cjaizss真是牛X啊!不愧版主,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP