Brainfuck

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

Brainfuckתרגום חופשי מאנגלית: "דפיקת מוח"), ובקיצור BF, היא שפת תכנות הפועלת באמצעות שמונה פקודות בלבד שאופייניות למכונת טיורינג. את השפה פיתח אורבן מילר, בערך בשנת 1993. מטעמי נימוס, השפה מכונה גם ***Brainf או Brainf*ck.

המכונה שעליה פועלת שפת BF כוללת:

  • זיכרון לאחסון התוכנית.
  • זיכרון נפרד לאחסון הנתונים שעליהם פועלת התוכנית. זהו מערך של תאים, שגודל כל אחד מהם בייט אחד והערך ההתחלתי של כל אחד מהם הוא 0.
  • מצביע על התא הנוכחי בזיכרון הנתונים. בערכו ההתחלתי המצביע מצביע על התא הראשון בזיכרון הנתונים.
  • מחרוזת קלט.
  • מחרוזת פלט.

[עריכה] הפקודות של BF

הפקודה המשמעות
< קדם את המצביע לתא הבא
> החזר את המצביע תא אחד לאחור
+ הוסף 1 לתא הנוכחי
- הורד 1 מהתא הנוכחי
, קרא תו ממחרוזת הקלט והכנס את ערך ה-ASCII שלו לתוך התא הנוכחי
. כתוב את ערך ה-ASCII של התא הנוכחי למחרוזת הפלט
] דלג קדימה לפקודה שאחרי ה-[ המתאים אם התא הנוכחי שווה ל-0
[ דלג אחורה לפקודה שאחרי ה-] המתאים אם התא הנוכחי שונה מ-0

ניתן לזהות, לאחר קריאת פקודות אלה, ששפת תכנות זו באה לממש את מכונת טיורינג. אוצר הפקודות הדל של השפה, ופשטותן של הפקודות, עושים את התכנות באמצעותה למשימה מייגעת (עניין המסביר את שמה), אך, בהיותה מימוש ישיר של מכונת טיורינג, ברור כי היא שלמה-טיורינג.

התוכנית הבאה מוציאה למחרוזת הפלט את ההודעה "Hello World!‎" (אין משמעות לפיצול לשורות, הוא רק לנוחות ההצגה):

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

ניתן "לתרגם" בין שפת BF ובין חלק משפת C לפי הטבלה הבאה:

Brainfuck שפת C שפת
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
, *ptr = getchar();
. putchar(*ptr);
[ while (*ptr) {
] }

כמובן שתרגום זה איננו מלא, ולא ניתן ליצור כך תוכנית תקינה בשפת C.

[עריכה] ראו גם

[עריכה] קישורים חיצוניים