This commit is contained in:
Devine Lu Linvega 2024-04-04 10:07:49 -07:00
parent 22312cf425
commit 22229bdbb9
2 changed files with 29 additions and 34 deletions

View File

@ -9,8 +9,25 @@ static Rule rules[0x100];
static char dict[0x8000], *next = dict; static char dict[0x8000], *next = dict;
static char program[0x1000], *prog_ = program; static char program[0x1000], *prog_ = program;
static int
reduce(void)
{
return 1;
}
static void
display(void)
{
int i;
for(i = 0; i < rules_len; i++) {
Rule *r = &rules[i];
printf("Rule #%d: %s -> %s\n", i, r->a, r->b);
}
printf("Program: %s\n", program);
}
static char * static char *
addside(FILE *f) parse_rulefrag(FILE *f)
{ {
int depth = 0; int depth = 0;
char c, *origin = next; char c, *origin = next;
@ -27,44 +44,21 @@ addside(FILE *f)
} }
static void static void
addrule(FILE *f) tokenize(char *t, FILE *f)
{
Rule *r = &rules[rules_len++];
r->a = addside(f), r->b = addside(f);
}
static void
addprogram(FILE *f)
{ {
char c; char c;
if(t[0] == '<' && t[1] == '>') {
Rule *r = &rules[rules_len++];
r->a = parse_rulefrag(f), r->b = parse_rulefrag(f);
return;
}
while(f && fread(&c, 1, 1, f) && c && c != 0xa) while(f && fread(&c, 1, 1, f) && c && c != 0xa)
*prog_++ = c; *prog_++ = c;
*prog_++ = 0x20; *prog_++ = 0x20;
} }
static void
tokenize(char *t, FILE *f)
{
if(t[0] == '<' && t[1] == '>') {
addrule(f);
return;
}
addprogram(f);
}
static void
display()
{
int i;
for(i = 0; i < rules_len; i++) {
Rule *r = &rules[i];
printf("Rule #%d: %s -> %s\n", i, r->a, r->b);
}
printf("Program: %s\n", program);
}
static int static int
eval(char *path) parse(char *path)
{ {
FILE *f; FILE *f;
char c, token[0x40], *tokptr; char c, token[0x40], *tokptr;
@ -80,7 +74,6 @@ eval(char *path)
return printf("Token too long: %s\n", token); return printf("Token too long: %s\n", token);
} }
*tokptr++ = 0x00, tokenize(token, f), tokptr = token; *tokptr++ = 0x00, tokenize(token, f), tokptr = token;
display();
fclose(f); fclose(f);
return 1; return 1;
} }
@ -92,5 +85,7 @@ main(int argc, char **argv)
return !printf("usage: modal [-v] source.modal\n"); return !printf("usage: modal [-v] source.modal\n");
if(argc < 3 && argv[1][0] == '-' && argv[1][1] == 'v') if(argc < 3 && argv[1][0] == '-' && argv[1][1] == 'v')
return !printf("Modal - Modal Interpreter, 3 Apr 2024.\n"); return !printf("Modal - Modal Interpreter, 3 Apr 2024.\n");
return !eval(argv[1]); parse(argv[1]);
display();
return !reduce();
} }

View File

@ -2,4 +2,4 @@
<> hello bye <> hello bye
<> (a (b (c))) (end) <> (a (b (c))) (end)
(dup hello) hello world