废话不多说,先附上解析的此语言的编译器代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
char s[30000]={0};
char code[100000];
int len = 0;
int stack[100];
int stack_len=0;
int main(int argc,char**argv)
{
char c;
int i=0,j,k,x=0;
FILE* f;
char* p=s+10000;
f=fopen("N:/OpenGlLearn/ConsoleApplication11/1.txt","r");
while(fread(&code[len],1,1,f)==1)
{
len++;
}
setbuf(stdout,NULL);
while(i<len) {
switch(code[i]) {
case '+':
(*p)++;
break;
case '-':
(*p)--;
break;
case '>':
p++;
break;
case '<':
p--;
break;
case '.':
putchar((int)(*p));
//printf("put:%hdn",*p);
break;
case ',':
*p=getchar();
break;
case '[':
if(*p) {
stack[stack_len++]=i;
} else {
for(k=i,j=0;k<len;k++) {
code[k]=='['&&j++;
code[k]==']'&&j--;
if(j==0)break;
}
if(j==0)
i=k;
else {
fprintf(stderr,"%s:%dn",__FILE__,__LINE__);
return 3;
}
}
break;
case ']':
i=stack[stack_len-- - 1]-1;
break;
default:
break;
}
i++;
//x++;
//printf("%d : i=%dn",x,i);
}
system("pause");
return 0;
}
然后我重点说明下,此语言如何欺骗windows输出中文,我们来输出“飞飞”两个字。
我们知道简体中文操作系统使用的编码是GB2312,当然也可以自己写个小程序输入飞飞两个字看它在内存中的值。然后利用brainfuck语言编写程序,操作不多就8个 随便百度一下,就可以学会该语言,于是我们将这些值输出就好,为了大家方便“飞”字的编码为:B7C9,然后我们来看brainfuck部分的代码:
<[-]>[-]<+++++ +++++ + [> +++++ +++++ + +++++<-]>++ +++++.
<[-]>[-]<+++++ +++++ +++ [> +++++ +++++ + +++++<-]>-- -----.
<[-]>[-]<+++++ +++++ + [> +++++ +++++ + +++++<-]>++ +++++.
<[-]>[-]<+++++ +++++ +++ [> +++++ +++++ + +++++<-]>-- -----.
<[-]+++++ +++++.
<[-]>[-]<++[> +++++ +++++ +++ +++<-]>.
稍微说明下,每一行是操作一个字符的值,倒数第二行为输出换行,最后为输出空格!
最后截个屏幕给大家: