Starting rewrite
This commit is contained in:
parent
d80725f4c8
commit
921cb53e2a
17
src/modal.c
17
src/modal.c
|
@ -6,8 +6,9 @@ typedef struct {
|
|||
|
||||
static int rules_len;
|
||||
static Rule rules[0x100];
|
||||
static char dict[0x8000], *next = dict;
|
||||
static char dict[0x8000], *dict_ = dict;
|
||||
static char prog[0x1000], *prog_ = prog;
|
||||
static char outp[0x1000], *outp_ = outp;
|
||||
static char *regs[0x100];
|
||||
|
||||
static char *
|
||||
|
@ -38,7 +39,7 @@ match(char *p, Rule *r)
|
|||
}
|
||||
|
||||
static int
|
||||
reduce(void)
|
||||
rewrite(void)
|
||||
{
|
||||
char c, *p = prog;
|
||||
while((c = *p)) {
|
||||
|
@ -47,6 +48,7 @@ reduce(void)
|
|||
Rule *r = &rules[i];
|
||||
match(p, r);
|
||||
}
|
||||
*outp_++ = c;
|
||||
p++;
|
||||
}
|
||||
return 1;
|
||||
|
@ -60,23 +62,23 @@ display(void)
|
|||
Rule *r = &rules[i];
|
||||
printf("Rule #%d: %s -> %s\n", i, r->a, r->b);
|
||||
}
|
||||
printf("Program: %s\n", prog);
|
||||
printf("\nEval: %s -- %s\n", prog, outp);
|
||||
}
|
||||
|
||||
static char *
|
||||
parse_rulefrag(FILE *f)
|
||||
{
|
||||
int depth = 0;
|
||||
char c, *origin = next;
|
||||
char c, *origin = dict_;
|
||||
while(f && fread(&c, 1, 1, f) && c && c != 0xa) {
|
||||
if(c == '(') depth++;
|
||||
if(c == ')') --depth;
|
||||
if(c == ' ' && !depth)
|
||||
break;
|
||||
else
|
||||
*next++ = c;
|
||||
*dict_++ = c;
|
||||
}
|
||||
*next++ = 0;
|
||||
*dict_++ = 0;
|
||||
return origin;
|
||||
}
|
||||
|
||||
|
@ -122,6 +124,7 @@ main(int argc, char **argv)
|
|||
if(argc < 3 && argv[1][0] == '-' && argv[1][1] == 'v')
|
||||
return !printf("Modal - Modal Interpreter, 3 Apr 2024.\n");
|
||||
parse(argv[1]);
|
||||
rewrite();
|
||||
display();
|
||||
return !reduce();
|
||||
return 0;
|
||||
}
|
|
@ -1,5 +1,3 @@
|
|||
<> (?x world) (?x whurl)
|
||||
<> (?b bar) (?b baz)
|
||||
<> bar baz
|
||||
|
||||
(hello world)
|
||||
((foo baz) bar)
|
||||
foo bar
|
Loading…
Reference in New Issue