《由》续——关于BrainFK的应用(上)
epi.clyce2011/06/23软件综合 IP:上海
/*本文中所有代码未经编译,若有错误,欢迎指正*/

首先感谢来自清华大学的牟瞳指出上一篇文章中的疏漏:
    BrainFk中']'的作用应当是在*p不为零时跳转到前一个(而非后一个)'['之后。
    BrainFK中','的作用是逗号是从终端输入ASCII到指针所指地址。

前一篇文章里我们提到了关于如何使用BrainFK实现动态定位指针的问题,就有人问,为何会对这样一门晦涩的语言产生兴趣
    当初接触BrainFK完全是抱着拾趣的态度,然而当我读懂了一些BrainFK代码之后,我突然强烈的感觉到,BrainFK这种极小化的语言,是有着自身优势所在的
    这种想法并未获得广泛的认可,而对于BrainFk语言较为深入的探讨也更是寥寥无几。
    昨天和小光探讨了一些关于BrainFK语言实际应用方面的问题,在探讨的过程中,我们达成了一个共识:
        在适当的使用下,BrainFK是一种简洁、方便、灵活、高效的语言。
        
    这是我所得到的第一种对于BrainFK明确认可的态度    
    我对嵌入式开发并不很了解,不敢斗胆对小光提出的将BrainFK应用于单片机开发的想法作出评论。
        所以我们的讨论范围依旧围绕PC程序的开发。如果读者里面有精通嵌入式的,欢迎前来讨论。
        
    不,我并不是说单纯的使用BrainFK开发应用程序,那种事情只有闲的DT的人才会去做。
        我的意思是,配合经过改进的BrainFK,进行高效的敏捷开发。
        
    下面我们就来谈谈对于BrainFK便捷性和可读性的改进:
        首先我们看一个例子,用BrainFK输出"Brain FK\n"的代码为:
           +++ +++ +++ + [
                > +++ +++ +
                > +++ +++ +++ +
                > +++
                > +
                <<<< -
            ]
            >   -----
            >>  ---
            >>> ++
            <<<
            
            +.- > +++++++++++++++++.-----------------.++++++++.+++++.-------------
            > .
            <<
            +++++.+++++.----------
            >>>.
            <<<<

        在这里,我们发现,所有的操作符都经过了大量的复用,浪费时间并降低了可读性。
        于是我们引入一个操作计数器的概念,这个概念的灵感来源于vim。
            用过vim的人都知道,vim中大多数命令是可以前置计数器的,比如 9af 将在光标后置入9个'f'
        同样地,我们将这一概念引入BrainFK,不过为了阅读习惯考虑,我们将计数器后置,那么输出"Brain FK\n"的代码为:
            > +65
            > +97
            > +32
            > +10
            
            <<< + .    -
            >   +17 . -17 . +8 . +5 . -13
            >   .
            <<  +5 . +5 . -10
            >>> .
            <4

        这样就大大的缩短了代码的长度,而且增加了灵活性,比如你可以使用+10[>++++<-]++来完成*[1]+42
        
        我们发现,由于'.'的大小关系,这个符号非常影响排版,于是我斗胆作出如下更改:
            使用'!'代替'.'
            '?'代替','
        那么代码变为:
            > +65
            > +97
            > +32
            > +10
            
            <<< +! -
            >   +17! -17! +8! +5! -13 >!
            <<  +5! +5! -10 >>>!
            <4

        
        但是这样的语言依旧不适合开发,昨晚想了一下,要让BrainFK变得实用,她必须作为配角存在,也就是说,她将成为一个辅助工具
        我们将这个工具命名为EBRAINFUCK,全称为"Externed brainFK recalling anchor in note for uneasy C Kicking"
        这个工具引入了一个C/C++函数
            brainfk(<type>*bfpointer, string bfcode)
        于是我们可以将BrainFK代码嵌入到C/C++中。
        当然如果你足够NB还可以写cBrainFK类,可以实现多个BrainFK对象互相计算神马的~
        
        作为示例,我们举一个最最简单的例子:
            我们要写一个非常简单的古典加密算法,将字符串str中所有字符的ASCII加三(A变成C,B变成D,等等),然后倒叙输出
            那么我们可以调用如下函数
                brainfk(str, "
                    [>+3] < [
                        !
                        <
                    ]
                ");

                
            在C++中,'!'可看作“加入到outstream”    
            转换大写为小写的算法更加简单:
                brainfk(str,"[>+32]");
            
        对于cBrainFK类,我们可以写下面的二叉树查找算法:
            XXXXXXXXXXXarch(varToSearch,BSTree,"[[[!>]<>2]<<<]");
        这里'!'表示将*bfpointer的值传递给XXXXXXXXXXXarch(),与其中的varToSearch进行比较。
    至此,我们看到,EBrainFK辅助编写的代码简洁、精致,又不失可读性,如果该库写得好的话,执行也会非常高效。
    
    以上便是对于BrainFk语言实际应用中可行性探讨的上半部分,下半部分中,我们将进行更加深入的探讨。
    
            
            
来自:计算机科学 / 软件综合
4
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
epi.clyce 作者
13年7个月前 IP:未同步
302417
无视我吧,My Brain Is Phucked Up

那个二叉树是错的
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
4king
13年7个月前 IP:未同步
302630
这语言可读性太差了……
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ltl
13年7个月前 IP:未同步
302809
我只想说……Your left brain has nothing right and your right brain has nothing left.
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
isaacli
13年6个月前 IP:未同步
312996
我也有过这思路,并且写了一个工作在x86上的jist in time编译器
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
epi.clyce
学者 机友 笔友
文章
345
回复
2156
学术分
21
2007/07/10注册,3个月22天前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}