1*12391Speter static char *sccsid = "@(#)yyerror.c 1.2 (Berkeley) 05/11/83"; 22869Speter /* Copyright (c) 1979 Regents of the University of California */ 32869Speter /* 42869Speter * pi - Pascal interpreter code translator 52869Speter * 62869Speter * Charles Haley, Bill Joy UCB 72869Speter * Version 1.2 January 1979 82869Speter * 92869Speter * 102869Speter * pxp - Pascal execution profiler 112869Speter * 122869Speter * Bill Joy UCB 132869Speter * Version 1.2 January 1979 142869Speter */ 152869Speter 16*12391Speter #include "whoami.h" 172869Speter #include "0.h" 182869Speter #include "yy.h" 192869Speter 202869Speter /* 212869Speter * Yerror prints an error 222869Speter * message and then returns 232869Speter * NIL for the tree if needed. 242869Speter * The error is flagged on the 252869Speter * current line which is printed 262869Speter * if the listing is turned off. 272869Speter #ifdef PXP 282869Speter * 292869Speter * As is obvious from the fooling around 302869Speter * with fout below, the Pascal system should 312869Speter * be changed to use the new library "lS". 322869Speter #endif 332869Speter */ 342869Speter yerror(s, a1, a2, a3, a4, a5) 352869Speter char *s; 362869Speter { 372869Speter #ifdef PI 382869Speter char buf[256]; 392869Speter #endif 402869Speter register int i, j; 412869Speter static yySerrs; 422869Speter #ifdef PXP 432869Speter /* 442869Speter int ofout; 452869Speter */ 462869Speter #endif 472869Speter 482869Speter if (errpfx == 'w' && opt('w') != 0) 492869Speter return; 502869Speter #ifdef PXP 512869Speter /* 522869Speter flush(); 532869Speter ofout = fout[0]; 542869Speter fout[0] = errout; 552869Speter */ 562869Speter #endif 572869Speter yyResume = 0; 582869Speter #ifdef PI 592869Speter geterr(s, buf); 602869Speter s = buf; 612869Speter #endif 622869Speter yysync(); 632869Speter putc(errpfx, stderr); 642869Speter putc(' ', stderr); 652869Speter for (i = 3; i < yyecol; i++) 662869Speter putc('-', stderr); 672869Speter fprintf(stderr, "^--- "); 682869Speter /* 692869Speter if (yyecol > 60) 702869Speter printf("\n\t"); 712869Speter */ 722869Speter fprintf(stderr, s, a1, a2, a3, a4, a5); 732869Speter putc('\n', stderr); 742869Speter if (errpfx == 'E') 752869Speter #ifdef PI 762869Speter eflg++, cgenflg++; 772869Speter #endif 782869Speter #ifdef PXP 792869Speter eflg++; 802869Speter #endif 812869Speter errpfx = 'E'; 822869Speter yySerrs++; 832869Speter if (yySerrs >= MAXSYNERR) { 842869Speter yySerrs = 0; 852869Speter yerror("Too many syntax errors - QUIT"); 862869Speter pexit(ERRS); 872869Speter } 882869Speter #ifdef PXP 892869Speter /* 902869Speter flush(); 912869Speter fout[0] = ofout; 922869Speter */ 932869Speter return (0); 942869Speter #endif 952869Speter } 962869Speter 972869Speter /* 982869Speter * A bracketing error message 992869Speter */ 1002869Speter brerror(where, what) 1012869Speter int where; 1022869Speter char *what; 1032869Speter { 1042869Speter 1052869Speter if (where == 0) { 1062869Speter line = yyeline; 1072869Speter setpfx(' '); 1082869Speter error("End matched %s on line %d", what, where); 1092869Speter return; 1102869Speter } 1112869Speter if (where < 0) 1122869Speter where = -where; 1132869Speter yerror("Inserted keyword end matching %s on line %d", what, where); 1142869Speter } 115