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