diff share/delvs-master/bf.h @ 3840:38a5b4d8a98e

<oerjan> rm -R share/delvs-master; mv delvs-master share
author HackBot
date Wed, 25 Sep 2013 13:47:14 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/delvs-master/bf.h	Wed Sep 25 13:47:14 2013 +0000
@@ -0,0 +1,67 @@
+#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);
+ */