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