1/* $Id: error.c,v 1.14 2016/12/02 18:35:55 tom Exp $ */ 2 3/* routines for printing error messages */ 4 5#include "defs.h" 6 7void 8fatal(const char *msg) 9{ 10 fprintf(stderr, "%s: f - %s\n", myname, msg); 11 done(2); 12} 13 14void 15no_space(void) 16{ 17 fprintf(stderr, "%s: f - out of space\n", myname); 18 done(2); 19} 20 21void 22open_error(const char *filename) 23{ 24 fprintf(stderr, "%s: f - cannot open \"%s\"\n", myname, filename); 25 done(2); 26} 27 28void 29missing_brace(void) 30{ 31 fprintf(stderr, "%s: e - line %d of \"%s\", missing '}'\n", 32 myname, lineno, input_file_name); 33 done(1); 34} 35 36void 37unexpected_EOF(void) 38{ 39 fprintf(stderr, "%s: e - line %d of \"%s\", unexpected end-of-file\n", 40 myname, lineno, input_file_name); 41 done(1); 42} 43 44static void 45print_pos(const char *st_line, const char *st_cptr) 46{ 47 const char *s; 48 49 if (st_line == 0) 50 return; 51 for (s = st_line; *s != '\n'; ++s) 52 { 53 if (isprint(UCH(*s)) || *s == '\t') 54 putc(*s, stderr); 55 else 56 putc('?', stderr); 57 } 58 putc('\n', stderr); 59 for (s = st_line; s < st_cptr; ++s) 60 { 61 if (*s == '\t') 62 putc('\t', stderr); 63 else 64 putc(' ', stderr); 65 } 66 putc('^', stderr); 67 putc('\n', stderr); 68} 69 70void 71syntax_error(int st_lineno, char *st_line, char *st_cptr) 72{ 73 fprintf(stderr, "%s: e - line %d of \"%s\", syntax error\n", 74 myname, st_lineno, input_file_name); 75 print_pos(st_line, st_cptr); 76 done(1); 77} 78 79void 80unterminated_comment(const struct ainfo *a) 81{ 82 fprintf(stderr, "%s: e - line %d of \"%s\", unmatched /*\n", 83 myname, a->a_lineno, input_file_name); 84 print_pos(a->a_line, a->a_cptr); 85 done(1); 86} 87 88void 89unterminated_string(const struct ainfo *a) 90{ 91 fprintf(stderr, "%s: e - line %d of \"%s\", unterminated string\n", 92 myname, a->a_lineno, input_file_name); 93 print_pos(a->a_line, a->a_cptr); 94 done(1); 95} 96 97void 98unterminated_text(const struct ainfo *a) 99{ 100 fprintf(stderr, "%s: e - line %d of \"%s\", unmatched %%{\n", 101 myname, a->a_lineno, input_file_name); 102 print_pos(a->a_line, a->a_cptr); 103 done(1); 104} 105 106void 107unterminated_union(const struct ainfo *a) 108{ 109 fprintf(stderr, "%s: e - line %d of \"%s\", unterminated %%union \ 110declaration\n", myname, a->a_lineno, input_file_name); 111 print_pos(a->a_line, a->a_cptr); 112 done(1); 113} 114 115void 116over_unionized(char *u_cptr) 117{ 118 fprintf(stderr, "%s: e - line %d of \"%s\", too many %%union \ 119declarations\n", myname, lineno, input_file_name); 120 print_pos(line, u_cptr); 121 done(1); 122} 123 124void 125illegal_tag(int t_lineno, char *t_line, char *t_cptr) 126{ 127 fprintf(stderr, "%s: e - line %d of \"%s\", illegal tag\n", 128 myname, t_lineno, input_file_name); 129 print_pos(t_line, t_cptr); 130 done(1); 131} 132 133void 134illegal_character(char *c_cptr) 135{ 136 fprintf(stderr, "%s: e - line %d of \"%s\", illegal character\n", 137 myname, lineno, input_file_name); 138 print_pos(line, c_cptr); 139 done(1); 140} 141 142void 143used_reserved(char *s) 144{ 145 fprintf(stderr, 146 "%s: e - line %d of \"%s\", illegal use of reserved symbol \ 147%s\n", myname, lineno, input_file_name, s); 148 done(1); 149} 150 151void 152tokenized_start(char *s) 153{ 154 fprintf(stderr, 155 "%s: e - line %d of \"%s\", the start symbol %s cannot be \ 156declared to be a token\n", myname, lineno, input_file_name, s); 157 done(1); 158} 159 160void 161retyped_warning(char *s) 162{ 163 fprintf(stderr, "%s: w - line %d of \"%s\", the type of %s has been \ 164redeclared\n", myname, lineno, input_file_name, s); 165} 166 167void 168reprec_warning(char *s) 169{ 170 fprintf(stderr, 171 "%s: w - line %d of \"%s\", the precedence of %s has been \ 172redeclared\n", myname, lineno, input_file_name, s); 173} 174 175void 176revalued_warning(char *s) 177{ 178 fprintf(stderr, "%s: w - line %d of \"%s\", the value of %s has been \ 179redeclared\n", myname, lineno, input_file_name, s); 180} 181 182void 183terminal_start(char *s) 184{ 185 fprintf(stderr, "%s: e - line %d of \"%s\", the start symbol %s is a \ 186token\n", myname, lineno, input_file_name, s); 187 done(1); 188} 189 190void 191restarted_warning(void) 192{ 193 fprintf(stderr, "%s: w - line %d of \"%s\", the start symbol has been \ 194redeclared\n", myname, lineno, input_file_name); 195} 196 197void 198no_grammar(void) 199{ 200 fprintf(stderr, "%s: e - line %d of \"%s\", no grammar has been \ 201specified\n", myname, lineno, input_file_name); 202 done(1); 203} 204 205void 206terminal_lhs(int s_lineno) 207{ 208 fprintf(stderr, "%s: e - line %d of \"%s\", a token appears on the lhs \ 209of a production\n", myname, s_lineno, input_file_name); 210 done(1); 211} 212 213void 214prec_redeclared(void) 215{ 216 fprintf(stderr, "%s: w - line %d of \"%s\", conflicting %%prec \ 217specifiers\n", myname, lineno, input_file_name); 218} 219 220void 221unterminated_action(const struct ainfo *a) 222{ 223 fprintf(stderr, "%s: e - line %d of \"%s\", unterminated action\n", 224 myname, a->a_lineno, input_file_name); 225 print_pos(a->a_line, a->a_cptr); 226 done(1); 227} 228 229void 230dollar_warning(int a_lineno, int i) 231{ 232 fprintf(stderr, "%s: w - line %d of \"%s\", $%d references beyond the \ 233end of the current rule\n", myname, a_lineno, input_file_name, i); 234} 235 236void 237dollar_error(int a_lineno, char *a_line, char *a_cptr) 238{ 239 fprintf(stderr, "%s: e - line %d of \"%s\", illegal $-name\n", 240 myname, a_lineno, input_file_name); 241 print_pos(a_line, a_cptr); 242 done(1); 243} 244 245void 246untyped_lhs(void) 247{ 248 fprintf(stderr, "%s: e - line %d of \"%s\", $$ is untyped\n", 249 myname, lineno, input_file_name); 250 done(1); 251} 252 253void 254untyped_rhs(int i, char *s) 255{ 256 fprintf(stderr, "%s: e - line %d of \"%s\", $%d (%s) is untyped\n", 257 myname, lineno, input_file_name, i, s); 258 done(1); 259} 260 261void 262unknown_rhs(int i) 263{ 264 fprintf(stderr, "%s: e - line %d of \"%s\", $%d is untyped\n", 265 myname, lineno, input_file_name, i); 266 done(1); 267} 268 269void 270default_action_warning(char *s) 271{ 272 fprintf(stderr, 273 "%s: w - line %d of \"%s\", the default action for %s assigns an \ 274undefined value to $$\n", 275 myname, lineno, input_file_name, s); 276} 277 278void 279undefined_goal(char *s) 280{ 281 fprintf(stderr, "%s: e - the start symbol %s is undefined\n", myname, s); 282 done(1); 283} 284 285void 286undefined_symbol_warning(char *s) 287{ 288 fprintf(stderr, "%s: w - the symbol %s is undefined\n", myname, s); 289} 290 291#if ! defined(YYBTYACC) 292void 293unsupported_flag_warning(const char *flag, const char *details) 294{ 295 fprintf(stderr, "%s: w - %s flag unsupported, %s\n", 296 myname, flag, details); 297} 298#endif 299 300#if defined(YYBTYACC) 301void 302at_warning(int a_lineno, int i) 303{ 304 fprintf(stderr, "%s: w - line %d of \"%s\", @%d references beyond the \ 305end of the current rule\n", myname, a_lineno, input_file_name, i); 306} 307 308void 309at_error(int a_lineno, char *a_line, char *a_cptr) 310{ 311 fprintf(stderr, 312 "%s: e - line %d of \"%s\", illegal @$ or @N reference\n", 313 myname, a_lineno, input_file_name); 314 print_pos(a_line, a_cptr); 315 done(1); 316} 317 318void 319unterminated_arglist(const struct ainfo *a) 320{ 321 fprintf(stderr, 322 "%s: e - line %d of \"%s\", unterminated argument list\n", 323 myname, a->a_lineno, input_file_name); 324 print_pos(a->a_line, a->a_cptr); 325 done(1); 326} 327 328void 329arg_number_disagree_warning(int a_lineno, char *a_name) 330{ 331 fprintf(stderr, "%s: w - line %d of \"%s\", number of arguments of %s " 332 "doesn't agree with previous declaration\n", 333 myname, a_lineno, input_file_name, a_name); 334} 335 336void 337bad_formals(void) 338{ 339 fprintf(stderr, "%s: e - line %d of \"%s\", bad formal argument list\n", 340 myname, lineno, input_file_name); 341 print_pos(line, cptr); 342 done(1); 343} 344 345void 346arg_type_disagree_warning(int a_lineno, int i, char *a_name) 347{ 348 fprintf(stderr, "%s: w - line %d of \"%s\", type of argument %d " 349 "to %s doesn't agree with previous declaration\n", 350 myname, a_lineno, input_file_name, i, a_name); 351} 352 353void 354unknown_arg_warning(int d_lineno, const char *dlr_opt, const char *d_arg, const char 355 *d_line, const char *d_cptr) 356{ 357 fprintf(stderr, "%s: w - line %d of \"%s\", unknown argument %s%s\n", 358 myname, d_lineno, input_file_name, dlr_opt, d_arg); 359 print_pos(d_line, d_cptr); 360} 361 362void 363untyped_arg_warning(int a_lineno, const char *dlr_opt, const char *a_name) 364{ 365 fprintf(stderr, "%s: w - line %d of \"%s\", untyped argument %s%s\n", 366 myname, a_lineno, input_file_name, dlr_opt, a_name); 367} 368 369void 370wrong_number_args_warning(const char *which, const char *a_name) 371{ 372 fprintf(stderr, 373 "%s: w - line %d of \"%s\", wrong number of %sarguments for %s\n", 374 myname, lineno, input_file_name, which, a_name); 375 print_pos(line, cptr); 376} 377 378void 379wrong_type_for_arg_warning(int i, char *a_name) 380{ 381 fprintf(stderr, 382 "%s: w - line %d of \"%s\", wrong type for default argument %d to %s\n", 383 myname, lineno, input_file_name, i, a_name); 384 print_pos(line, cptr); 385} 386 387void 388start_requires_args(char *a_name) 389{ 390 fprintf(stderr, 391 "%s: w - line %d of \"%s\", start symbol %s requires arguments\n", 392 myname, 0, input_file_name, a_name); 393 394} 395 396void 397destructor_redeclared_warning(const struct ainfo *a) 398{ 399 fprintf(stderr, "%s: w - line %d of \"%s\", destructor redeclared\n", 400 myname, a->a_lineno, input_file_name); 401 print_pos(a->a_line, a->a_cptr); 402} 403#endif 404