fbpx
วิกิพีเดีย

ภาษาเบรนฟัก

ภาษาเบรนฟัก (อังกฤษ: brainfuck) คือภาษาโปรแกรมเชิงความลับที่มีจุดเด่นในเรื่องการทำซอร์สโค้ดและคอมไพเลอร์ให้เล็กที่สุด ออกแบบขึ้นเพื่อท้าทายและสร้างความสับสนให้โปรแกรมเมอร์ แต่ไม่เหมาะสำหรับใช้งานในทางปฏิบัติ ชื่อของภาษาเบรนฟักในภาษาอังกฤษมักจะถูกปิดบังให้เป็น brainf*ck หรือ brainfsck เพื่อหลีกเลี่ยงคำว่า fuck ที่มักถือกันว่าเป็นคำหยาบ และจะไม่มีการเน้นอักษรตัวใหญ่ที่ตัว b เมื่อไม่ใช่ต้นประโยค ถึงแม้จะเป็นชื่อเฉพาะก็ตาม

ประวัติ

ภาษาเบรนฟักสร้างขึ้นในปี พ.ศ. 2536 (ค.ศ. 1993) โดยอูร์บัน มึลเลอร์ (Urban Müller) ด้วยความตั้งใจที่จะออกแบบภาษาโปรแกรมให้คอมไพเลอร์มีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ ซึ่งได้รับแรงบันดาลใจจากคอมไพเลอร์ของภาษาฟอลซ์ (FALSE) ที่มีขนาดเพียง 1,024 ไบต์ ในขณะที่คอมไพเลอร์ของภาษาเบรนฟักมีขนาดเล็กกว่าคือไม่เกิน 200 ไบต์ (บางรุ่นมีขนาดเพียง 125 ไบต์) นอกจากนี้มึลเลอร์ยังสร้างคอมไพเลอร์ของภาษานี้สำหรับคอมพิวเตอร์อะมิก้า (Amiga) อีกด้วย

รูปแบบการเขียนและการทำงาน

ภาษาเบรนฟักประกอบด้วยคำสั่งเพียง 8 ชนิด เขียนแทนด้วยอักษรหนึ่งตัวต่อหนึ่งคำสั่ง โปรแกรมภาษาเบรนฟักจะทำงานตามคำสั่งไปทีละตัวอักษร ในขณะที่อักษรอื่นที่ปรากฏจะถูกข้ามไป อักษรทั้ง 8 ตัวมีความหมายที่เทียบเท่ากับภาษาซีสามารถแจกแจงได้ดังนี้

คำสั่ง ความหมาย โค้ดภาษาซีที่เทียบเท่า*
> เพิ่มพอยเตอร์ขึ้นหนึ่ง (ย้ายพอยเตอร์ไปยังเซลล์ถัดไป) ++ptr;
< ลดพอยเตอร์ลงหนึ่ง (ย้ายพอยเตอร์ไปยังเซลล์ก่อนหน้า) --ptr
+ เพิ่มค่าในพอยเตอร์ขึ้นหนึ่ง ++(*ptr);
- ลดค่าในพอยเตอร์ลงหนึ่ง --(*ptr);
. แสดงผลเป็นอักษรตามรหัสแอสกีจากค่าในพอยเตอร์ putchar(*ptr);
, รับข้อมูลอักษรเข้าและเก็บค่ารหัสแอสกีลงในพอยเตอร์ *ptr=getchar();
[ กระโดดไปยัง ] ถ้าค่าในพอยเตอร์เป็นศูนย์ while (*ptr) {
] กระโดดไปยัง [ ถ้าค่าในพอยเตอร์ไม่เป็นศูนย์ }
* จากตาราง สมมติว่า ptr เป็นพอยเตอร์ประเภท unsigned char* และได้กำหนดค่าให้ชี้ไปยังอาร์เรย์ที่มีสมาชิกเป็นศูนย์แล้ว

