elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Interprete brainfuck
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Interprete brainfuck  (Leído 1,385 veces)
OnTheCore

Desconectado Desconectado

Mensajes: 10


Ver Perfil
[C] Interprete brainfuck
« en: 10 Marzo 2015, 22:28 pm »

Hola gente, les dejo este interpete de brainfuck que programe, espero sus criticas y consejos. Gracias.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void Brainfuck(char *pcData, unsigned long dwData, unsigned char *ucStack, unsigned long dwStack, unsigned long *dwStackPtr);
  5.  
  6. int main()
  7. {
  8.    char ucData[] = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.";
  9.  
  10.    unsigned long dwStackPtr = 0;
  11.    unsigned long dwStack = 16384;
  12.    void *pvStack = malloc(dwStack);
  13.    memset(pvStack, 0, dwStack);
  14.    Brainfuck(ucData, sizeof(ucData) - 1, pvStack, dwStack, &dwStackPtr);
  15.    free(pvStack);
  16.  
  17.    return 0;
  18. }
  19.  
  20. void Brainfuck(char *pcData, unsigned long dwData, unsigned char *ucStack, unsigned long dwStack, unsigned long *dwStackPtr)
  21. {
  22.    if(!pcData || !dwData || !ucStack || !dwStack || !dwStackPtr) {return;}
  23.  
  24.    unsigned long i;
  25.    for(i = 0; i < dwData; i++)
  26.    {
  27.        switch(pcData[i])
  28.        {
  29.            case '>': if(*dwStackPtr < dwStack) {(*dwStackPtr)++;} break;
  30.            case '<': if(*dwStackPtr) {(*dwStackPtr)--;} break;
  31.            case '+': ucStack[*dwStackPtr]++; break;
  32.            case '-': ucStack[*dwStackPtr]--; break;
  33.            case '.': putchar(ucStack[*dwStackPtr]); break;
  34.            case ',': ucStack[*dwStackPtr] = getchar(); break;
  35.            case '[':
  36.            {
  37.                unsigned long j = 0;
  38.                int iLoop = 0;
  39.                do {
  40.                    if(pcData[i + j] == '[') {iLoop++;} else if(pcData[i + j] == ']') {iLoop--;}
  41.                    j++;
  42.                } while((j < dwData - i) && iLoop);
  43.  
  44.                while(ucStack[(*dwStackPtr)]) {Brainfuck(&pcData[i + 1], j - 1, ucStack, dwStack, dwStackPtr);}
  45.                i += j;
  46.                break;
  47.            }
  48.        }
  49.    }
  50. }


« Última modificación: 14 Marzo 2015, 18:29 pm por OnTheCore » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Interprete de Dos
Programación Visual Basic
Hendrix 2 1,653 Último mensaje 24 Marzo 2006, 15:21 pm
por Hendrix
Interprete VBS
Scripting
Napster.A530 1 2,995 Último mensaje 4 Agosto 2010, 01:17 am
por Novlucker
[Aporte] Interpretador de Brainfuck Commandline
Programación C/C++
Meine programmen 0 1,369 Último mensaje 10 Enero 2015, 16:24 pm
por Meine programmen
Interpretador de brainfuck.
Programación C/C++
BoredGuest 2 1,688 Último mensaje 2 Febrero 2015, 08:15 am
por eferion
Duda Brainfuck
Programación General
Baal_30 9 4,320 Último mensaje 3 Julio 2015, 20:16 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines