Mercurial > repo
comparison 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 |
comparison
equal
deleted
inserted
replaced
3839:02b377019805 | 3840:38a5b4d8a98e |
---|---|
1 #include <stdio.h> | |
2 #define c g->code | |
3 #define p g->pointer | |
4 #define f g->file | |
5 | |
6 struct Data { | |
7 const char *code; | |
8 char vars[30000]; | |
9 char *pointer; | |
10 }; | |
11 | |
12 void dummyLexer(struct Data *g) { while(*c) if(*c++ == ']') return; } | |
13 | |
14 void lexer(struct Data *g) { | |
15 const char *cc = c; | |
16 while(*c) { | |
17 switch (*c++) { | |
18 case '>': | |
19 ++p; | |
20 break; | |
21 | |
22 case '<': | |
23 --p; | |
24 break; | |
25 | |
26 case '+': | |
27 ++*p; | |
28 break; | |
29 | |
30 case '-': | |
31 --*p; | |
32 break; | |
33 | |
34 case '.': | |
35 putchar(*p); | |
36 break; | |
37 | |
38 case ',': | |
39 *p = getchar(); | |
40 break; | |
41 | |
42 case '[': | |
43 cc = c; | |
44 if(!*p) dummyLexer(g); | |
45 while(*p) { | |
46 c = cc; // restore char position to start of loop | |
47 lexer(g); | |
48 } | |
49 break; | |
50 | |
51 case ']': | |
52 return; | |
53 | |
54 default: | |
55 // everything else is comments | |
56 break; | |
57 } | |
58 } | |
59 return; | |
60 } | |
61 /* | |
62 * Usage: | |
63 * struct Data g; | |
64 * g.code = file; | |
65 * g.pointer = &g.data[15000]; | |
66 * lexer(&g); | |
67 */ |