ภาษาเบรนฟักทำงานบนอาร์เรย์ขนาด 30,000 เซลล์ (ช่อง) โดยมีตัวแปรพอยเตอร์ที่เคลื่อนย้ายได้เป็นตัวชี้ตำแหน่งเซลล์ปัจจุบัน เมื่อเริ่มต้นโปรแกรม ทุกเซลล์จะมีข้อมูลเป็นศูนย์ และพอยเตอร์ชี้ที่เซลล์แรกเสมอ (ที่ดัชนีของเซลล์เท่ากับศูนย์) โปรแกรมจะดำเนินตามคำสั่งในซอร์สโค้ดไปทีละคำสั่งจนกระทั่งสิ้นสุดที่อักษรตัวสุดท้าย การแสดงผลบนจอภาพและการรับข้อมูลเข้าจากคีย์บอร์ดเป็นตัวอักษรจะอ้างถึงค่าตามรหัสแอสกี (หรือรหัสอักขระตามที่คอมพิวเตอร์ใช้)

ตัวอย่าง

โปรแกรมต่อไปนี้จะพิมพ์คำว่า Hello World! และขึ้นบรรทัดใหม่บนจอภาพ

++++++++++ [>+++++++>++++++++++>+++>+<<<<-] วนรอบค่าต่างๆ ที่มีประโยชน์เก็บไว้ในอาร์เรย์ >++.   พิมพ์ 'H' >+.   พิมพ์ 'e' +++++++.   พิมพ์ 'l' .   พิมพ์ 'l' +++.   พิมพ์ 'o' >++.   พิมพ์ ' ' <<+++++++++++++++.  พิมพ์ 'W' >.   พิมพ์ 'o' +++.   พิมพ์ 'r' ------.   พิมพ์ 'l' --------.  พิมพ์ 'd' >+.   พิมพ์ '!' >.   ขึ้นบรรทัดใหม่ (พิมพ์อักขระ newline) 

ซอร์สโค้ดข้างต้นมีการตัดขึ้นบรรทัดใหม่เพื่อให้สามารถอ่านได้ง่าย ซึ่งภาษาเบรนฟักจะทำงานเฉพาะโค้ด <>+-.,[] เท่านั้น อักษรอื่นๆ จะถูกข้ามไป จึงสามารถตัดบรรทัดหรือใส่หมายเหตุได้โดยไม่ต้องมีเครื่องหมายกำกับ สำหรับซอร์สโค้ดล้วนของโปรแกรมดังกล่าวสามารถเขียนได้ดังนี้

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>. 

การทำงานจะเริ่มจากบรรทัดแรก ซึ่งเพิ่มค่าเซลล์ที่ 0 ให้เป็น 10 โดยการเพิ่มค่าทีละหนึ่งเป็นจำนวน 10 ครั้ง การวนรอบในบรรทัดที่สองเป็นการกำหนดค่าต่างๆ ไว้ในอาร์เรย์ดังนี้คือ เซลล์ที่ 1 เท่ากับ 70 (ใกล้กับ 72 ซึ่งเป็นรหัสแอสกีของ 'H'), เซลล์ที่ 2 เท่ากับ 100 (ใกล้กับ 101 ของ 'e'), เซลล์ที่ 3 เท่ากับ 30 (ใกล้กับ 32 ซึ่งเป็นรหัสของช่องว่าง), และเซลล์ที่ 4 เท่ากับ 10 (อักขระ newline) การวนรอบดังกล่าวจะทำงานแทนการคูณค่า 10 ในเซลล์ที่ 0 เข้ากับ 7, 10, 3, และ 1 ตามลำดับ และบันทึกผลคูณไว้ต่างเซลล์กัน หลังจากการวนรอบสิ้นสุดแล้ว บรรทัดที่สามคือการเลื่อนพอยเตอร์ไปยังเซลล์ที่ 1 แล้วเพิ่มค่าขึ้นอีกสองจนได้ 72 จากนั้นจึงพิมพ์อักขระ 'H' ออกมา บรรทัดถัดไปเป็นการย้ายพอยเตอร์ไปยังเซลล์ที่ 2 แล้วบวกหนึ่งจนได้ 101 ซึ่งเป็นอักขระ 'e' แล้วแสดงผลบนหน้าจอ บรรทัดต่อๆ ไปก็มีการย้ายพอยเตอร์และมีการเพิ่มค่าหรือลดค่าไปตามคำสั่งคล้ายกันนี้ กระทั่งพิมพ์ Hello World! ออกมาครบทุกตัวอักษร (รวมทั้งการขึ้นบรรทัดใหม่)

