Mercurial > repo
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); + */