1784Speter /* Copyright (c) 1979 Regents of the University of California */ 2784Speter 3*3085Smckusic static char sccsid[] = "@(#)yyerror.c 1.2 03/08/81"; 4784Speter 5784Speter #include "whoami.h" 6784Speter #include "0.h" 7784Speter #include "yy.h" 8784Speter 9784Speter /* 10784Speter * Yerror prints an error 11784Speter * message and then returns 12784Speter * NIL for the tree if needed. 13784Speter * The error is flagged on the 14784Speter * current line which is printed 15784Speter * if the listing is turned off. 16784Speter #ifdef PXP 17784Speter * 18784Speter * As is obvious from the fooling around 19784Speter * with fout below, the Pascal system should 20784Speter * be changed to use the new library "lS". 21784Speter #endif 22784Speter */ 23784Speter yerror(s, a1, a2, a3, a4, a5) 24784Speter char *s; 25784Speter { 26784Speter #ifdef PI 27784Speter char buf[256]; 28784Speter #endif 29784Speter register int i, j; 30784Speter static yySerrs; 31784Speter #ifdef PXP 32784Speter int ofout; 33784Speter #endif 34784Speter 35784Speter if (errpfx == 'w' && opt('w') != 0) { 36784Speter errpfx = 'E'; 37784Speter return; 38784Speter } 39784Speter #ifdef PXP 40784Speter flush(); 41784Speter ofout = fout[0]; 42784Speter fout[0] = errout; 43784Speter #endif 44784Speter yyResume = 0; 45784Speter #ifdef PI 46784Speter geterr(s, buf); 47784Speter s = buf; 48784Speter #endif 49784Speter yysync(); 50784Speter pchr(errpfx); 51784Speter pchr(' '); 52784Speter for (i = 3; i < yyecol; i++) 53784Speter pchr('-'); 54784Speter printf("^--- "); 55784Speter /* 56784Speter if (yyecol > 60) 57784Speter printf("\n\t"); 58784Speter */ 59784Speter printf(s, a1, a2, a3, a4, a5); 60784Speter pchr('\n'); 61784Speter if (errpfx == 'E') 62784Speter #ifdef PI 63*3085Smckusic eflg = TRUE, codeoff(); 64784Speter #endif 65784Speter #ifdef PXP 66*3085Smckusic eflg = TRUE; 67784Speter #endif 68784Speter errpfx = 'E'; 69784Speter yySerrs++; 70784Speter if (yySerrs >= MAXSYNERR) { 71784Speter yySerrs = 0; 72784Speter yerror("Too many syntax errors - QUIT"); 73784Speter pexit(ERRS); 74784Speter } 75784Speter #ifdef PXP 76784Speter flush(); 77784Speter fout[0] = ofout; 78784Speter return (0); 79784Speter #endif 80784Speter } 81784Speter 82784Speter /* 83784Speter * A bracketing error message 84784Speter */ 85784Speter brerror(where, what) 86784Speter int where; 87784Speter char *what; 88784Speter { 89784Speter 90784Speter if (where == 0) { 91784Speter line = yyeline; 92784Speter setpfx(' '); 93784Speter error("End matched %s on line %d", what, where); 94784Speter return; 95784Speter } 96784Speter if (where < 0) 97784Speter where = -where; 98784Speter yerror("Inserted keyword end matching %s on line %d", what, where); 99784Speter } 100