文号
t34450
阅读
4481
回复
4
收藏
4
《由》续——关于BrainFK的应用(上)
2011/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类,我们可以写下面的二叉树查找算法:
            cBrainFK.search(varToSearch,BSTree,"[[[!>]<>2]<<<]");
        这里'!'表示将*bfpointer的值传递给cBrainFK.search(),与其中的varToSearch进行比较。
    至此,我们看到,EBrainFK辅助编写的代码简洁、精致,又不失可读性,如果该库写得好的话,执行也会非常高效。
    
    以上便是对于BrainFk语言实际应用中可行性探讨的上半部分,下半部分中,我们将进行更加深入的探讨。
    
            
            
epi.clyce作者
15年6个月前IP:未同步
302417
1楼
无视我吧,My Brain Is Phucked Up

那个二叉树是错的
引用
评论
15年6个月前IP:未同步
302630
2楼
这语言可读性太差了……
引用
评论
15年6个月前IP:未同步
302809
3楼
我只想说……Your left brain has nothing right and your right brain has nothing left.
引用
评论
15年5个月前IP:未同步
312996
4楼
我也有过这思路,并且写了一个工作在x86上的jist in time编译器
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的