view share/delvs-master/bf.h @ 12500:e48c08805365 draft default tip

<b_jonas> ` learn \'The password of the month is Cthulhuquagdonic Mothraquagdonic Narwhalicorn.\' # https://logs.esolangs.org/libera-esolangs/2024-04.html#lKE Infinite craft
author HackEso <hackeso@esolangs.org>
date Wed, 01 May 2024 06:39:10 +0000
parents 38a5b4d8a98e
children
line wrap: on
line source

#include <stdio.h>
#define c g->code
#define p g->pointer
#define f g->file

struct Data {
  const char *code;
  char vars[30000];
  char *pointer;
};

void dummyLexer(struct Data *g) { while(*c) if(*c++ == ']') return; }

void lexer(struct Data *g) {
  const char *cc = c;
  while(*c) {
    switch (*c++) {
      case '>':
        ++p;
        break;

      case '<':
        --p;
        break;

      case '+':
        ++*p;
        break;

      case '-':
        --*p;
        break;

      case '.':
        putchar(*p);
        break;

      case ',':
        *p = getchar();
        break;

      case '[':
        cc = c;
        if(!*p) dummyLexer(g);
        while(*p) {
          c = cc; // restore char position to start of loop
          lexer(g);
        }
        break;

      case ']':
        return;

      default:
        // everything else is comments
        break;
    }
  }
  return;
}
/*
 * Usage:
 *  struct Data g;
 *  g.code = file;
 *  g.pointer = &g.data[15000];
 *  lexer(&g);
 */