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