1319297Sdelphij/* $Id: error.c,v 1.14 2016/12/02 18:35:55 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
45264803Sbaptprint_pos(const char *st_line, const char *st_cptr)
46234949Sbapt{
47264803Sbapt    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
80319297Sdelphijunterminated_comment(const struct ainfo *a)
81234949Sbapt{
82234949Sbapt    fprintf(stderr, "%s: e - line %d of \"%s\", unmatched /*\n",
83319297Sdelphij	    myname, a->a_lineno, input_file_name);
84319297Sdelphij    print_pos(a->a_line, a->a_cptr);
85234949Sbapt    done(1);
86234949Sbapt}
87234949Sbapt
88234949Sbaptvoid
89319297Sdelphijunterminated_string(const struct ainfo *a)
90234949Sbapt{
91234949Sbapt    fprintf(stderr, "%s: e - line %d of \"%s\", unterminated string\n",
92319297Sdelphij	    myname, a->a_lineno, input_file_name);
93319297Sdelphij    print_pos(a->a_line, a->a_cptr);
94234949Sbapt    done(1);
95234949Sbapt}
96234949Sbapt
97234949Sbaptvoid
98319297Sdelphijunterminated_text(const struct ainfo *a)
99234949Sbapt{
100234949Sbapt    fprintf(stderr, "%s: e - line %d of \"%s\", unmatched %%{\n",
101319297Sdelphij	    myname, a->a_lineno, input_file_name);
102319297Sdelphij    print_pos(a->a_line, a->a_cptr);
103234949Sbapt    done(1);
104234949Sbapt}
105234949Sbapt
106234949Sbaptvoid
107319297Sdelphijunterminated_union(const struct ainfo *a)
108234949Sbapt{
109234949Sbapt    fprintf(stderr, "%s: e - line %d of \"%s\", unterminated %%union \
110319297Sdelphijdeclaration\n", myname, a->a_lineno, input_file_name);
111319297Sdelphij    print_pos(a->a_line, a->a_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
221319297Sdelphijunterminated_action(const struct ainfo *a)
222234949Sbapt{
223234949Sbapt    fprintf(stderr, "%s: e - line %d of \"%s\", unterminated action\n",
224319297Sdelphij	    myname, a->a_lineno, input_file_name);
225319297Sdelphij    print_pos(a->a_line, a->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
270319297Sdelphijdefault_action_warning(char *s)
271234949Sbapt{
272234949Sbapt    fprintf(stderr,
273319297Sdelphij	    "%s: w - line %d of \"%s\", the default action for %s assigns an \
274319297Sdelphijundefined value to $$\n",
275319297Sdelphij	    myname, lineno, input_file_name, s);
276234949Sbapt}
277234949Sbapt
278234949Sbaptvoid
279234949Sbaptundefined_goal(char *s)
280234949Sbapt{
281234949Sbapt    fprintf(stderr, "%s: e - the start symbol %s is undefined\n", myname, s);
282234949Sbapt    done(1);
283234949Sbapt}
284234949Sbapt
285234949Sbaptvoid
286234949Sbaptundefined_symbol_warning(char *s)
287234949Sbapt{
288234949Sbapt    fprintf(stderr, "%s: w - the symbol %s is undefined\n", myname, s);
289234949Sbapt}
290264803Sbapt
291264803Sbapt#if ! defined(YYBTYACC)
292264803Sbaptvoid
293264803Sbaptunsupported_flag_warning(const char *flag, const char *details)
294264803Sbapt{
295264803Sbapt    fprintf(stderr, "%s: w - %s flag unsupported, %s\n",
296264803Sbapt	    myname, flag, details);
297264803Sbapt}
298264803Sbapt#endif
299264803Sbapt
300264803Sbapt#if defined(YYBTYACC)
301264803Sbaptvoid
302264803Sbaptat_warning(int a_lineno, int i)
303264803Sbapt{
304264803Sbapt    fprintf(stderr, "%s: w - line %d of \"%s\", @%d references beyond the \
305264803Sbaptend of the current rule\n", myname, a_lineno, input_file_name, i);
306264803Sbapt}
307264803Sbapt
308264803Sbaptvoid
309264803Sbaptat_error(int a_lineno, char *a_line, char *a_cptr)
310264803Sbapt{
311264803Sbapt    fprintf(stderr,
312264803Sbapt	    "%s: e - line %d of \"%s\", illegal @$ or @N reference\n",
313264803Sbapt	    myname, a_lineno, input_file_name);
314264803Sbapt    print_pos(a_line, a_cptr);
315264803Sbapt    done(1);
316264803Sbapt}
317264803Sbapt
318264803Sbaptvoid
319319297Sdelphijunterminated_arglist(const struct ainfo *a)
320264803Sbapt{
321264803Sbapt    fprintf(stderr,
322264803Sbapt	    "%s: e - line %d of \"%s\", unterminated argument list\n",
323319297Sdelphij	    myname, a->a_lineno, input_file_name);
324319297Sdelphij    print_pos(a->a_line, a->a_cptr);
325264803Sbapt    done(1);
326264803Sbapt}
327264803Sbapt
328264803Sbaptvoid
329264803Sbaptarg_number_disagree_warning(int a_lineno, char *a_name)
330264803Sbapt{
331264803Sbapt    fprintf(stderr, "%s: w - line %d of \"%s\", number of arguments of %s "
332264803Sbapt	    "doesn't agree with previous declaration\n",
333264803Sbapt	    myname, a_lineno, input_file_name, a_name);
334264803Sbapt}
335264803Sbapt
336264803Sbaptvoid
337264803Sbaptbad_formals(void)
338264803Sbapt{
339264803Sbapt    fprintf(stderr, "%s: e - line %d of \"%s\", bad formal argument list\n",
340264803Sbapt	    myname, lineno, input_file_name);
341264803Sbapt    print_pos(line, cptr);
342264803Sbapt    done(1);
343264803Sbapt}
344264803Sbapt
345264803Sbaptvoid
346264803Sbaptarg_type_disagree_warning(int a_lineno, int i, char *a_name)
347264803Sbapt{
348264803Sbapt    fprintf(stderr, "%s: w - line %d of \"%s\", type of argument %d "
349264803Sbapt	    "to %s doesn't agree with previous declaration\n",
350264803Sbapt	    myname, a_lineno, input_file_name, i, a_name);
351264803Sbapt}
352264803Sbapt
353264803Sbaptvoid
354264803Sbaptunknown_arg_warning(int d_lineno, const char *dlr_opt, const char *d_arg, const char
355264803Sbapt		    *d_line, const char *d_cptr)
356264803Sbapt{
357264803Sbapt    fprintf(stderr, "%s: w - line %d of \"%s\", unknown argument %s%s\n",
358264803Sbapt	    myname, d_lineno, input_file_name, dlr_opt, d_arg);
359264803Sbapt    print_pos(d_line, d_cptr);
360264803Sbapt}
361264803Sbapt
362264803Sbaptvoid
363264803Sbaptuntyped_arg_warning(int a_lineno, const char *dlr_opt, const char *a_name)
364264803Sbapt{
365264803Sbapt    fprintf(stderr, "%s: w - line %d of \"%s\", untyped argument %s%s\n",
366264803Sbapt	    myname, a_lineno, input_file_name, dlr_opt, a_name);
367264803Sbapt}
368264803Sbapt
369264803Sbaptvoid
370264803Sbaptwrong_number_args_warning(const char *which, const char *a_name)
371264803Sbapt{
372264803Sbapt    fprintf(stderr,
373264803Sbapt	    "%s: w - line %d of \"%s\", wrong number of %sarguments for %s\n",
374264803Sbapt	    myname, lineno, input_file_name, which, a_name);
375264803Sbapt    print_pos(line, cptr);
376264803Sbapt}
377264803Sbapt
378264803Sbaptvoid
379264803Sbaptwrong_type_for_arg_warning(int i, char *a_name)
380264803Sbapt{
381264803Sbapt    fprintf(stderr,
382264803Sbapt	    "%s: w - line %d of \"%s\", wrong type for default argument %d to %s\n",
383264803Sbapt	    myname, lineno, input_file_name, i, a_name);
384264803Sbapt    print_pos(line, cptr);
385264803Sbapt}
386264803Sbapt
387264803Sbaptvoid
388264803Sbaptstart_requires_args(char *a_name)
389264803Sbapt{
390264803Sbapt    fprintf(stderr,
391264803Sbapt	    "%s: w - line %d of \"%s\", start symbol %s requires arguments\n",
392264803Sbapt	    myname, 0, input_file_name, a_name);
393264803Sbapt
394264803Sbapt}
395264803Sbapt
396264803Sbaptvoid
397319297Sdelphijdestructor_redeclared_warning(const struct ainfo *a)
398264803Sbapt{
399264803Sbapt    fprintf(stderr, "%s: w - line %d of \"%s\", destructor redeclared\n",
400319297Sdelphij	    myname, a->a_lineno, input_file_name);
401319297Sdelphij    print_pos(a->a_line, a->a_cptr);
402264803Sbapt}
403264803Sbapt#endif
404