Removed lambda rule memory

This commit is contained in:
Devine Lu Linvega 2024-05-07 08:20:39 -07:00
parent 09dd2a9795
commit 680a039cf9
1 changed files with 6 additions and 6 deletions

View File

@ -6,7 +6,7 @@ typedef struct {
} Rule; } Rule;
static int flip, quiet, debug, cycles = 0x200000; static int flip, quiet, debug, cycles = 0x200000;
static Rule rules[0x1000], *rules_ = rules, lambda; static Rule rules[0x1000], *rules_ = rules;
static char dict[0x8000], *dict_ = dict, empty; static char dict[0x8000], *dict_ = dict, empty;
static char bank_a[0x4000], *src_ = bank_a; static char bank_a[0x4000], *src_ = bank_a;
static char bank_b[0x4000], *dst_ = bank_b; static char bank_b[0x4000], *dst_ = bank_b;
@ -252,17 +252,17 @@ rewrite(void)
} }
/* phase: lambda */ /* phase: lambda */
if(c == '?' && s[1] == '(') { if(c == '?' && s[1] == '(') {
char *d_ = dict_; char *d = dict_;
cap = walk(s + 1); cap = walk(s + 1);
r = &lambda, r->id = -1; r = rules_, r->id = -1;
parse_frag(&r->b, parse_frag(&r->a, s + 2)); parse_frag(&r->b, parse_frag(&r->a, s + 2));
s = cap; s = cap;
while(*s == ' ') s++; while(*s == ' ') s++;
if(!apply_rule(&lambda, s)) { if(!apply_rule(r, s)) {
if(!quiet) fprintf(stderr, "%02d %s\n", r->id, src_), ++r->refs; if(!quiet) fprintf(stderr, "%02d %s\n", r->id, src_), ++r->refs;
write_tail(s); write_tail(s);
} }
dict_ = d_; dict_ = d;
return 1; return 1;
} }
/* phase: match */ /* phase: match */
@ -286,7 +286,7 @@ main(int argc, char **argv)
return !printf("usage: modal [-vqn] source.modal\n"); return !printf("usage: modal [-vqn] source.modal\n");
for(i = 1; i < argc && *argv[i] == '-'; i++) { for(i = 1; i < argc && *argv[i] == '-'; i++) {
switch(argv[i][1]) { switch(argv[i][1]) {
case 'v': /* version */ return !printf("Modal Interpreter, 4 May 2024.\n"); case 'v': /* version */ return !printf("Modal Interpreter, 7 May 2024.\n");
case 'q': /* quiet */ quiet = 1; break; case 'q': /* quiet */ quiet = 1; break;
case 'p': /* debug */ debug = 1; break; case 'p': /* debug */ debug = 1; break;
case 'n': /* infinite */ cycles = 0xffffffff; break; case 'n': /* infinite */ cycles = 0xffffffff; break;