สิงหนาท เริงโอสถ [น้องบูม]

วันพุธที่ 16 กันยายน พ.ศ. 2552

ภาษาบูมบาลาก้า (BooMBaLaKA)

ภาษา บูมบาลาก้า หรือ ภาษาบูมบ้าละค่ะ (อังกฤษ: BooMBaLaKA) คือ ภาษาโปรแกรมเชิงลึกลับ
ที่มีจุดเด่นคือ การใช้เพียงอักขระที่นำมาเป็นองค์ประกอบของ คำว่า "boombalaka" ได้เท่านั้นในการเขียนโปรแกรม ซึ่งมีตัวอักขระที่นำมาใช้ได้ 15 อักขระ คือ B,b,O,o,M,m,A,a,L,l,K,k,W,w,d
หมายเหตุ: W,w เมื่อนำมากลับบน-ล่าง จะสามารถทำมาใช้ได้
d เมื่อนำมากลับขวา-ซ้าย จะสามารถนำมาใช้ได้

ประวัติ
ภาษาบูมบาลาก้า สร้างขึ้นในวันอาทิตย์ที่ 13กันยายน พ.ศ.2552(ค.ศ.2009) โดยสิงหนาท เริงโอสถ(Singhanat Rerng-Osot)

ภาษาบูมบาลาก้าเป็นภาษาที่ได้รับแนวคิดโดยตรงมาจาก ภาษาเบรนฟัก (brainfuck) ซึ่งเป็นภาษาที่อาศัยหลักการของ pointerเป็นหัวใจหลักของการทำงาน

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

ภาษาบูมบาลาก้า จึงพัฒนาให้มีจำนวน pointer ที่มากขึ้น และสามารถจัดการ pointer แต่ละตัวได้อย่างเป็นอิสระจากกัน เพื่อลดการสิ้นเปลืองเวลาในการเลื่อน pointer หลายๆครั้ง ให้เป็นการ เรียก pointer ที่ชี้อยู่ในตำแหน่งที่ต้องการแทน และใช้สัญลักษณ์ที่มีความหมายทางการจดจำในภาษาอังกฤษ

โดยยังคงรักษาเอกลักษณ์ การทำงานแบบ " 1คำสั่ง ต่อข้อมูล 1หน่วย "

สถานะเริ่มต้นของโปรแกรม
โปรแกรมทำงานอยู่บนฐานของแถวลำดับขนาด 120000 เซลล์
pointer ทุกตัวอยู่ที่ตำแหน่งที่ 0
ข้อมูลในทุกเซลล์มีค่าเท่ากับศูนย์

รูปแบบการเขียนและการทำงาน
ภาษาบูมบาละก้า ประกอบด้วยคำสั่ง 15 ชนิด แบ่งเป็น กลุ่มคำสั่งเลือกpointer กับ กลุ่มคำสั่งทำงานกับpointer

คำสัง
กลุ่มคำสั่งเลือกpointer เป็นอักขระพิมพ์ใหญ่ทั้งหมด
ประกอบด้วย 7 ชนิดคำสั่ง
B = เลือกใช้งาน pointer B
O = เลือกใช้งาน pointer O
M = เลือกใช้งาน pointer M
W = เลือกใช้งาน pointer W
A = เลือกใช้งาน pointer A
L = เลือกใช้งาน pointer L
K = เลือกใช้งาน pointer K

กลุ่มคำสั่งทำงานกับpointer เป็นอักขระพิมพ์เล็กทั้งหมด
ประกอบด้วย 8 ชนิดคำสั่ง
d = เลื่อนตำแหน่ง pointer ไปข้างหน้า 1 ช่อง
b = เลือนตำแหน่ง pointer ไปข้างหลัง 1 ช่อง
m = เพิ่มค่า 1 ให้กับข้อมูลในตำแหน่ง ที่ pointer ชี้อยู่
w = ลดค่า 1 ให้กับข้อมูลในตำแหน่ง ที่ pointer ชี้อยู่
l = กระโดดไปที่ k ถ้าข้อมูลในตำแหน่งที่ pointer ชี้อยู่ มีค่าเป็น 0
k = กระโดดไปที่ l ถ้าข้อมูลในตำแหน่งที่ pointer ชี้อยู่ มีค่าไม่เป็น 0
a = รับอักขระผ่านทาง stdin มาเก็บในตำแหน่งที่pointer ชี้อยู่
o = แสดงผลอักขระตามค่า ASCII ของข้อมูลในตำแหน่งที่pointer ชี้อยู่ ออกทาง stdout

ความหมายของแต่ละสัญลักษณ์ในภาษาอังกฤษ
d มาจากคำว่า direct แปลว่า มุ่ง (ไปข้างหน้า)
b มาจากคำว่า back แปลว่า ย้อนหลัง
m มาจากคำว่า mount แปลว่า เพิ่มขึ้น
w มาจากคำว่า whittle แปลว่า ลดลง
l มาจากคำว่า loop แปลว่า วงรอบ
k มาจากคำว่า loop back แปลว่า วนกลับ
(k เกิดจากสองอักขระชนกัน คือ lจากคำว่า loop และ < ซึ่งเป็นเครื่องหมายลูกศรให้กลับไปที่จุดเริ่มต้น ของการวนซ้ำ )
a มาจากคำว่า admit แปลว่า รับ
o มาจากคำว่า out แปลว่า ออก

ตัวอย่าง

โปรแกรม Hello World!

B mmmmmmmmmm
O b
M bb
W bbb
A bbbb
B
l
O mmmmmmm
M mmmmmmmmmm
W mmm
A m
B w
k
O mm o
M m o mmmmmmm oo mmm o
W mm o
O mmmmmmmmmmmmmmm o
M o mmm o wwwwww o wwwwwwww o
W m o
A o