1319297Sdelphij/* $Id: error.c,v 1.14 2016/12/02 18:35:55 tom Exp $ */ 2234949Sbapt 3234949Sbapt/* routines for printing error messages */ 4234949Sbapt 5234949Sbapt#include "defs.h" 6234949Sbapt 7234949Sbaptvoid 8234949Sbaptfatal(const char *msg) 9234949Sbapt{ 10234949Sbapt fprintf(stderr, "%s: f - %s\n", myname, msg); 11234949Sbapt done(2); 12234949Sbapt} 13234949Sbapt 14234949Sbaptvoid 15234949Sbaptno_space(void) 16234949Sbapt{ 17234949Sbapt fprintf(stderr, "%s: f - out of space\n", myname); 18234949Sbapt done(2); 19234949Sbapt} 20234949Sbapt 21234949Sbaptvoid 22234949Sbaptopen_error(const char *filename) 23234949Sbapt{ 24234949Sbapt fprintf(stderr, "%s: f - cannot open \"%s\"\n", myname, filename); 25234949Sbapt done(2); 26234949Sbapt} 27234949Sbapt 28234949Sbaptvoid 29234949Sbaptmissing_brace(void) 30234949Sbapt{ 31234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", missing '}'\n", 32234949Sbapt myname, lineno, input_file_name); 33234949Sbapt done(1); 34234949Sbapt} 35234949Sbapt 36234949Sbaptvoid 37234949Sbaptunexpected_EOF(void) 38234949Sbapt{ 39234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", unexpected end-of-file\n", 40234949Sbapt myname, lineno, input_file_name); 41234949Sbapt done(1); 42234949Sbapt} 43234949Sbapt 44234949Sbaptstatic void 45264803Sbaptprint_pos(const char *st_line, const char *st_cptr) 46234949Sbapt{ 47264803Sbapt const char *s; 48234949Sbapt 49234949Sbapt if (st_line == 0) 50234949Sbapt return; 51234949Sbapt for (s = st_line; *s != '\n'; ++s) 52234949Sbapt { 53234949Sbapt if (isprint(UCH(*s)) || *s == '\t') 54234949Sbapt putc(*s, stderr); 55234949Sbapt else 56234949Sbapt putc('?', stderr); 57234949Sbapt } 58234949Sbapt putc('\n', stderr); 59234949Sbapt for (s = st_line; s < st_cptr; ++s) 60234949Sbapt { 61234949Sbapt if (*s == '\t') 62234949Sbapt putc('\t', stderr); 63234949Sbapt else 64234949Sbapt putc(' ', stderr); 65234949Sbapt } 66234949Sbapt putc('^', stderr); 67234949Sbapt putc('\n', stderr); 68234949Sbapt} 69234949Sbapt 70234949Sbaptvoid 71234949Sbaptsyntax_error(int st_lineno, char *st_line, char *st_cptr) 72234949Sbapt{ 73234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", syntax error\n", 74234949Sbapt myname, st_lineno, input_file_name); 75234949Sbapt print_pos(st_line, st_cptr); 76234949Sbapt done(1); 77234949Sbapt} 78234949Sbapt 79234949Sbaptvoid 80319297Sdelphijunterminated_comment(const struct ainfo *a) 81234949Sbapt{ 82234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", unmatched /*\n", 83319297Sdelphij myname, a->a_lineno, input_file_name); 84319297Sdelphij print_pos(a->a_line, a->a_cptr); 85234949Sbapt done(1); 86234949Sbapt} 87234949Sbapt 88234949Sbaptvoid 89319297Sdelphijunterminated_string(const struct ainfo *a) 90234949Sbapt{ 91234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", unterminated string\n", 92319297Sdelphij myname, a->a_lineno, input_file_name); 93319297Sdelphij print_pos(a->a_line, a->a_cptr); 94234949Sbapt done(1); 95234949Sbapt} 96234949Sbapt 97234949Sbaptvoid 98319297Sdelphijunterminated_text(const struct ainfo *a) 99234949Sbapt{ 100234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", unmatched %%{\n", 101319297Sdelphij myname, a->a_lineno, input_file_name); 102319297Sdelphij print_pos(a->a_line, a->a_cptr); 103234949Sbapt done(1); 104234949Sbapt} 105234949Sbapt 106234949Sbaptvoid 107319297Sdelphijunterminated_union(const struct ainfo *a) 108234949Sbapt{ 109234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", unterminated %%union \ 110319297Sdelphijdeclaration\n", myname, a->a_lineno, input_file_name); 111319297Sdelphij print_pos(a->a_line, a->a_cptr); 112234949Sbapt done(1); 113234949Sbapt} 114234949Sbapt 115234949Sbaptvoid 116234949Sbaptover_unionized(char *u_cptr) 117234949Sbapt{ 118234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", too many %%union \ 119234949Sbaptdeclarations\n", myname, lineno, input_file_name); 120234949Sbapt print_pos(line, u_cptr); 121234949Sbapt done(1); 122234949Sbapt} 123234949Sbapt 124234949Sbaptvoid 125234949Sbaptillegal_tag(int t_lineno, char *t_line, char *t_cptr) 126234949Sbapt{ 127234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", illegal tag\n", 128234949Sbapt myname, t_lineno, input_file_name); 129234949Sbapt print_pos(t_line, t_cptr); 130234949Sbapt done(1); 131234949Sbapt} 132234949Sbapt 133234949Sbaptvoid 134234949Sbaptillegal_character(char *c_cptr) 135234949Sbapt{ 136234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", illegal character\n", 137234949Sbapt myname, lineno, input_file_name); 138234949Sbapt print_pos(line, c_cptr); 139234949Sbapt done(1); 140234949Sbapt} 141234949Sbapt 142234949Sbaptvoid 143234949Sbaptused_reserved(char *s) 144234949Sbapt{ 145234949Sbapt fprintf(stderr, 146234949Sbapt "%s: e - line %d of \"%s\", illegal use of reserved symbol \ 147234949Sbapt%s\n", myname, lineno, input_file_name, s); 148234949Sbapt done(1); 149234949Sbapt} 150234949Sbapt 151234949Sbaptvoid 152234949Sbapttokenized_start(char *s) 153234949Sbapt{ 154234949Sbapt fprintf(stderr, 155234949Sbapt "%s: e - line %d of \"%s\", the start symbol %s cannot be \ 156234949Sbaptdeclared to be a token\n", myname, lineno, input_file_name, s); 157234949Sbapt done(1); 158234949Sbapt} 159234949Sbapt 160234949Sbaptvoid 161234949Sbaptretyped_warning(char *s) 162234949Sbapt{ 163234949Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", the type of %s has been \ 164234949Sbaptredeclared\n", myname, lineno, input_file_name, s); 165234949Sbapt} 166234949Sbapt 167234949Sbaptvoid 168234949Sbaptreprec_warning(char *s) 169234949Sbapt{ 170234949Sbapt fprintf(stderr, 171234949Sbapt "%s: w - line %d of \"%s\", the precedence of %s has been \ 172234949Sbaptredeclared\n", myname, lineno, input_file_name, s); 173234949Sbapt} 174234949Sbapt 175234949Sbaptvoid 176234949Sbaptrevalued_warning(char *s) 177234949Sbapt{ 178234949Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", the value of %s has been \ 179234949Sbaptredeclared\n", myname, lineno, input_file_name, s); 180234949Sbapt} 181234949Sbapt 182234949Sbaptvoid 183234949Sbaptterminal_start(char *s) 184234949Sbapt{ 185234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", the start symbol %s is a \ 186234949Sbapttoken\n", myname, lineno, input_file_name, s); 187234949Sbapt done(1); 188234949Sbapt} 189234949Sbapt 190234949Sbaptvoid 191234949Sbaptrestarted_warning(void) 192234949Sbapt{ 193234949Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", the start symbol has been \ 194234949Sbaptredeclared\n", myname, lineno, input_file_name); 195234949Sbapt} 196234949Sbapt 197234949Sbaptvoid 198234949Sbaptno_grammar(void) 199234949Sbapt{ 200234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", no grammar has been \ 201234949Sbaptspecified\n", myname, lineno, input_file_name); 202234949Sbapt done(1); 203234949Sbapt} 204234949Sbapt 205234949Sbaptvoid 206234949Sbaptterminal_lhs(int s_lineno) 207234949Sbapt{ 208234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", a token appears on the lhs \ 209234949Sbaptof a production\n", myname, s_lineno, input_file_name); 210234949Sbapt done(1); 211234949Sbapt} 212234949Sbapt 213234949Sbaptvoid 214234949Sbaptprec_redeclared(void) 215234949Sbapt{ 216234949Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", conflicting %%prec \ 217234949Sbaptspecifiers\n", myname, lineno, input_file_name); 218234949Sbapt} 219234949Sbapt 220234949Sbaptvoid 221319297Sdelphijunterminated_action(const struct ainfo *a) 222234949Sbapt{ 223234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", unterminated action\n", 224319297Sdelphij myname, a->a_lineno, input_file_name); 225319297Sdelphij print_pos(a->a_line, a->a_cptr); 226234949Sbapt done(1); 227234949Sbapt} 228234949Sbapt 229234949Sbaptvoid 230234949Sbaptdollar_warning(int a_lineno, int i) 231234949Sbapt{ 232234949Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", $%d references beyond the \ 233234949Sbaptend of the current rule\n", myname, a_lineno, input_file_name, i); 234234949Sbapt} 235234949Sbapt 236234949Sbaptvoid 237234949Sbaptdollar_error(int a_lineno, char *a_line, char *a_cptr) 238234949Sbapt{ 239234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", illegal $-name\n", 240234949Sbapt myname, a_lineno, input_file_name); 241234949Sbapt print_pos(a_line, a_cptr); 242234949Sbapt done(1); 243234949Sbapt} 244234949Sbapt 245234949Sbaptvoid 246234949Sbaptuntyped_lhs(void) 247234949Sbapt{ 248234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", $$ is untyped\n", 249234949Sbapt myname, lineno, input_file_name); 250234949Sbapt done(1); 251234949Sbapt} 252234949Sbapt 253234949Sbaptvoid 254234949Sbaptuntyped_rhs(int i, char *s) 255234949Sbapt{ 256234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", $%d (%s) is untyped\n", 257234949Sbapt myname, lineno, input_file_name, i, s); 258234949Sbapt done(1); 259234949Sbapt} 260234949Sbapt 261234949Sbaptvoid 262234949Sbaptunknown_rhs(int i) 263234949Sbapt{ 264234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", $%d is untyped\n", 265234949Sbapt myname, lineno, input_file_name, i); 266234949Sbapt done(1); 267234949Sbapt} 268234949Sbapt 269234949Sbaptvoid 270319297Sdelphijdefault_action_warning(char *s) 271234949Sbapt{ 272234949Sbapt fprintf(stderr, 273319297Sdelphij "%s: w - line %d of \"%s\", the default action for %s assigns an \ 274319297Sdelphijundefined value to $$\n", 275319297Sdelphij myname, lineno, input_file_name, s); 276234949Sbapt} 277234949Sbapt 278234949Sbaptvoid 279234949Sbaptundefined_goal(char *s) 280234949Sbapt{ 281234949Sbapt fprintf(stderr, "%s: e - the start symbol %s is undefined\n", myname, s); 282234949Sbapt done(1); 283234949Sbapt} 284234949Sbapt 285234949Sbaptvoid 286234949Sbaptundefined_symbol_warning(char *s) 287234949Sbapt{ 288234949Sbapt fprintf(stderr, "%s: w - the symbol %s is undefined\n", myname, s); 289234949Sbapt} 290264803Sbapt 291264803Sbapt#if ! defined(YYBTYACC) 292264803Sbaptvoid 293264803Sbaptunsupported_flag_warning(const char *flag, const char *details) 294264803Sbapt{ 295264803Sbapt fprintf(stderr, "%s: w - %s flag unsupported, %s\n", 296264803Sbapt myname, flag, details); 297264803Sbapt} 298264803Sbapt#endif 299264803Sbapt 300264803Sbapt#if defined(YYBTYACC) 301264803Sbaptvoid 302264803Sbaptat_warning(int a_lineno, int i) 303264803Sbapt{ 304264803Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", @%d references beyond the \ 305264803Sbaptend of the current rule\n", myname, a_lineno, input_file_name, i); 306264803Sbapt} 307264803Sbapt 308264803Sbaptvoid 309264803Sbaptat_error(int a_lineno, char *a_line, char *a_cptr) 310264803Sbapt{ 311264803Sbapt fprintf(stderr, 312264803Sbapt "%s: e - line %d of \"%s\", illegal @$ or @N reference\n", 313264803Sbapt myname, a_lineno, input_file_name); 314264803Sbapt print_pos(a_line, a_cptr); 315264803Sbapt done(1); 316264803Sbapt} 317264803Sbapt 318264803Sbaptvoid 319319297Sdelphijunterminated_arglist(const struct ainfo *a) 320264803Sbapt{ 321264803Sbapt fprintf(stderr, 322264803Sbapt "%s: e - line %d of \"%s\", unterminated argument list\n", 323319297Sdelphij myname, a->a_lineno, input_file_name); 324319297Sdelphij print_pos(a->a_line, a->a_cptr); 325264803Sbapt done(1); 326264803Sbapt} 327264803Sbapt 328264803Sbaptvoid 329264803Sbaptarg_number_disagree_warning(int a_lineno, char *a_name) 330264803Sbapt{ 331264803Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", number of arguments of %s " 332264803Sbapt "doesn't agree with previous declaration\n", 333264803Sbapt myname, a_lineno, input_file_name, a_name); 334264803Sbapt} 335264803Sbapt 336264803Sbaptvoid 337264803Sbaptbad_formals(void) 338264803Sbapt{ 339264803Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", bad formal argument list\n", 340264803Sbapt myname, lineno, input_file_name); 341264803Sbapt print_pos(line, cptr); 342264803Sbapt done(1); 343264803Sbapt} 344264803Sbapt 345264803Sbaptvoid 346264803Sbaptarg_type_disagree_warning(int a_lineno, int i, char *a_name) 347264803Sbapt{ 348264803Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", type of argument %d " 349264803Sbapt "to %s doesn't agree with previous declaration\n", 350264803Sbapt myname, a_lineno, input_file_name, i, a_name); 351264803Sbapt} 352264803Sbapt 353264803Sbaptvoid 354264803Sbaptunknown_arg_warning(int d_lineno, const char *dlr_opt, const char *d_arg, const char 355264803Sbapt *d_line, const char *d_cptr) 356264803Sbapt{ 357264803Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", unknown argument %s%s\n", 358264803Sbapt myname, d_lineno, input_file_name, dlr_opt, d_arg); 359264803Sbapt print_pos(d_line, d_cptr); 360264803Sbapt} 361264803Sbapt 362264803Sbaptvoid 363264803Sbaptuntyped_arg_warning(int a_lineno, const char *dlr_opt, const char *a_name) 364264803Sbapt{ 365264803Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", untyped argument %s%s\n", 366264803Sbapt myname, a_lineno, input_file_name, dlr_opt, a_name); 367264803Sbapt} 368264803Sbapt 369264803Sbaptvoid 370264803Sbaptwrong_number_args_warning(const char *which, const char *a_name) 371264803Sbapt{ 372264803Sbapt fprintf(stderr, 373264803Sbapt "%s: w - line %d of \"%s\", wrong number of %sarguments for %s\n", 374264803Sbapt myname, lineno, input_file_name, which, a_name); 375264803Sbapt print_pos(line, cptr); 376264803Sbapt} 377264803Sbapt 378264803Sbaptvoid 379264803Sbaptwrong_type_for_arg_warning(int i, char *a_name) 380264803Sbapt{ 381264803Sbapt fprintf(stderr, 382264803Sbapt "%s: w - line %d of \"%s\", wrong type for default argument %d to %s\n", 383264803Sbapt myname, lineno, input_file_name, i, a_name); 384264803Sbapt print_pos(line, cptr); 385264803Sbapt} 386264803Sbapt 387264803Sbaptvoid 388264803Sbaptstart_requires_args(char *a_name) 389264803Sbapt{ 390264803Sbapt fprintf(stderr, 391264803Sbapt "%s: w - line %d of \"%s\", start symbol %s requires arguments\n", 392264803Sbapt myname, 0, input_file_name, a_name); 393264803Sbapt 394264803Sbapt} 395264803Sbapt 396264803Sbaptvoid 397319297Sdelphijdestructor_redeclared_warning(const struct ainfo *a) 398264803Sbapt{ 399264803Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", destructor redeclared\n", 400319297Sdelphij myname, a->a_lineno, input_file_name); 401319297Sdelphij print_pos(a->a_line, a->a_cptr); 402264803Sbapt} 403264803Sbapt#endif 404