# include <stdlib.h>
# include <string.h>
+
# include "types.h"
# include "io.h"
# include "extern.h"
static void LL3_listel(void);
static void LL4_firsts(void);
static void LL5_productions(
-# line 246 "LLgen.g"
+# line 233 "LLgen.g"
p_gram *p) ;
static void LL6_simpleproduction(
-# line 332 "LLgen.g"
+# line 318 "LLgen.g"
p_gram *p ,register int *conflres) ;
static void LL7_elem(
-# line 480 "LLgen.g"
+# line 465 "LLgen.g"
register p_gram pres) ;
static void LL8_repeats(
-# line 602 "LLgen.g"
+# line 587 "LLgen.g"
int *kind ,int *cnt) ;
static void LL9_number(
-# line 619 "LLgen.g"
+# line 604 "LLgen.g"
int *t) ;
#else
static LL1_def();
#endif
) {
LLsincr(0);
-# line 96 "LLgen.g"
+# line 84 "LLgen.g"
{ acount = 0; p_init(); }
for (;;) {
goto L_1;
LLsdecr(0);
break;
}
-# line 98 "LLgen.g"
+# line 86 "LLgen.g"
{ /*
* Put an endmarker in temporary file
*/
void
#endif
) {
-# line 108 "LLgen.g"
+# line 96 "LLgen.g"
register string p;
switch(LLcsymb) {
case /* C_IDENT */ 2 : ;
LLtincr(24);
LL_SAFE(C_START);
LL_NOSCANDONE(C_IDENT);
-# line 118 "LLgen.g"
+# line 106 "LLgen.g"
{ p = store(lextoken.t_string); }
LLtdecr(23);
LL_NOSCANDONE(',');
LLtdecr(2);
LL_NOSCANDONE(C_IDENT);
-# line 123 "LLgen.g"
+# line 111 "LLgen.g"
{ /*
* Put the declaration in the list
* of start symbols
LLtincr(24);
LL_SAFE(C_LEXICAL);
LL_NOSCANDONE(C_IDENT);
-# line 149 "LLgen.g"
+# line 137 "LLgen.g"
{ if (!lexical) {
lexical = store(lextoken.t_string);
}
LLtincr(24);
LL_SAFE(C_PREFIX);
LL_NOSCANDONE(C_IDENT);
-# line 159 "LLgen.g"
+# line 147 "LLgen.g"
{ if (!prefix) {
prefix = store(lextoken.t_string);
if (strlen(prefix) > 6) {
LLtincr(24);
LL_SAFE(C_ONERROR);
LL_NOSCANDONE(C_IDENT);
-# line 171 "LLgen.g"
+# line 159 "LLgen.g"
{
#ifdef NON_CORRECTING
if (non_corr) {
break;
default:
LL_SSCANDONE(C_ACTION);
-# line 184 "LLgen.g"
+# line 172 "LLgen.g"
{ acount++; }
break;
case /* C_FIRST */ 13 : ;
#endif
) {
LL_NOSCANDONE(C_IDENT);
-# line 194 "LLgen.g"
+# line 182 "LLgen.g"
{ p_gram temp = search(TERMINAL,lextoken.t_string,ENTERING);
newtorder(g_getcont(temp));
tokens[g_getcont(temp)].t_lineno = linecount;
void
#endif
) {
-# line 200 "LLgen.g"
+# line 188 "LLgen.g"
register p_nont p;
p_gram rr;
register p_gram temp;
LLsincr(1);
LLtincr(24);
LL_SAFE(C_IDENT);
-# line 207 "LLgen.g"
+# line 195 "LLgen.g"
{ temp = search(NONTERM,lextoken.t_string,BOTH);
p = &nonterms[g_getcont(temp)];
if (p->n_rule) {
- error(linecount,
-"Nonterminal %s already defined", lextoken.t_string, NULL);
+ error(linecount, "Nonterminal %s already defined", lextoken.t_string, NULL);
}
/*
* Remember the order in which the nonterminals
case /* C_PARAMS */ 6 : ;
LLtdecr(6);
LL_SAFE(C_PARAMS);
-# line 225 "LLgen.g"
+# line 212 "LLgen.g"
{ if (lextoken.t_num > 0) {
p->n_flags |= PARAMS;
if (lextoken.t_num > 15) {
case /* C_ACTION */ 7 : ;
LLtdecr(7);
LL_SAFE(C_ACTION);
-# line 234 "LLgen.g"
+# line 221 "LLgen.g"
{ p->n_flags |= LOCALS; }
LLread();
}
}
LLtdecr(25);
LL_SCANDONE(':');
-# line 236 "LLgen.g"
+# line 223 "LLgen.g"
{ in_production = 1; }
LLread();
LLsdecr(1);
LL5_productions(
-# line 237 "LLgen.g"
+# line 224 "LLgen.g"
&rr);
LLtdecr(24);
LL_SCANDONE(';');
-# line 238 "LLgen.g"
+# line 225 "LLgen.g"
{ in_production = 0; }
-# line 243 "LLgen.g"
+# line 230 "LLgen.g"
{ nonterms[g_getcont(temp)].n_rule = rr;}
}
static
#endif
LL5_productions(
#if LL_ANSI_C
-# line 246 "LLgen.g"
+# line 233 "LLgen.g"
p_gram *p)
#else
-# line 246 "LLgen.g"
+# line 233 "LLgen.g"
p) p_gram *p;
#endif
{
-# line 250 "LLgen.g"
+# line 237 "LLgen.g"
p_gram prod;
int conflres = 0;
int t = 0;
int o_lc, n_lc;
LLtincr(26);
-# line 257 "LLgen.g"
+# line 244 "LLgen.g"
{ o_lc = linecount; }
LL6_simpleproduction(
-# line 258 "LLgen.g"
+# line 245 "LLgen.g"
p,&conflres);
-# line 259 "LLgen.g"
+# line 246 "LLgen.g"
{ if (conflres & DEF) haddefault = 1; }
goto L_2; /* so that the label is used for certain */
L_2: ;
LLtincr(26);
for (;;) {
LL_SAFE('|');
-# line 261 "LLgen.g"
+# line 248 "LLgen.g"
{ n_lc = linecount; }
LLread();
LL6_simpleproduction(
-# line 262 "LLgen.g"
+# line 249 "LLgen.g"
&prod,&t);
-# line 263 "LLgen.g"
+# line 250 "LLgen.g"
{ if (n_alts >= max_alts-2) {
alt_table = (p_gram ) ralloc(
(p_mem) alt_table,
LLtdecr(26);
break;
}
-# line 282 "LLgen.g"
+# line 269 "LLgen.g"
{ if (conflres & (COND|PREFERING|AVOIDING)) {
error(n_lc,
"Resolver on last alternative not allowed", NULL, NULL);
goto L_3;
L_3: ;
LLtdecr(26);
-# line 292 "LLgen.g"
+# line 279 "LLgen.g"
{ if (conflres & (COND|PREFERING|AVOIDING)) {
error(o_lc,
"No alternation conflict resolver allowed here", NULL, NULL);
/*
if (conflres & DEF) {
error(o_lc,
- "No %%default allowed here");
+ "No %%default allowed here", NULL, NULL);
}
*/
}
default: if (LLskip()) goto L_2;
goto L_3;
}
-# line 304 "LLgen.g"
+# line 291 "LLgen.g"
{ n_alts -= altcnt; }
}
-# line 306 "LLgen.g"
+# line 293 "LLgen.g"
STATIC void mkalt(p_gram prod, int condition, int lc, p_gram res) {
#endif
LL6_simpleproduction(
#if LL_ANSI_C
-# line 332 "LLgen.g"
+# line 318 "LLgen.g"
p_gram *p ,register int *conflres)
#else
-# line 332 "LLgen.g"
+# line 318 "LLgen.g"
p,conflres) p_gram *p; register int *conflres;
#endif
{
-# line 333 "LLgen.g"
+# line 319 "LLgen.g"
t_gram elem;
int elmcnt = 0;
int cnt, kind;
case /* C_DEFAULT */ 19 : ;
LLtdecr(19);
LL_SAFE(C_DEFAULT);
-# line 338 "LLgen.g"
+# line 324 "LLgen.g"
{ *conflres |= DEF; }
LLread();
}
case /* C_IF */ 10 : ;
LL_SAFE(C_IF);
LL_NOSCANDONE(C_EXPR);
-# line 344 "LLgen.g"
+# line 330 "LLgen.g"
{ *conflres |= COND; }
break;
default:
LL_SAFE(C_PREFER);
-# line 345 "LLgen.g"
+# line 331 "LLgen.g"
{ *conflres |= PREFERING; }
break;
case /* C_AVOID */ 17 : ;
LL_SAFE(C_AVOID);
-# line 346 "LLgen.g"
+# line 332 "LLgen.g"
{ *conflres |= AVOIDING; }
break;
}
case /* C_ILLEGAL */ 22 : ;
LLtdecr(22);
LL_SAFE(C_ILLEGAL);
-# line 348 "LLgen.g"
+# line 334 "LLgen.g"
{
#ifdef NON_CORRECTING
if (n_rules >= max_rules-2) {
case /* '+' */ 31 : ;
LLsincr(4);
LL7_elem(
-# line 364 "LLgen.g"
+# line 350 "LLgen.g"
&elem);
-# line 365 "LLgen.g"
+# line 351 "LLgen.g"
{ if (n_rules >= max_rules-2) {
rule_table = (p_gram) ralloc(
(p_mem) rule_table,
case /* '+' */ 31 : ;
LLsdecr(4);
LL8_repeats(
-# line 373 "LLgen.g"
+# line 359 "LLgen.g"
&kind, &cnt);
-# line 374 "LLgen.g"
+# line 360 "LLgen.g"
{ if (g_gettype(&elem) != TERM) {
rule_table[n_rules] = elem;
g_settype((&rule_table[n_rules+1]),EORULE);
goto L_10;
L_10: ;
LLsdecr(4);
-# line 384 "LLgen.g"
+# line 370 "LLgen.g"
{ if (g_gettype(&elem) == TERM) {
register p_term q = g_getterm(&elem);
default: if (LLskip()) goto L_9;
goto L_10;
}
-# line 411 "LLgen.g"
+# line 397 "LLgen.g"
{ if (!termdeleted && g_gettype(&elem) == TERM) {
register p_term q;
if ((q->t_flags & PERSISTENT) &&
kind == FIXED) {
error(linecount,
- "Illegal %%persistent");
+ "Illegal %%persistent", NULL, NULL);
}
*/
}
LLsdecr(3);
break;
}
-# line 437 "LLgen.g"
+# line 423 "LLgen.g"
{ register p_term q;
g_settype((&rule_table[n_rules]),EORULE);
elmcnt+1);
}
}
-# line 454 "LLgen.g"
+# line 440 "LLgen.g"
STATIC void mkterm(p_gram prod, int flags, int lc, p_gram result) {
#endif
LL7_elem(
#if LL_ANSI_C
-# line 480 "LLgen.g"
+# line 465 "LLgen.g"
register p_gram pres)
#else
-# line 480 "LLgen.g"
+# line 465 "LLgen.g"
pres) register p_gram pres;
#endif
{
-# line 481 "LLgen.g"
+# line 466 "LLgen.g"
register int t = 0;
p_gram p1;
int ln;
LLsincr(1);
LLtincr(28);
LL_SAFE('[');
-# line 489 "LLgen.g"
+# line 474 "LLgen.g"
{ ln = linecount; }
LLread();
goto L_4;
LLtdecr(11);
LL_SAFE(C_WHILE);
LL_NOSCANDONE(C_EXPR);
-# line 490 "LLgen.g"
+# line 475 "LLgen.g"
{ t |= RESOLVER; }
LLread();
}
case /* C_PERSISTENT */ 12 : ;
LLtdecr(12);
LL_SAFE(C_PERSISTENT);
-# line 492 "LLgen.g"
+# line 477 "LLgen.g"
{ t |= PERSISTENT; }
LLread();
}
}
LLsdecr(1);
LL5_productions(
-# line 494 "LLgen.g"
+# line 479 "LLgen.g"
&p1);
LLtdecr(28);
LL_SCANDONE(']');
-# line 495 "LLgen.g"
+# line 480 "LLgen.g"
{
mkterm(p1,t,ln,pres);
}
break;
case /* C_ERRONEOUS */ 21 : ;
LL_SAFE(C_ERRONEOUS);
-# line 499 "LLgen.g"
+# line 484 "LLgen.g"
{
#ifdef NON_CORRECTING
erroneous = 1;
LLsdecr(5);
LLtincr(6);
LL_SSCANDONE(C_IDENT);
-# line 507 "LLgen.g"
+# line 492 "LLgen.g"
{ pe = search(UNKNOWN,lextoken.t_string,BOTH);
*pres = *pe;
#ifdef NON_CORRECTING
case /* C_PARAMS */ 6 : ;
LLtdecr(6);
LL_SAFE(C_PARAMS);
-# line 522 "LLgen.g"
+# line 507 "LLgen.g"
{ if (lextoken.t_num > 15) {
error(linecount,"Too many parameters", NULL, NULL);
} else g_setnpar(pres,lextoken.t_num);
case /* C_LITERAL */ 4 : ;
LLsdecr(5);
LL_SAFE(C_LITERAL);
-# line 531 "LLgen.g"
+# line 516 "LLgen.g"
{ pe = search(LITERAL,lextoken.t_string,BOTH);
*pres = *pe;
#ifdef NON_CORRECTING
break;
default:
LLtincr(7);
-# line 539 "LLgen.g"
+# line 524 "LLgen.g"
{ g_settype(pres,ACTION);
pres->g_lineno = linecount;
#ifdef NON_CORRECTING
LLtincr(23);
LLtincr(24);
LL_SAFE(C_SUBSTART);
-# line 548 "LLgen.g"
+# line 533 "LLgen.g"
{
#ifdef NON_CORRECTING
nsubstarts++;
#endif
}
LL_NOSCANDONE(C_IDENT);
-# line 555 "LLgen.g"
+# line 540 "LLgen.g"
{
#ifdef NON_CORRECTING
register p_gram temp;
case /* ',' */ 23 : ;
LL_SAFE(',');
LL_NOSCANDONE(C_IDENT);
-# line 571 "LLgen.g"
+# line 556 "LLgen.g"
{
#ifdef NON_CORRECTING
register p_gram temp;
#endif
LL8_repeats(
#if LL_ANSI_C
-# line 602 "LLgen.g"
+# line 587 "LLgen.g"
int *kind ,int *cnt)
#else
-# line 602 "LLgen.g"
+# line 587 "LLgen.g"
kind,cnt) int *kind; int *cnt;
#endif
{
-# line 602 "LLgen.g"
+# line 587 "LLgen.g"
int t1 = 0;
switch(LLcsymb) {
default:
LL_SAFE('?');
-# line 604 "LLgen.g"
+# line 589 "LLgen.g"
{ *kind = OPT; }
LLread();
break;
switch(LLcsymb) {
default:
LL_SAFE('*');
-# line 605 "LLgen.g"
+# line 590 "LLgen.g"
{ *kind = STAR; }
break;
case /* '+' */ 31 : ;
LL_SAFE('+');
-# line 606 "LLgen.g"
+# line 591 "LLgen.g"
{ *kind = PLUS; }
break;
}
case /* C_NUMBER */ 3 : ;
LLtdecr(3);
LL9_number(
-# line 608 "LLgen.g"
+# line 593 "LLgen.g"
&t1);
LLread();
}
}
-# line 609 "LLgen.g"
+# line 594 "LLgen.g"
{ if (t1 == 1) {
t1 = 0;
if (*kind == STAR) *kind = OPT;
break;
case /* C_NUMBER */ 3 : ;
LL9_number(
-# line 615 "LLgen.g"
+# line 600 "LLgen.g"
&t1);
LLread();
break;
}
-# line 616 "LLgen.g"
+# line 601 "LLgen.g"
{ *cnt = t1; }
}
static
#endif
LL9_number(
#if LL_ANSI_C
-# line 619 "LLgen.g"
+# line 604 "LLgen.g"
int *t)
#else
-# line 619 "LLgen.g"
+# line 604 "LLgen.g"
t) int *t;
#endif
{
LL_SAFE(C_NUMBER);
-# line 621 "LLgen.g"
+# line 606 "LLgen.g"
{ *t = lextoken.t_num;
if (*t <= 0 || *t >= 8192) {
error(linecount,"Illegal number", NULL, NULL);
void
#endif
) {
-# line 628 "LLgen.g"
+# line 613 "LLgen.g"
register string p;
LLtincr(23);
LLtincr(2);
LLtincr(24);
LL_SAFE(C_FIRST);
LL_NOSCANDONE(C_IDENT);
-# line 630 "LLgen.g"
+# line 615 "LLgen.g"
{ p = store(lextoken.t_string); }
LLtdecr(23);
LL_NOSCANDONE(',');
LL_NOSCANDONE(C_IDENT);
LLtdecr(24);
LL_NOSCANDONE(';');
-# line 632 "LLgen.g"
+# line 617 "LLgen.g"
{ /*
* Store this %first in the list belonging
* to this input file
}
}
-# line 647 "LLgen.g"
+# line 632 "LLgen.g"
STATIC p_gram
{
# include <stdlib.h>
# include <string.h>
+
# include "types.h"
# include "io.h"
# include "extern.h"
ff->ff_name = p;
ff->ff_next = start;
start = ff;
- while (ff = ff->ff_next) {
+ while ((ff = ff->ff_next)) {
if (! strcmp(p, ff->ff_name)) {
- error(linecount, "\"%s\" already used in a %%start", p);
+ error(linecount, "\"%s\" already used in a %%start", p, NULL);
break;
}
}
{ if (!lexical) {
lexical = store(lextoken.t_string);
}
- else error(linecount,"Duplicate %%lexical");
+ else error(linecount,"Duplicate %%lexical", NULL, NULL);
}
';'
| C_PREFIX C_IDENT
prefix = store(lextoken.t_string);
if (strlen(prefix) > 6) {
error(linecount,
- "%%prefix too long");
+ "%%prefix too long", NULL, NULL);
prefix[6] = 0;
}
}
- else error(linecount,"Duplicate %%prefix");
+ else error(linecount,"Duplicate %%prefix", NULL, NULL);
}
';'
| C_ONERROR C_IDENT
{
#ifdef NON_CORRECTING
if (non_corr) {
- warning(linecount, "%%onerror conflicts with -n option");
+ warning(linecount, "%%onerror conflicts with -n option", NULL, NULL);
}
else
#endif
if (! onerror) {
onerror = store(lextoken.t_string);
}
- else error(linecount,"Duplicate %%onerror");
+ else error(linecount,"Duplicate %%onerror", NULL, NULL);
}
';'
| C_ACTION { acount++; }
C_IDENT { temp = search(NONTERM,lextoken.t_string,BOTH);
p = &nonterms[g_getcont(temp)];
if (p->n_rule) {
- error(linecount,
-"Nonterminal %s already defined", lextoken.t_string);
+ error(linecount, "Nonterminal %s already defined", lextoken.t_string, NULL);
}
/*
* Remember the order in which the nonterminals
[ C_PARAMS { if (lextoken.t_num > 0) {
p->n_flags |= PARAMS;
if (lextoken.t_num > 15) {
- error(linecount,"Too many parameters");
+ error(linecount,"Too many parameters", NULL, NULL);
}
else setntparams(p,lextoken.t_num);
}
if (t & DEF) {
if (haddefault) {
error(n_lc,
- "More than one %%default in alternation");
+ "More than one %%default in alternation", NULL, NULL);
}
haddefault = 1;
}
}
]+ { if (conflres & (COND|PREFERING|AVOIDING)) {
error(n_lc,
- "Resolver on last alternative not allowed");
+ "Resolver on last alternative not allowed", NULL, NULL);
}
mkalt(*p,conflres,n_lc,&alt_table[n_alts++]);
altcnt++;
|
{ if (conflres & (COND|PREFERING|AVOIDING)) {
error(o_lc,
- "No alternation conflict resolver allowed here");
+ "No alternation conflict resolver allowed here", NULL, NULL);
}
/*
if (conflres & DEF) {
error(o_lc,
- "No %%default allowed here");
+ "No %%default allowed here", NULL, NULL);
}
*/
}
;
{
-STATIC
-mkalt(prod,condition,lc,res) p_gram prod; register p_gram res; {
+STATIC void mkalt(p_gram prod, int condition, int lc, p_gram res) {
/*
* Create an alternation and initialise it.
*/
rule_table[n_rules++] =
*search(TERMINAL, "LLILLEGAL", BOTH);
if (*conflres & DEF) {
- error(linecount, "%%illegal not allowed in %%default rule");
+ error(linecount, "%%illegal not allowed in %%default rule", NULL, NULL);
}
#endif
}
if ((q->t_flags & RESOLVER) &&
(kind == PLUS || kind == FIXED)) {
error(linecount,
- "%%while not allowed in this term");
+ "%%while not allowed in this term", NULL, NULL);
}
/*
* A persistent fixed term is the same
if ((q->t_flags & PERSISTENT) &&
kind == FIXED) {
error(linecount,
- "Illegal %%persistent");
+ "Illegal %%persistent", NULL, NULL);
}
*/
}
;
{
-STATIC
-mkterm(prod,flags,lc,result) p_gram prod; register p_gram result; {
+STATIC void mkterm(p_gram prod, int flags, int lc, p_gram result) {
/*
* Create a term, initialise it and return
* a grammar element containing it
if (erroneous) {
if (g_gettype(pres) != TERMINAL){
warning(linecount,
- "Erroneous only allowed on terminal");
+ "Erroneous only allowed on terminal", NULL, NULL);
erroneous = 0;
}
else
}
[ C_PARAMS { if (lextoken.t_num > 15) {
- error(linecount,"Too many parameters");
+ error(linecount,"Too many parameters", NULL, NULL);
} else g_setnpar(pres,lextoken.t_num);
if (g_gettype(pres) == TERMINAL) {
error(linecount,
- "Terminal with parameters");
+ "Terminal with parameters", NULL, NULL);
}
}
]?
ff = g_getsubparse(pres);
while (ff) {
if (ff->ff_nont == g_getcont(temp)) {
- warning(linecount, "\"%s\" used twice in %%substart", lextoken.t_string);
+ warning(linecount, "\"%s\" used twice in %%substart", lextoken.t_string, NULL);
break;
}
ff = ff->ff_next;
: C_NUMBER
{ *t = lextoken.t_num;
if (*t <= 0 || *t >= 8192) {
- error(linecount,"Illegal number");
+ error(linecount,"Illegal number", NULL, NULL);
}
}
;