BrainFuck语言的解释器以及中文录入

本文介绍了一个Brainfuck语言编译器的实现,并展示了如何通过Brainfuck编程输出中文字符“飞飞”。文章详细解释了编译器的源代码,并给出了一段具体的Brainfuck程序实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

废话不多说,先附上解析的此语言的编译器代码

#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部分的代码:

<[-]>[-]<+++++ +++++ +   [> +++++ +++++ + +++++<-]>++ +++++.
<[-]>[-]<+++++ +++++ +++ [> +++++ +++++ + +++++<-]>-- -----.

<[-]>[-]<+++++ +++++ +   [> +++++ +++++ + +++++<-]>++ +++++.
<[-]>[-]<+++++ +++++ +++ [> +++++ +++++ + +++++<-]>-- -----.

<[-]+++++ +++++.

<[-]>[-]<++[> +++++ +++++ +++ +++<-]>.

稍微说明下,每一行是操作一个字符的值,倒数第二行为输出换行,最后为输出空格!

最后截个屏幕给大家:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值