อ้างอิง

  1. The Brainfuck Programming Language
  2. Wouter's False page
  3. Brainfuck compiler in 125 bytes

แหล่งข้อมูลอื่น

  • ภาษาเบรนฟักที่เอโซแลง 2007-08-16 ที่ เวย์แบ็กแมชชีน (วิกิ)
  • ภาษาเบรนฟัก ที่เว็บไซต์ Curlie

ภาษาเบรนฟ, เว, บย, brainfuck, งกฤษ, brainfuck, อภาษาโปรแกรมเช, งความล, บท, ดเด, นในเร, องการทำซอร, สโค, ดและคอมไพเลอร, ให, เล, กท, ออกแบบข, นเพ, อท, าทายและสร, างความส, บสนให, โปรแกรมเมอร, แต, ไม, เหมาะสำหร, บใช, งานในทางปฏ, อของในภาษาอ, งกฤษม, กจะถ, กป, ดบ, ง. ewbyx brainfuck phasaebrnfk xngkvs brainfuck khuxphasaopraekrmechingkhwamlbthimicudednineruxngkarthasxrsokhdaelakhxmiphelxrihelkthisud xxkaebbkhunephuxthathayaelasrangkhwamsbsnihopraekrmemxr aetimehmaasahrbichnganinthangptibti chuxkhxngphasaebrnfkinphasaxngkvsmkcathukpidbngihepn brainf ck hrux brainfsck ephuxhlikeliyngkhawa fuck thimkthuxknwaepnkhahyab aelacaimmikarennxksrtwihythitw b emuximichtnpraoykh thungaemcaepnchuxechphaaktam enuxha 1 prawti 2 rupaebbkarekhiynaelakarthangan 3 twxyang 4 xangxing 5 aehlngkhxmulxunprawti aekikhphasaebrnfksrangkhuninpi ph s 2536 kh s 1993 odyxurbn mulelxr Urban Muller dwykhwamtngicthicaxxkaebbphasaopraekrmihkhxmiphelxrmikhnadelkthisudethathicaepnipid 1 sungidrbaerngbndaliccakkhxmiphelxrkhxngphasafxls FALSE thimikhnadephiyng 1 024 ibt 2 inkhnathikhxmiphelxrkhxngphasaebrnfkmikhnadelkkwakhuximekin 200 ibt bangrunmikhnadephiyng 125 ibt 3 nxkcaknimulelxryngsrangkhxmiphelxrkhxngphasanisahrbkhxmphiwetxrxamika Amiga xikdwyrupaebbkarekhiynaelakarthangan aekikhphasaebrnfkprakxbdwykhasngephiyng 8 chnid ekhiynaethndwyxksrhnungtwtxhnungkhasng opraekrmphasaebrnfkcathangantamkhasngipthilatwxksr inkhnathixksrxunthipraktcathukkhamip xksrthng 8 twmikhwamhmaythiethiybethakbphasasisamarthaeckaecngiddngni khasng khwamhmay okhdphasasithiethiybetha gt ephimphxyetxrkhunhnung yayphxyetxripyngesllthdip ptr lt ldphxyetxrlnghnung yayphxyetxripyngesllkxnhna ptr ephimkhainphxyetxrkhunhnung ptr ldkhainphxyetxrlnghnung ptr aesdngphlepnxksrtamrhsaexskicakkhainphxyetxr putchar ptr rbkhxmulxksrekhaaelaekbkharhsaexskilnginphxyetxr ptr getchar kraoddipyng thakhainphxyetxrepnsuny while ptr kraoddipyng thakhainphxyetxrimepnsuny caktarang smmtiwa ptr epnphxyetxrpraephth unsigned char aelaidkahndkhaihchiipyngxarerythimismachikepnsunyaelwphasaebrnfkthanganbnxarerykhnad 30 000 esll chxng odymitwaeprphxyetxrthiekhluxnyayidepntwchitaaehnngesllpccubn emuxerimtnopraekrm thukesllcamikhxmulepnsuny aelaphxyetxrchithiesllaerkesmx thidchnikhxngesllethakbsuny opraekrmcadaenintamkhasnginsxrsokhdipthilakhasngcnkrathngsinsudthixksrtwsudthay karaesdngphlbncxphaphaelakarrbkhxmulekhacakkhiybxrdepntwxksrcaxangthungkhatamrhsaexski hruxrhsxkkhratamthikhxmphiwetxrich twxyang aekikhopraekrmtxipnicaphimphkhawa Hello World aelakhunbrrthdihmbncxphaph gt gt gt gt lt lt lt lt wnrxbkhatang thimipraoychnekbiwinxarery gt phimph H gt phimph e phimph l phimph l phimph o gt phimph lt lt phimph W gt phimph o phimph r phimph l phimph d gt phimph gt khunbrrthdihm phimphxkkhra newline sxrsokhdkhangtnmikartdkhunbrrthdihmephuxihsamarthxanidngay sungphasaebrnfkcathanganechphaaokhd lt gt ethann xksrxun cathukkhamip cungsamarthtdbrrthdhruxishmayehtuidodyimtxngmiekhruxnghmaykakb sahrbsxrsokhdlwnkhxngopraekrmdngklawsamarthekhiyniddngni gt gt gt gt lt lt lt lt gt gt gt lt lt gt gt gt karthangancaerimcakbrrthdaerk sungephimkhaesllthi 0 ihepn 10 odykarephimkhathilahnungepncanwn 10 khrng karwnrxbinbrrthdthisxngepnkarkahndkhatang iwinxarerydngnikhux esllthi 1 ethakb 70 iklkb 72 sungepnrhsaexskikhxng H esllthi 2 ethakb 100 iklkb 101 khxng e esllthi 3 ethakb 30 iklkb 32 sungepnrhskhxngchxngwang aelaesllthi 4 ethakb 10 xkkhra newline karwnrxbdngklawcathanganaethnkarkhunkha 10 inesllthi 0 ekhakb 7 10 3 aela 1 tamladb aelabnthukphlkhuniwtangesllkn hlngcakkarwnrxbsinsudaelw brrthdthisamkhuxkareluxnphxyetxripyngesllthi 1 aelwephimkhakhunxiksxngcnid 72 caknncungphimphxkkhra H xxkma brrthdthdipepnkaryayphxyetxripyngesllthi 2 aelwbwkhnungcnid 101 sungepnxkkhra e aelwaesdngphlbnhnacx brrthdtx ipkmikaryayphxyetxraelamikarephimkhahruxldkhaiptamkhasngkhlayknni krathngphimph Hello World xxkmakhrbthuktwxksr rwmthngkarkhunbrrthdihm xangxing aekikh The Brainfuck Programming Language Wouter s False page Brainfuck compiler in 125 bytesaehlngkhxmulxun aekikhphasaebrnfkthiexosaelng Archived 2007 08 16 thi ewyaebkaemchchin wiki phasaebrnfk thiewbist Curlieekhathungcak https th wikipedia org w index php title phasaebrnfk amp oldid 9577834, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม