|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: static char sccsid[] = "@(#)yyerror.c 5.2 (Berkeley) 5/6/86";
9: #endif not lint
10:
11: #include "whoami.h"
12: #include "0.h"
13: #include "tree_ty.h" /* must be included for yy.h */
14: #include "yy.h"
15:
16: /*
17: * Yerror prints an error
18: * message and then returns
19: * NIL for the tree if needed.
20: * The error is flagged on the
21: * current line which is printed
22: * if the listing is turned off.
23: #ifdef PXP
24: *
25: * As is obvious from the fooling around
26: * with fout below, the Pascal system should
27: * be changed to use the new library "lS".
28: #endif
29: */
30: /*VARARGS*/
31: yerror(s, a1, a2, a3, a4, a5)
32: char *s;
33: char *a1, *a2, *a3, *a4, *a5;
34: {
35: #ifdef PI
36: char buf[256];
37: #endif
38: register int i;
39: static yySerrs;
40: #ifdef PXP
41: int ofout;
42: #endif
43:
44: if (errpfx == 'w' && opt('w') != 0) {
45: errpfx = 'E';
46: return;
47: }
48: /* no continuations allowed here */
49: if (errpfx == ' ')
50: errpfx = 'E';
51: #ifdef PXP
52: flush();
53: ofout = fout[0];
54: fout[0] = errout;
55: #endif
56: yyResume = 0;
57: #ifdef PI
58: geterr((int) s, buf);
59: s = buf;
60: #endif
61: yysync();
62: pchr(errpfx);
63: pchr(' ');
64: for (i = 3; i < yyecol; i++)
65: pchr('-');
66: printf("^--- ");
67: /*
68: if (yyecol > 60)
69: printf("\n\t");
70: */
71: printf(s, a1, a2, a3, a4, a5);
72: pchr('\n');
73: if (errpfx == 'E')
74: #ifdef PI
75: eflg = TRUE, codeoff();
76: #endif
77: #ifdef PXP
78: eflg = TRUE;
79: #endif
80: errpfx = 'E';
81: yySerrs++;
82: if (yySerrs >= MAXSYNERR) {
83: yySerrs = 0;
84: yerror("Too many syntax errors - QUIT");
85: pexit(ERRS);
86: }
87: #ifdef PXP
88: flush();
89: fout[0] = ofout;
90: return (0);
91: #endif
92: }
93:
94: /*
95: * A bracketing error message
96: */
97: brerror(where, what)
98: int where;
99: char *what;
100: {
101:
102: if (where == 0) {
103: line = yyeline;
104: setpfx(' ');
105: error("End matched %s on line %d", what, (char *) where);
106: return;
107: }
108: if (where < 0)
109: where = -where;
110: yerror("Inserted keyword end matching %s on line %d", what, (char *) where);
111: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.