1 /* $Id: error.c,v 1.9 2011/09/05 23:27:43 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(char *st_line, char *st_cptr) 46 { 47 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(int c_lineno, char *c_line, char *c_cptr) 81 { 82 fprintf(stderr, "%s: e - line %d of \"%s\", unmatched /*\n", 83 myname, c_lineno, input_file_name); 84 print_pos(c_line, c_cptr); 85 done(1); 86 } 87 88 void 89 unterminated_string(int s_lineno, char *s_line, char *s_cptr) 90 { 91 fprintf(stderr, "%s: e - line %d of \"%s\", unterminated string\n", 92 myname, s_lineno, input_file_name); 93 print_pos(s_line, s_cptr); 94 done(1); 95 } 96 97 void 98 unterminated_text(int t_lineno, char *t_line, char *t_cptr) 99 { 100 fprintf(stderr, "%s: e - line %d of \"%s\", unmatched %%{\n", 101 myname, t_lineno, input_file_name); 102 print_pos(t_line, t_cptr); 103 done(1); 104 } 105 106 void 107 unterminated_union(int u_lineno, char *u_line, char *u_cptr) 108 { 109 fprintf(stderr, "%s: e - line %d of \"%s\", unterminated %%union \ 110 declaration\n", myname, u_lineno, input_file_name); 111 print_pos(u_line, u_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(int a_lineno, char *a_line, char *a_cptr) 222 { 223 fprintf(stderr, "%s: e - line %d of \"%s\", unterminated action\n", 224 myname, a_lineno, input_file_name); 225 print_pos(a_line, 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(void) 271 { 272 fprintf(stderr, 273 "%s: w - line %d of \"%s\", the default action assigns an \ 274 undefined value to $$\n", myname, lineno, input_file_name); 275 } 276 277 void 278 undefined_goal(char *s) 279 { 280 fprintf(stderr, "%s: e - the start symbol %s is undefined\n", myname, s); 281 done(1); 282 } 283 284 void 285 undefined_symbol_warning(char *s) 286 { 287 fprintf(stderr, "%s: w - the symbol %s is undefined\n", myname, s); 288 } 289