View Single Post
Old Jul 20th, 2006, 2:22 AM   #41
v0id
Hobbyist Programmer
 
Join Date: Apr 2006
Posts: 155
Rep Power: 3 v0id is on a distinguished road
Arevos did show his version of a Brainf*ck interpreter in Python.
Here's mine in C.
// brainfuck.c
#include <stdio.h>
#define _CELLS 30000 // The original Brainf*ck have 30000 cells

int main(int argc, char **argv) 
{
    int args, length, l;
    int x[_CELLS], pc;
    int p[_CELLS], xc;

    FILE *File;

    for(args = 1; args < argc; args++)
    {
        File   = fopen(argv[args], "r");
        length = l = 0;
        
        for(pc = 0; pc < _CELLS && (p[pc] = getc(File)) != EOF; pc++)
            length++;
        
        fclose(File);    
        pc = 0;
        
        for(xc = 0; xc < _CELLS; xc++)
           x[xc] = 0;

        xc = 0;

        for(pc = 0; pc < length; pc++)
        {
            switch(p[pc])
            {
                case 43:                             // '+'
                    x[xc]++;
                break;
                case 45:                             // '-'
                    x[xc]--;
                break;
                case 62:                             // '>'
                    xc++;
                break;
                case 60:                             // '<'
                    xc--;
                break;
                case 46:                             // '.'
                    putchar(x[xc]);
                break;
                case 44:                             // ','
                    x[xc] = getchar();
                break;
                case 91:                             // '['
                {
                    if(x[xc] == 0) 
                    {
                        pc++;
                        while(l > 0 || p[pc] != 93) 
                        {
                            if(p[pc] == 91) 
                                l++;
                                if(p[pc] == 93) 
                                    l--;
                            pc++;
                        }
                    }
                }
                break;
                case 93:                             // ']'
                {
                    pc--;
                    while(l > 0 || p[pc] != 91) 
                    {
                        if(p[pc] == 93) 
                            l++;
                            if(p[pc] == 91) 
                                l--;
                        pc--;
                    }
                    pc--;
                }
                break; 
            }    

        }  
    }

    putchar(10); // A newline in the end
    return 0;
}
code.txt
++++++++++[>+++++++>+<<-]>++.
>[<+++>>+++<-]<-.<++[>+++>++++<<-]
>+..+++.>>++.[<<->>-]<[<+>-]
<.<++++++[>++++<-]>.+++.<++[>---<-]
>.<++[>----<-]>.
The test
C:\Brainfuck>brainfuck code.txt
Hello World

C:\Brainfuck>
__________________
-- v0id
v0id is offline   Reply With Quote