BrainFuck由Urban Müller在1993年建立,是經常被吐槽的語言,不過我覺得除了名字其它都還挺正常的,沒錯我覺得這個語言設計的很正常沒有Fuck到我的腦子,大概是因為我根本就沒有腦子吧…
語言簡介:
使用指針尋址來操作記憶體,運作時需要0~32767個位元組的記憶體空間,可循環尋址,資料機關是8bit,資料範圍是0~255,可循環溢出。
8種操作符:
> 将尋址指針向右移動一位
< 将尋址指針向左移動一位
+ 将尋址指針指向的記憶體空間值加1
- 将尋址指針指向的記憶體空間值減1
[ 如果尋址指針指向的記憶體空間的值為0,則跳轉到下一個]後面第一個字元開始執行
] 如果尋址指針指向的記憶體空間的值不為0,則跳轉到上一個[後面第一個字元開始執行
條件判斷和循環就是通過[和]來實作的,使用目前尋址指針指向的空間存儲要循環的次數,當循環次數為1的時候就相當于if條件判斷為true。
想一下為什麼+-><這種不幹脆支援+2+3+5這種操作呢?好多個++++很麻煩的啊,其實+就相當于+1,改成别的值在語言上并不會有歧義,但是這個BrainFuck語言就是面向單位元組操作的,資料機關是單位元組,解釋器解釋代碼的時候也是單位元組解釋的,如果支援在後面指定要加的數值的話,對于個位數還好,如果是+100這種的話解釋器解釋的時候就需要能夠識别出100這三個連續的字元是用來組成一個數字的,不再是每個字元都可以獨立解析,增加了解釋器的難度,是以我覺得這個語言純粹就是用來讓人寫解釋器練手的。
解釋器思路:
記憶體空間可以動态配置設定,初始大小為0,當用到的時候檢查尋址指針大小與目前已經配置設定的記憶體空間大小不夠再擴充記憶體空間。
這麼變态的語言總是需要注釋的吧,暫定單字元注釋支援%和#兩種。
一個簡單的解釋器如下:
運作效果:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yNwYmYmJ2M4ETYlJmZ5kTNwEWMwImYxIDZwAzMkhjZ28CX3IzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
相關資料:
1. BrainFuck解釋過程線上示範: https://fatiherikli.github.io/brainfuck-visualizer/
2. http://esolangs.org/wiki/ook!
3. http://esolangs.org/wiki/Language_list
.
本作品采用知識共享署名 4.0 國際許可協定進行許可。