From: ceriel Date: Mon, 13 Apr 1987 16:11:50 +0000 (+0000) Subject: -only generate warnings when there are conflict resolvers but no conflicts, X-Git-Tag: release-5-5~4205 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=4805d67ca10d8aec28418286ae921464728b7c5c;p=ack.git -only generate warnings when there are conflict resolvers but no conflicts, -handle "onerror" differently --- diff --git a/util/LLgen/src/check.c b/util/LLgen/src/check.c index 713f3dd35..7b9aadcf7 100644 --- a/util/LLgen/src/check.c +++ b/util/LLgen/src/check.c @@ -228,9 +228,8 @@ check(p) register p_gram p; { else { if (q->t_flags & RESOLVER) { q->t_flags |= NOCONF; - error(p->g_lineno, - "%%while, no conflict"); - retval = 1; + warning(p->g_lineno, + "%%while without conflict"); } } free((p_mem) temp); @@ -255,9 +254,8 @@ check(p) register p_gram p; { } else { if (l->l_flag & (COND|PREFERING|AVOIDING)) { l->l_flag |= NOCONF; - error(p->g_lineno, + warning(p->g_lineno, "Conflict resolver without conflict"); - retval = 1; } } free( (p_mem) temp); diff --git a/util/LLgen/src/gencode.c b/util/LLgen/src/gencode.c index 5c556dc8b..685967b06 100644 --- a/util/LLgen/src/gencode.c +++ b/util/LLgen/src/gencode.c @@ -195,6 +195,13 @@ genrecovery() { } fputs(c_arrend, f); free((p_mem) index); + if (onerror) { + fputs("short LLtok[] = {\n", f); + for (t = tokens; t < maxt; t++) { + fprintf(f, t->t_tokno<0400 ? "'%s',\n" : "%s,\n",t->t_string); + } + fputs(c_arrend, f); + } fputs("#define LL_NEWMESS\n", f); copyfile(rec_file); if (ferror(f) != 0) { @@ -526,6 +533,9 @@ alternation(p, safety, mustscan, mustpop, lb) register p_gram p; { lb, hulp2); } if (l->l_flag & COND) { + if (l->l_flag & NOCONF) { + fputs("#ifdef ___NOCONFLICT___\n", f); + } set = setalloc(); setunion(set, l->l_others); setintersect(set, l->l_symbs); @@ -536,6 +546,10 @@ alternation(p, safety, mustscan, mustpop, lb) register p_gram p; { fputs("if (!",f); getaction(0); fprintf(f,") goto L_%d;\n", hulp); + if (l->l_flag & NOCONF) { + fputs("#endif\n", f); + free((p_mem) set); + } } if (!haddefault && (l->l_flag & DEF)) { haddefault = 1; @@ -551,7 +565,7 @@ alternation(p, safety, mustscan, mustpop, lb) register p_gram p; { } rulecode(l->l_rule, nsafe, mustscan, mustpop); fputs(c_break,f); - if (l->l_flag & COND) { + if ((l->l_flag & COND) && !(l->l_flag & NOCONF)) { p++; fprintf(f,"L_%d : ;\n",hulp); if (g_gettype(p+1) == EORULE) { @@ -813,6 +827,9 @@ genswhead(q, rep, cnt, safety, ispushed) register p_term q; { fprintf(f, "L_%d : ", hulp2); fputs("switch(LLcsymb) {\n", f); if (q->t_flags & RESOLVER) { + if (q->t_flags & NOCONF) { + fputs("#ifdef ___NOCONFLICT___\n", f); + } hulp1 = nlabel++; p1 = setalloc(); setunion(p1,q->t_first); @@ -830,6 +847,9 @@ genswhead(q, rep, cnt, safety, ispushed) register p_term q; { fputs("if (", f); getaction(0); fprintf(f, ") goto L_%d;\n", hulp1); + if (q->t_flags & NOCONF) { + fputs("#endif ___NOCONFLICT___\n", f); + } } if (safeterm == 0 || (!onerror && safeterm <= SAFESCANDONE)) { fputs("default:\n", f); diff --git a/util/LLgen/src/main.c b/util/LLgen/src/main.c index 846bc9c9a..9fbf305f7 100644 --- a/util/LLgen/src/main.c +++ b/util/LLgen/src/main.c @@ -206,6 +206,18 @@ error(lineno,s,t,u) string s,t,u; { fputs("\n",stderr); } +/* VARARGS1 */ +warning(lineno,s,t,u) string s,t,u; { + /* + * Just a warning + */ + + if (!lineno) lineno = 1; + fprintf(stderr,"\"%s\", line %d : (Warning) ",f_input, lineno); + fprintf(stderr,s,t,u); + fputs("\n",stderr); +} + /* VARARGS1 */ fatal(lineno,s,t,u) string s,t,u; { /*