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