1*48116Sbostic /*- 2*48116Sbostic * Copyright (c) 1980 The Regents of the University of California. 3*48116Sbostic * All rights reserved. 4*48116Sbostic * 5*48116Sbostic * %sccs.include.redist.c% 622204Sdist */ 7784Speter 814747Sthien #ifndef lint 9*48116Sbostic static char sccsid[] = "@(#)yyerror.c 5.3 (Berkeley) 04/16/91"; 10*48116Sbostic #endif /* not lint */ 11784Speter 12784Speter #include "whoami.h" 13784Speter #include "0.h" 1414747Sthien #include "tree_ty.h" /* must be included for yy.h */ 15784Speter #include "yy.h" 16784Speter 17784Speter /* 18784Speter * Yerror prints an error 19784Speter * message and then returns 20784Speter * NIL for the tree if needed. 21784Speter * The error is flagged on the 22784Speter * current line which is printed 23784Speter * if the listing is turned off. 24784Speter #ifdef PXP 25784Speter * 26784Speter * As is obvious from the fooling around 27784Speter * with fout below, the Pascal system should 28784Speter * be changed to use the new library "lS". 29784Speter #endif 30784Speter */ 3114747Sthien /*VARARGS*/ 32784Speter yerror(s, a1, a2, a3, a4, a5) 33784Speter char *s; 3414747Sthien char *a1, *a2, *a3, *a4, *a5; 35784Speter { 36784Speter #ifdef PI 37784Speter char buf[256]; 38784Speter #endif 3914747Sthien register int i; 40784Speter static yySerrs; 41784Speter #ifdef PXP 42784Speter int ofout; 43784Speter #endif 44784Speter 45784Speter if (errpfx == 'w' && opt('w') != 0) { 46784Speter errpfx = 'E'; 47784Speter return; 48784Speter } 4927739Smckusick /* no continuations allowed here */ 5027739Smckusick if (errpfx == ' ') 5127739Smckusick errpfx = 'E'; 52784Speter #ifdef PXP 53784Speter flush(); 54784Speter ofout = fout[0]; 55784Speter fout[0] = errout; 56784Speter #endif 57784Speter yyResume = 0; 58784Speter #ifdef PI 5914747Sthien geterr((int) s, buf); 60784Speter s = buf; 61784Speter #endif 62784Speter yysync(); 63784Speter pchr(errpfx); 64784Speter pchr(' '); 65784Speter for (i = 3; i < yyecol; i++) 66784Speter pchr('-'); 67784Speter printf("^--- "); 68784Speter /* 69784Speter if (yyecol > 60) 70784Speter printf("\n\t"); 71784Speter */ 72784Speter printf(s, a1, a2, a3, a4, a5); 73784Speter pchr('\n'); 74784Speter if (errpfx == 'E') 75784Speter #ifdef PI 763085Smckusic eflg = TRUE, codeoff(); 77784Speter #endif 78784Speter #ifdef PXP 793085Smckusic eflg = TRUE; 80784Speter #endif 81784Speter errpfx = 'E'; 82784Speter yySerrs++; 83784Speter if (yySerrs >= MAXSYNERR) { 84784Speter yySerrs = 0; 85784Speter yerror("Too many syntax errors - QUIT"); 86784Speter pexit(ERRS); 87784Speter } 88784Speter #ifdef PXP 89784Speter flush(); 90784Speter fout[0] = ofout; 91784Speter return (0); 92784Speter #endif 93784Speter } 94784Speter 95784Speter /* 96784Speter * A bracketing error message 97784Speter */ 98784Speter brerror(where, what) 99784Speter int where; 100784Speter char *what; 101784Speter { 102784Speter 103784Speter if (where == 0) { 104784Speter line = yyeline; 105784Speter setpfx(' '); 10614747Sthien error("End matched %s on line %d", what, (char *) where); 107784Speter return; 108784Speter } 109784Speter if (where < 0) 110784Speter where = -where; 11114747Sthien yerror("Inserted keyword end matching %s on line %d", what, (char *) where); 112784Speter } 113