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