Jackiesteed

www.github.com/jackiesteed

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

下面是自己C++实现的BrainFuck编译器:

#include <iostream>
#include <cstring>
#include <fstream>
#include <stack>

using namespace std;

const int MAXN = 10000000;
char command[MAXN];
int jump[MAXN];
char mem[MAXN];
int p = MAXN / 2;
inline bool isvalid(char c)
{
    if(c == '>' || c == '<' || c == '+' || c == '-' || c == '.' || c == ',' ||
       c == '[' || c == ']')
    return true;
    return false;
}
void init()
{
    int len = strlen(command);
    stack<int> stk;
    for(int i = 0; i < len; i++)
    {
        if('[' == command[i])
        stk.push(i);
        else if(']' == command[i])
        {
            jump[i] = stk.top();
            jump[stk.top()] = i;
            stk.pop();
        }
    }
}
int main()
{
    ifstream is("input.txt");

    int len = 0;
    char c;
    while(is >> c)
    {
        if(isvalid(c))
        command[len++] = c;
    }
    is.close();
    init();
    int idx = 0;

    while(idx < len)
    {
        switch(command[idx])
        {
            case '>':
            {
                p++;
                break;
            }
            case '<' :
            {
                p--;
                break;
            }
            case '+':
            {
                mem[p]++;
                break;
            }
            case '-':
            {
                mem[p]--;
                break;
            }
            case '.':
            {
                putchar(mem[p]);
                break;
            }
            case ',':
            {
                mem[p] = getchar();
                break;
            }
            case '[':
            {
                if(0 == mem[p])
                idx = jump[idx];
                break;
            }
            case ']':
            {
                if(0 != mem[p])
                idx = jump[idx];
            }
        }
        idx++;
    }

    return 0;
}

* This source code was highlighted by YcdoiT. ( style: Navajo )

这是打印"Hello World!"的BF代码:

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

posted on 2011-09-28 00:24  Jackiesteed  阅读(242)  评论(0编辑  收藏  举报