1268899Sbapt/* $Id: error.c,v 1.11 2014/04/07 22:22:49 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 45268899Sbaptprint_pos(const char *st_line, const char *st_cptr) 46234949Sbapt{ 47268899Sbapt 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 80234949Sbaptunterminated_comment(int c_lineno, char *c_line, char *c_cptr) 81234949Sbapt{ 82234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", unmatched /*\n", 83234949Sbapt myname, c_lineno, input_file_name); 84234949Sbapt print_pos(c_line, c_cptr); 85234949Sbapt done(1); 86234949Sbapt} 87234949Sbapt 88234949Sbaptvoid 89234949Sbaptunterminated_string(int s_lineno, char *s_line, char *s_cptr) 90234949Sbapt{ 91234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", unterminated string\n", 92234949Sbapt myname, s_lineno, input_file_name); 93234949Sbapt print_pos(s_line, s_cptr); 94234949Sbapt done(1); 95234949Sbapt} 96234949Sbapt 97234949Sbaptvoid 98234949Sbaptunterminated_text(int t_lineno, char *t_line, char *t_cptr) 99234949Sbapt{ 100234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", unmatched %%{\n", 101234949Sbapt myname, t_lineno, input_file_name); 102234949Sbapt print_pos(t_line, t_cptr); 103234949Sbapt done(1); 104234949Sbapt} 105234949Sbapt 106234949Sbaptvoid 107234949Sbaptunterminated_union(int u_lineno, char *u_line, char *u_cptr) 108234949Sbapt{ 109234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", unterminated %%union \ 110234949Sbaptdeclaration\n", myname, u_lineno, input_file_name); 111234949Sbapt print_pos(u_line, u_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 221234949Sbaptunterminated_action(int a_lineno, char *a_line, char *a_cptr) 222234949Sbapt{ 223234949Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", unterminated action\n", 224234949Sbapt myname, a_lineno, input_file_name); 225234949Sbapt print_pos(a_line, 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 270234949Sbaptdefault_action_warning(void) 271234949Sbapt{ 272234949Sbapt fprintf(stderr, 273234949Sbapt "%s: w - line %d of \"%s\", the default action assigns an \ 274234949Sbaptundefined value to $$\n", myname, lineno, input_file_name); 275234949Sbapt} 276234949Sbapt 277234949Sbaptvoid 278234949Sbaptundefined_goal(char *s) 279234949Sbapt{ 280234949Sbapt fprintf(stderr, "%s: e - the start symbol %s is undefined\n", myname, s); 281234949Sbapt done(1); 282234949Sbapt} 283234949Sbapt 284234949Sbaptvoid 285234949Sbaptundefined_symbol_warning(char *s) 286234949Sbapt{ 287234949Sbapt fprintf(stderr, "%s: w - the symbol %s is undefined\n", myname, s); 288234949Sbapt} 289268899Sbapt 290268899Sbapt#if ! defined(YYBTYACC) 291268899Sbaptvoid 292268899Sbaptunsupported_flag_warning(const char *flag, const char *details) 293268899Sbapt{ 294268899Sbapt fprintf(stderr, "%s: w - %s flag unsupported, %s\n", 295268899Sbapt myname, flag, details); 296268899Sbapt} 297268899Sbapt#endif 298268899Sbapt 299268899Sbapt#if defined(YYBTYACC) 300268899Sbaptvoid 301268899Sbaptat_warning(int a_lineno, int i) 302268899Sbapt{ 303268899Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", @%d references beyond the \ 304268899Sbaptend of the current rule\n", myname, a_lineno, input_file_name, i); 305268899Sbapt} 306268899Sbapt 307268899Sbaptvoid 308268899Sbaptat_error(int a_lineno, char *a_line, char *a_cptr) 309268899Sbapt{ 310268899Sbapt fprintf(stderr, 311268899Sbapt "%s: e - line %d of \"%s\", illegal @$ or @N reference\n", 312268899Sbapt myname, a_lineno, input_file_name); 313268899Sbapt print_pos(a_line, a_cptr); 314268899Sbapt done(1); 315268899Sbapt} 316268899Sbapt 317268899Sbaptvoid 318268899Sbaptunterminated_arglist(int a_lineno, char *a_line, char *a_cptr) 319268899Sbapt{ 320268899Sbapt fprintf(stderr, 321268899Sbapt "%s: e - line %d of \"%s\", unterminated argument list\n", 322268899Sbapt myname, a_lineno, input_file_name); 323268899Sbapt print_pos(a_line, a_cptr); 324268899Sbapt done(1); 325268899Sbapt} 326268899Sbapt 327268899Sbaptvoid 328268899Sbaptarg_number_disagree_warning(int a_lineno, char *a_name) 329268899Sbapt{ 330268899Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", number of arguments of %s " 331268899Sbapt "doesn't agree with previous declaration\n", 332268899Sbapt myname, a_lineno, input_file_name, a_name); 333268899Sbapt} 334268899Sbapt 335268899Sbaptvoid 336268899Sbaptbad_formals(void) 337268899Sbapt{ 338268899Sbapt fprintf(stderr, "%s: e - line %d of \"%s\", bad formal argument list\n", 339268899Sbapt myname, lineno, input_file_name); 340268899Sbapt print_pos(line, cptr); 341268899Sbapt done(1); 342268899Sbapt} 343268899Sbapt 344268899Sbaptvoid 345268899Sbaptarg_type_disagree_warning(int a_lineno, int i, char *a_name) 346268899Sbapt{ 347268899Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", type of argument %d " 348268899Sbapt "to %s doesn't agree with previous declaration\n", 349268899Sbapt myname, a_lineno, input_file_name, i, a_name); 350268899Sbapt} 351268899Sbapt 352268899Sbaptvoid 353268899Sbaptunknown_arg_warning(int d_lineno, const char *dlr_opt, const char *d_arg, const char 354268899Sbapt *d_line, const char *d_cptr) 355268899Sbapt{ 356268899Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", unknown argument %s%s\n", 357268899Sbapt myname, d_lineno, input_file_name, dlr_opt, d_arg); 358268899Sbapt print_pos(d_line, d_cptr); 359268899Sbapt} 360268899Sbapt 361268899Sbaptvoid 362268899Sbaptuntyped_arg_warning(int a_lineno, const char *dlr_opt, const char *a_name) 363268899Sbapt{ 364268899Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", untyped argument %s%s\n", 365268899Sbapt myname, a_lineno, input_file_name, dlr_opt, a_name); 366268899Sbapt} 367268899Sbapt 368268899Sbaptvoid 369268899Sbaptwrong_number_args_warning(const char *which, const char *a_name) 370268899Sbapt{ 371268899Sbapt fprintf(stderr, 372268899Sbapt "%s: w - line %d of \"%s\", wrong number of %sarguments for %s\n", 373268899Sbapt myname, lineno, input_file_name, which, a_name); 374268899Sbapt print_pos(line, cptr); 375268899Sbapt} 376268899Sbapt 377268899Sbaptvoid 378268899Sbaptwrong_type_for_arg_warning(int i, char *a_name) 379268899Sbapt{ 380268899Sbapt fprintf(stderr, 381268899Sbapt "%s: w - line %d of \"%s\", wrong type for default argument %d to %s\n", 382268899Sbapt myname, lineno, input_file_name, i, a_name); 383268899Sbapt print_pos(line, cptr); 384268899Sbapt} 385268899Sbapt 386268899Sbaptvoid 387268899Sbaptstart_requires_args(char *a_name) 388268899Sbapt{ 389268899Sbapt fprintf(stderr, 390268899Sbapt "%s: w - line %d of \"%s\", start symbol %s requires arguments\n", 391268899Sbapt myname, 0, input_file_name, a_name); 392268899Sbapt 393268899Sbapt} 394268899Sbapt 395268899Sbaptvoid 396268899Sbaptdestructor_redeclared_warning(int a_lineno, char *a_line, char *a_cptr) 397268899Sbapt{ 398268899Sbapt fprintf(stderr, "%s: w - line %d of \"%s\", destructor redeclared\n", 399268899Sbapt myname, a_lineno, input_file_name); 400268899Sbapt print_pos(a_line, a_cptr); 401268899Sbapt} 402268899Sbapt#endif 403