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