* in an alternation, the sets that determine the direction to take,
* must be disjunct.
*/
- register p_nont p;
- register int s;
+ p_nont p;
+ int s;
p_file x = files;
f_input = x->f_name;
if (p->n_flags & RECURSIVE) {
error(p->n_lineno,
"Recursion in default for nonterminal %s",
- p->n_name);
+ p->n_name, NULL);
}
/*
* If a printout is needed for this rule in
if (verbose) fclose(fout);
}
-STATIC
-prline(s) char *s; {
+STATIC void prline(char *s) {
fputs(s, fout);
spaces();
}
-STATIC
-printset(p,s) register p_set p; string s; {
+STATIC void printset(p_set p, char *s) {
/*
* Print the elements of a set
*/
- register int i;
- register int j;
- register p_token pt;
+ int i;
+ int j;
+ p_token pt;
string name;
int k;
int hulp;
prline("}\n");
}
-STATIC int
-check(p) register p_gram p; {
+STATIC int check(p_gram p) {
/*
* Search for conflicts in a grammar rule.
*/
- register p_set temp;
- register int retval;
+ p_set temp;
+ int retval;
retval = 0;
for (;;) {
case EORULE :
return retval;
case NONTERM : {
- register p_nont n;
+ p_nont n;
n = &nonterms[g_getcont(p)];
if (g_getnpar(p) != getntparams(n)) {
error(p->g_lineno,
"Call of %s: parameter count mismatch",
- n->n_name);
+ n->n_name, NULL);
}
break; }
case TERM : {
- register p_term q;
+ p_term q;
q = g_getterm(p);
retval |= check(q->t_rule);
if (setempty(q->t_first)) {
q->t_flags |= EMPTYFIRST;
retval = 1;
- error(p->g_lineno, "No symbols in term");
+ error(p->g_lineno, "No symbols in term", NULL, NULL);
}
if (empty(q->t_rule)) {
q->t_flags |= EMPTYTERM;
retval = 1;
- error(p->g_lineno, "Term with variable repetition count produces empty");
+ error(p->g_lineno, "Term with variable repetition count produces empty", NULL, NULL);
}
temp = setalloc();
setunion(temp,q->t_first);
* No conflict resolver
*/
error(p->g_lineno,
- "Repetition conflict");
+ "Repetition conflict", NULL, NULL);
retval = 1;
moreverbose(temp);
}
if (q->t_flags & RESOLVER) {
q->t_flags |= NOCONF;
warning(p->g_lineno,
- "%%while without conflict");
+ "%%while without conflict", NULL, NULL);
}
}
free((p_mem) temp);
break; }
case ALTERNATION : {
- register p_link l;
+ p_link l;
l = g_getlink(p);
temp = setalloc();
* symbols
*/
if (!(l->l_flag & (COND|PREFERING|AVOIDING))) {
- error(p->g_lineno,
-"Alternation conflict");
+ error(p->g_lineno, "Alternation conflict", NULL, NULL);
retval = 1;
moreverbose(temp);
}
} else {
if (l->l_flag & (COND|PREFERING|AVOIDING)) {
l->l_flag |= NOCONF;
- warning(p->g_lineno,
-"Conflict resolver without conflict");
+ warning(p->g_lineno, "Conflict resolver without conflict", NULL, NULL);
}
}
free( (p_mem) temp);
}
}
-STATIC
-moreverbose(t) register p_set t; {
+STATIC void moreverbose(p_set t) {
/*
* t points to a set containing conflicting symbols and pssibly
* also containing nonterminals.
* Take care that a printout will be prepared for these nonterminals
*/
- register int i;
- register p_nont p;
+ int i;
+ p_nont p;
if (verbose == 2) for (i = 0, p = nonterms; i < nnonterms; i++, p++) {
if (NTIN(t,i)) p->n_flags |= VERBOSE;
}
}
-STATIC
-prrule(p) register p_gram p; {
+STATIC void prrule(p_gram p) {
/*
* Create a verbose printout of grammar rule p
*/
- register FILE *f;
+ FILE *f;
int present = 0;
int firstalt = 1;
fputs("\n",f);
return;
case TERM : {
- register p_term q;
- register int c;
+ p_term q;
+ int c;
q = g_getterm(p);
if (present) prline("\n");
c = r_getkind(q);
fputs(c == STAR ? "]*" : c == PLUS ? "]+" :
c == OPT ? "]?" : "]", f);
- if (c = r_getnum(q)) {
+
+ c = r_getnum(q);
+ if (c) {
fprintf(f,"%d",c);
}
prline("\n");
fputs("{..} ",f);
break;
case ALTERNATION : {
- register p_link l;
+ p_link l;
l = g_getlink(p);
if (firstalt) {
p++; continue; }
case LITERAL :
case TERMINAL : {
- register p_token pt = &tokens[g_getcont(p)];
+ p_token pt = &tokens[g_getcont(p)];
fprintf(f,pt->t_tokno<0400 ?
"'%s' " : "%s ", pt->t_string);
}
}
-STATIC
-cfcheck(s1,s2,flag) p_set s1,s2; {
+STATIC void cfcheck(p_set s1, p_set s2, int flag) {
/*
* Check if s1 and s2 have elements in common.
* If so, flag must be non-zero, indicating that there is a
* conflict resolver, otherwise, flag must be zero, indicating
* that there is not.
*/
- register p_set temp;
+ p_set temp;
temp = setalloc();
setunion(temp,s1);
free((p_mem) temp);
}
-STATIC
-resolve(p) register p_gram p; {
+STATIC void resolve(p_gram p) {
/*
* resolve conflicts, as specified by the user
*/
resolve(g_getterm(p)->t_rule);
break;
case ALTERNATION : {
- register p_link l;
+ p_link l;
l = g_getlink(p);
if (l->l_flag & AVOIDING) {
/*
* This may be caused by the statement above
*/
- error(p->g_lineno,"Alternative never chosen");
+ error(p->g_lineno,"Alternative never chosen", NULL, NULL);
}
resolve(l->l_rule);
break; }
}
}
-STATIC
-propagate(set,p) p_set set; register p_gram p; {
+STATIC void propagate(p_set set, p_gram p) {
/*
* Propagate the fact that on the elements of set the grammar rule
* p will not be chosen.
}
}
-STATIC
-spaces() {
-
+STATIC void spaces() {
if (level > 0) fprintf(fout,"%*c",level,' ');
}
# include "io.h"
# include "assert.h"
-# ifndef NORCSID
-static string rcsid8 = "$Id$";
-# endif
+#include "LLgen.h"
/* In this file the following routines are defined: */
-extern co_reach();
-STATIC reachable();
-STATIC reachwalk();
-co_reach() {
+void co_reach() {
/*
* Check for undefined or unreachable nonterminals.
*/
- register p_nont p;
- register p_token t;
- register p_start st;
- register p_file x;
- register int s;
+ p_nont p;
+ p_token t;
+ p_start st;
+ p_file x;
+ int s;
/* Check for undefined nonterminals */
for (p = nonterms; p < maxnt; p++) {
if (! p->n_rule) { /* undefined */
f_input = p->n_string;
error(p->n_lineno,"Nonterminal %s not defined",
- p->n_name);
+ p->n_name, NULL);
}
}
p = &nonterms[s];
if (! (p->n_flags & REACHABLE)) {
warning(p->n_lineno,"nonterminal %s unreachable",
- p->n_name);
+ p->n_name, NULL);
}
}
for (s = x->f_terminals; s != -1; s = t->t_next) {
t = &tokens[s];
if (! (t->t_flags & REACHABLE)) {
warning(t->t_lineno,"terminal %s not used",
- t->t_string);
+ t->t_string, NULL);
}
}
}
}
-STATIC
-reachable(p) register p_nont p; {
+STATIC void reachable(p_nont p) {
/*
* Enter the fact that p is reachable, and look for implications
*/
}
}
-STATIC
-reachwalk(p) register p_gram p; {
+STATIC void reachwalk(p_gram p) {
/*
* Walk through rule p, looking for nonterminals.
* The nonterminals found are entered as reachable
reachwalk(g_getterm(p)->t_rule);
break;
case NONTERM : {
- register p_nont n = &nonterms[g_getcont(p)];
+ p_nont n = &nonterms[g_getcont(p)];
reachable(n);
if (n->n_rule && g_gettype(n->n_rule) == EORULE &&
! g_getnpar(p) && (getntparams(n) == 0)) {
- register p_gram np = p;
+ p_gram np = p;
do {
*np = *(np + 1);
np++;