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