BrainFuck 人肉編譯規則

這裏寫圖片描述

簡介

Brainfuck是一種極小化的計算機語言,它是由Urban Müller在1993年創建的。由於fuck在英語中是髒話,這種語言有時被稱爲brainf*ck或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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章