生活随笔
收集整理的這篇文章主要介紹了
Brainfuck解释器(C#)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
根據維基百科上的內容隨手寫的一個BF解釋器,輸入有兩個參數——程序代碼、輸入流,返回內容為輸出流。輸入、輸出均為字符串。
字符 含義 C語言替換
| > | 指針加一 | ++ptr; |
| < | 指針減一 | --ptr; |
| + | 指針指向的字節的值加一 | ++*ptr; |
| - | 指針指向的字節的值減一 | --*ptr; |
| . | 輸出指針指向的單元內容(字符內碼) | putchar(*ptr); |
| , | 輸入內容到指針指向的單元(字符內碼) | *ptr=getchar(); |
| [ | 如果指針指向的單元值為零,向后跳轉到對應的]指令的次一指令處 | while(*ptr){ |
| ] | 如果指針指向的單元值不為零,向前跳轉到對應的[指令的次一指令處 | } |
using System.Collections.Generic;namespace HumphreyJ.BF
{public class Brainfuck{public static string eval(
string code,
string input){string output =
"";int pointer_code =
0;int pointer_input =
0;int pointer_output =
0;Stack<int> stack =
new Stack<
int>
();//char array[infinitely large size] = {0};List<
char> array =
new List<
char> {
'\0' };//char* ptr = array;int ptr =
0;while (pointer_code <
code.Length){switch (code[pointer_code]){case '>':{//++ptr;++
ptr;break;}case '<':{//--ptr;--
ptr;break;}case '+':{//++*ptr;if (array.Count ==
ptr){array.Add('\0');}++
array[ptr];break;}case '-':{//--*ptr; if (array.Count ==
ptr){array.Add('\0');}--
array[ptr];break;}case '.':{//putchar(*ptr);output +=
array[ptr];pointer_output++
;break;}case ',':{//*ptr = getchar();array[ptr] = input[pointer_input++
];break;}case '[':{//while (*ptr) {if (array[ptr] !=
0){stack.Push(pointer_code);}else{int s =
1;while (s >
0){pointer_code++
;switch (code[pointer_code]){case '[':{s++
;break;}case ']':{s--
;break;}}}}break;}case ']':{//}pointer_code = stack.Pop() -
1;break;}}pointer_code++
;}return output;}}
} ?
轉載于:https://www.cnblogs.com/humphreyj/p/4968399.html
總結
以上是生活随笔為你收集整理的Brainfuck解释器(C#)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。