148112Sbostic /*-
2*62195Sbostic * Copyright (c) 1980, 1993
3*62195Sbostic * The Regents of the University of California. All rights reserved.
448112Sbostic *
548112Sbostic * %sccs.include.redist.c%
622244Sdist */
722244Sdist
822244Sdist #ifndef lint
9*62195Sbostic static char sccsid[] = "@(#)yyerror.c 8.1 (Berkeley) 06/06/93";
1048112Sbostic #endif /* not lint */
1122244Sdist
1222244Sdist /*
132869Speter * pi - Pascal interpreter code translator
142869Speter *
152869Speter * Charles Haley, Bill Joy UCB
162869Speter * Version 1.2 January 1979
172869Speter *
182869Speter *
192869Speter * pxp - Pascal execution profiler
202869Speter *
212869Speter * Bill Joy UCB
222869Speter * Version 1.2 January 1979
232869Speter */
242869Speter
2512391Speter #include "whoami.h"
262869Speter #include "0.h"
272869Speter #include "yy.h"
282869Speter
292869Speter /*
302869Speter * Yerror prints an error
312869Speter * message and then returns
322869Speter * NIL for the tree if needed.
332869Speter * The error is flagged on the
342869Speter * current line which is printed
352869Speter * if the listing is turned off.
362869Speter #ifdef PXP
372869Speter *
382869Speter * As is obvious from the fooling around
392869Speter * with fout below, the Pascal system should
402869Speter * be changed to use the new library "lS".
412869Speter #endif
422869Speter */
yerror(s,a1,a2,a3,a4,a5)432869Speter yerror(s, a1, a2, a3, a4, a5)
442869Speter char *s;
452869Speter {
462869Speter #ifdef PI
472869Speter char buf[256];
482869Speter #endif
492869Speter register int i, j;
502869Speter static yySerrs;
512869Speter #ifdef PXP
522869Speter /*
532869Speter int ofout;
542869Speter */
552869Speter #endif
562869Speter
572869Speter if (errpfx == 'w' && opt('w') != 0)
582869Speter return;
592869Speter #ifdef PXP
602869Speter /*
612869Speter flush();
622869Speter ofout = fout[0];
632869Speter fout[0] = errout;
642869Speter */
652869Speter #endif
662869Speter yyResume = 0;
672869Speter #ifdef PI
682869Speter geterr(s, buf);
692869Speter s = buf;
702869Speter #endif
712869Speter yysync();
722869Speter putc(errpfx, stderr);
732869Speter putc(' ', stderr);
742869Speter for (i = 3; i < yyecol; i++)
752869Speter putc('-', stderr);
762869Speter fprintf(stderr, "^--- ");
772869Speter /*
782869Speter if (yyecol > 60)
792869Speter printf("\n\t");
802869Speter */
812869Speter fprintf(stderr, s, a1, a2, a3, a4, a5);
822869Speter putc('\n', stderr);
832869Speter if (errpfx == 'E')
842869Speter #ifdef PI
852869Speter eflg++, cgenflg++;
862869Speter #endif
872869Speter #ifdef PXP
882869Speter eflg++;
892869Speter #endif
902869Speter errpfx = 'E';
912869Speter yySerrs++;
922869Speter if (yySerrs >= MAXSYNERR) {
932869Speter yySerrs = 0;
942869Speter yerror("Too many syntax errors - QUIT");
952869Speter pexit(ERRS);
962869Speter }
972869Speter #ifdef PXP
982869Speter /*
992869Speter flush();
1002869Speter fout[0] = ofout;
1012869Speter */
1022869Speter return (0);
1032869Speter #endif
1042869Speter }
1052869Speter
1062869Speter /*
1072869Speter * A bracketing error message
1082869Speter */
brerror(where,what)1092869Speter brerror(where, what)
1102869Speter int where;
1112869Speter char *what;
1122869Speter {
1132869Speter
1142869Speter if (where == 0) {
1152869Speter line = yyeline;
1162869Speter setpfx(' ');
1172869Speter error("End matched %s on line %d", what, where);
1182869Speter return;
1192869Speter }
1202869Speter if (where < 0)
1212869Speter where = -where;
1222869Speter yerror("Inserted keyword end matching %s on line %d", what, where);
1232869Speter }
124