简介
Brainfuck是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainfck或brainf*k,甚至被简称为BF。
也算是一个奇葩语言吧,不过好像没啥实际作用,因为太轻量了,只能用于表示简单的某些简短的字符串(推荐装逼表白使用吧,其它大概没啥卵用),解析规则还挺有意思的,好久没写博客了,记录一下上午研究成果.
解析规则
- ">": 指针位置右移一位
- "<": 指针位置左移一位
- +: 指针所指向的位置里面的值加1
- -: 指针所指向的位置里面的值减1
- . :输出指针当前位置指向单元格中的内容
- [: 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
- ]:如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处(额...好像比较难理解,只是用于循环某一段代码而已,两个一般联合使用)
实践出真知,举个栗子吧..
++++++++++[>+++++++++>++++++++>+++++++<<<-]>>>++.---.<----..+++.
++++++++++[>+++++++++>++++++++>+++++++<<<-]
先来看看前面这一坨, []根据解析规则定义,这俩中括号为将括号内的代码执行N次
至于N等于几,取决于[]前面的+号数量,前面是10个,即为重复十次;
再来看一下括号里面,> 代表向右移位指针,如果指针右边之前没有移动到过,及说明需要创建新的空间 ,并将指针所指向的内容
如图,指针从-10的位置开始(当然,一开始里面不是10,是0,我只是方便说位置)作为起点,向右一动一位,迎来了九个+,将第二格子里面数字加到9,再右移,把第三个加到8,第四个加到7,然后想左移动三次,将第一个减到-1.
因为这段旅程是在方括号里面,为循环体,循环十次,形成上图效果.且指针位置位于第一个格子
至于为什么要做个90 80 70呢,其实是为了方便输出Ascll码,因为想要输出的英文字符,大概都在这个区间,构造一个基数,后面不需要写太多的东西,移到接近的数值位置操作就可以了
>>>++.---.<----..+++.
再来看后面这一坨 ,当前指针位于第一个格子,右移3 ,++,让70变成72,"."代表输出当前指针所指向位置的数值,输出 72.
同理,输出69 、76、 76、79
对照上表,输出的英文字符为Hello
网友评论