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 7 void 8 fatal(const char *msg) 9 { 10 fprintf(stderr, "%s: f - %s\n", myname, msg); 11 done(2); 12 } 13 14 void 15 no_space(void) 16 { 17 fprintf(stderr, "%s: f - out of space\n", myname); 18 done(2); 19 } 20 21 void 22 open_error(const char *filename) 23 { 24 fprintf(stderr, "%s: f - cannot open \"%s\"\n", myname, filename); 25 done(2); 26 } 27 28 void 29 missing_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 36 void 37 unexpected_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 44 static void 45 print_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 70 void 71 syntax_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 79 void 80 unterminated_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 88 void 89 unterminated_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 97 void 98 unterminated_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 106 void 107 unterminated_union(const struct ainfo *a) 108 { 109 fprintf(stderr, "%s: e - line %d of \"%s\", unterminated %%union \ 110 declaration\n", myname, a->a_lineno, input_file_name); 111 print_pos(a->a_line, a->a_cptr); 112 done(1); 113 } 114 115 void 116 over_unionized(char *u_cptr) 117 { 118 fprintf(stderr, "%s: e - line %d of \"%s\", too many %%union \ 119 declarations\n", myname, lineno, input_file_name); 120 print_pos(line, u_cptr); 121 done(1); 122 } 123 124 void 125 illegal_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 133 void 134 illegal_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 142 void 143 used_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 151 void 152 tokenized_start(char *s) 153 { 154 fprintf(stderr, 155 "%s: e - line %d of \"%s\", the start symbol %s cannot be \ 156 declared to be a token\n", myname, lineno, input_file_name, s); 157 done(1); 158 } 159 160 void 161 retyped_warning(char *s) 162 { 163 fprintf(stderr, "%s: w - line %d of \"%s\", the type of %s has been \ 164 redeclared\n", myname, lineno, input_file_name, s); 165 } 166 167 void 168 reprec_warning(char *s) 169 { 170 fprintf(stderr, 171 "%s: w - line %d of \"%s\", the precedence of %s has been \ 172 redeclared\n", myname, lineno, input_file_name, s); 173 } 174 175 void 176 revalued_warning(char *s) 177 { 178 fprintf(stderr, "%s: w - line %d of \"%s\", the value of %s has been \ 179 redeclared\n", myname, lineno, input_file_name, s); 180 } 181 182 void 183 terminal_start(char *s) 184 { 185 fprintf(stderr, "%s: e - line %d of \"%s\", the start symbol %s is a \ 186 token\n", myname, lineno, input_file_name, s); 187 done(1); 188 } 189 190 void 191 restarted_warning(void) 192 { 193 fprintf(stderr, "%s: w - line %d of \"%s\", the start symbol has been \ 194 redeclared\n", myname, lineno, input_file_name); 195 } 196 197 void 198 no_grammar(void) 199 { 200 fprintf(stderr, "%s: e - line %d of \"%s\", no grammar has been \ 201 specified\n", myname, lineno, input_file_name); 202 done(1); 203 } 204 205 void 206 terminal_lhs(int s_lineno) 207 { 208 fprintf(stderr, "%s: e - line %d of \"%s\", a token appears on the lhs \ 209 of a production\n", myname, s_lineno, input_file_name); 210 done(1); 211 } 212 213 void 214 prec_redeclared(void) 215 { 216 fprintf(stderr, "%s: w - line %d of \"%s\", conflicting %%prec \ 217 specifiers\n", myname, lineno, input_file_name); 218 } 219 220 void 221 unterminated_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 229 void 230 dollar_warning(int a_lineno, int i) 231 { 232 fprintf(stderr, "%s: w - line %d of \"%s\", $%d references beyond the \ 233 end of the current rule\n", myname, a_lineno, input_file_name, i); 234 } 235 236 void 237 dollar_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 245 void 246 untyped_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 253 void 254 untyped_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 261 void 262 unknown_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 269 void 270 default_action_warning(char *s) 271 { 272 fprintf(stderr, 273 "%s: w - line %d of \"%s\", the default action for %s assigns an \ 274 undefined value to $$\n", 275 myname, lineno, input_file_name, s); 276 } 277 278 void 279 undefined_goal(char *s) 280 { 281 fprintf(stderr, "%s: e - the start symbol %s is undefined\n", myname, s); 282 done(1); 283 } 284 285 void 286 undefined_symbol_warning(char *s) 287 { 288 fprintf(stderr, "%s: w - the symbol %s is undefined\n", myname, s); 289 } 290 291 #if ! defined(YYBTYACC) 292 void 293 unsupported_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) 301 void 302 at_warning(int a_lineno, int i) 303 { 304 fprintf(stderr, "%s: w - line %d of \"%s\", @%d references beyond the \ 305 end of the current rule\n", myname, a_lineno, input_file_name, i); 306 } 307 308 void 309 at_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 318 void 319 unterminated_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 328 void 329 arg_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 336 void 337 bad_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 345 void 346 arg_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 353 void 354 unknown_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 362 void 363 untyped_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 369 void 370 wrong_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 378 void 379 wrong_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 387 void 388 start_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 396 void 397 destructor_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