diff --git a/src/modal.c b/src/modal.c index 7f22e9d..adaa97d 100644 --- a/src/modal.c +++ b/src/modal.c @@ -168,15 +168,6 @@ parse_frag(char *s) return s; } -static char * -create_rule(Rule *r, int id, char *s) -{ - r->id = id, s += 2; - r->a = dict_, s = parse_frag(s); - r->b = dict_, s = parse_frag(s); - return s; -} - static int rewrite(void) { @@ -186,14 +177,17 @@ rewrite(void) if(spacer(last)) { Rule *r; if(c == '<' && s[1] == '>') { - r = rules_++; - s = create_rule(r, rules_ - rules - 1, s); + r = rules_++, r->id = rules_ - rules - 1; + r->a = dict_, s = parse_frag(s + 2); + r->b = dict_, s = parse_frag(s); while(*s == ' ') s++; return commit_rule(r, s, 1); } if(c == '?' && s[1] == '(') { - r = &lambda, cap = walk(s + 1); - create_rule(&lambda, -1, s), s = cap; + cap = walk(s + 1); + r = &lambda, r->id = -1; + r->a = dict_, s = parse_frag(s + 2); + r->b = dict_, parse_frag(s), s = cap; while(*s == ' ') s++; if((res = match_rule(&lambda, s)) != NULL) return write_rule(&lambda, res); @@ -219,7 +213,7 @@ main(int argc, char **argv) return !printf("usage: modal [-vqn] source.modal\n"); for(i = 1; i < argc && *argv[i] == '-'; i++) { switch(argv[i][1]) { - case 'v': /* version */ return !printf("Modal Interpreter, 20 Apr 2024.\n"); + case 'v': /* version */ return !printf("Modal Interpreter, 21 Apr 2024.\n"); case 'q': /* quiet */ fclose(stderr); break; case 'n': /* infinite */ cycles = 0xffffffff; break; }