Empty rules are leaving empty lists behind

This commit is contained in:
Devine Lu Linvega 2024-05-10 20:17:05 -07:00
parent a97e6b1963
commit 16cb1823c4
1 changed files with 8 additions and 4 deletions

View File

@ -225,9 +225,13 @@ parse_frag(char **side, char *s)
{
char c, *cap;
while((c = *s) && c == ' ') s++;
if(c == ')' || c == '<' || c == '>' || (c == '(' && s[1] == ')'))
if(c == ')') {
*side = NULL;
else {
return s;
} else if((c == '<' && s[1] == '>') || (c == '>' && s[1] == '<') || (c == '(' && s[1] == ')')) {
*side = NULL;
return s + 2;
} else {
cap = walk(s), *side = dict_;
if(c == '(')
dict_ = copy(s + 1, dict_, cap - s - 2);
@ -267,7 +271,7 @@ rewrite(void)
while(*s == ' ') s++;
cap = walk(s), r = find_rule(s, cap);
if(r != NULL) {
if(!quiet) fprintf(stderr, ">< (%s) (%s)\n", r->a, r->b);
if(!quiet) fprintf(stderr, ">< (%s) (%s)\n", r->a ? r->a : "", r->b ? r->b : "");
r->a = 0;
}
while(*cap == ' ') cap++;
@ -278,7 +282,7 @@ rewrite(void)
r = rules_, r->id = rules_ - rules;
s = parse_frag(&r->b, parse_frag(&r->a, s + 2));
if(r->a != NULL) {
if(!quiet) fprintf(stderr, "<> (%s) (%s)\n", r->a, r->b);
if(!quiet) fprintf(stderr, "<> (%s) (%s)\n", r->a ? r->a : "", r->b ? r->b : "");
rules_++;
}
while(*s == ' ') s++;