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