Berkeley YACC  1993-03-03
Berkeley's version of Yet Another Compiler Compiler
 All Data Structures Files Functions Variables Typedefs Macros Groups
Error handling

Routines for handling errors and warnings and performing cleanup. More...

Files

file  error.c
 Routines to report various warnings and errors and maybe quit the program.
 

Functions

 fatal (char *msg)
 
 no_space ()
 
 open_error (char *filename)
 
 unexpected_EOF ()
 
 print_pos (char *st_line, char *st_cptr)
 
 syntax_error (int st_lineno, char *st_line, char *st_cptr)
 
 unterminated_comment (int c_lineno, char *c_line, char *c_cptr)
 
 unterminated_string (int s_lineno, char *s_line, char *s_cptr)
 
 unterminated_text (int t_lineno, char *t_line, char *t_cptr)
 
 unterminated_union (int u_lineno, char *u_line, char *u_cptr)
 
 over_unionized (char *u_cptr)
 
 illegal_tag (int t_lineno, char *t_line, char *t_cptr)
 
 illegal_character (char *c_cptr)
 
 used_reserved (char *s)
 
 tokenized_start (char *s)
 
 retyped_warning (char *s)
 
 reprec_warning (char *s)
 
 revalued_warning (char *s)
 
 terminal_start (char *s)
 
 restarted_warning ()
 
 no_grammar ()
 
 terminal_lhs (int s_lineno)
 
 prec_redeclared ()
 
 unterminated_action (int a_lineno, char *a_line, char *a_cptr)
 
 dollar_warning (int a_lineno, int i)
 
 dollar_error (int a_lineno, char *a_line, char *a_cptr)
 
 untyped_lhs ()
 
 untyped_rhs (int i, char *s)
 
 unknown_rhs (int i)
 
 default_action_warning ()
 
 undefined_goal (char *s)
 
 undefined_symbol_warning (char *s)
 
 done (int k)
 Shutdown function. More...
 
 onintr ()
 Signal handler callback. More...
 
 set_signals ()
 Sets the appropriate signal handlers up. More...
 

Detailed Description

Routines for handling errors and warnings and performing cleanup.

Function Documentation

default_action_warning ( )

Definition at line 311 of file error.c.

References input_file_name, lineno, and myname.

Referenced by end_rule().

312 {
313  fprintf(stderr, "%s: w - line %d of \"%s\", the default action assigns an \
314 undefined value to $$\n", myname, lineno, input_file_name);
315 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
char * myname
Definition: main.c:12

+ Here is the caller graph for this function:

dollar_error ( int  a_lineno,
char *  a_line,
char *  a_cptr 
)

Definition at line 272 of file error.c.

References done(), input_file_name, myname, and print_pos().

Referenced by copy_action().

276 {
277  fprintf(stderr, "%s: e - line %d of \"%s\", illegal $-name\n",
278  myname, a_lineno, input_file_name);
279  print_pos(a_line, a_cptr);
280  done(1);
281 }
char * input_file_name
Definition: main.c:21
done(int k)
Shutdown function.
Definition: main.c:156
print_pos(char *st_line, char *st_cptr)
Definition: error.c:50
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

dollar_warning ( int  a_lineno,
int  i 
)

Definition at line 263 of file error.c.

References input_file_name, and myname.

Referenced by copy_action().

266 {
267  fprintf(stderr, "%s: w - line %d of \"%s\", $%d references beyond the \
268 end of the current rule\n", myname, a_lineno, input_file_name, i);
269 }
char * input_file_name
Definition: main.c:21
char * myname
Definition: main.c:12

+ Here is the caller graph for this function:

done ( int  k)

Shutdown function.

This function deletes all temporary files still open and exits the program with the status code passed to it.

Parameters
[in]kThe status code the program should exit with

Definition at line 156 of file main.c.

References action_file, action_file_name, text_file, text_file_name, union_file, and union_file_name.

Referenced by build_relations(), dollar_error(), fatal(), illegal_character(), illegal_tag(), main(), no_grammar(), no_space(), onintr(), open_error(), over_unionized(), set_nullable(), syntax_error(), terminal_lhs(), terminal_start(), tokenized_start(), undefined_goal(), unexpected_EOF(), unknown_rhs(), unterminated_action(), unterminated_comment(), unterminated_string(), unterminated_text(), unterminated_union(), untyped_lhs(), untyped_rhs(), and used_reserved().

158 {
159  if (action_file) { fclose(action_file); unlink(action_file_name); }
160  if (text_file) { fclose(text_file); unlink(text_file_name); }
161  if (union_file) { fclose(union_file); unlink(union_file_name); }
162  exit(k);
163 }
FILE * text_file
Definition: main.c:33
char * action_file_name
Definition: main.c:18
char * text_file_name
Definition: main.c:23
char * union_file_name
Definition: main.c:24
FILE * action_file
Definition: main.c:27
FILE * union_file
Definition: main.c:35
fatal ( char *  msg)

Definition at line 19 of file error.c.

References done(), and myname.

Referenced by new_state(), pack_vector(), and set_goto_map().

21 {
22  fprintf(stderr, "%s: f - %s\n", myname, msg);
23  done(2);
24 }
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

illegal_character ( char *  c_cptr)

Definition at line 159 of file error.c.

References done(), input_file_name, line, lineno, myname, and print_pos().

Referenced by get_literal().

161 {
162  fprintf(stderr, "%s: e - line %d of \"%s\", illegal character\n",
164  print_pos(line, c_cptr);
165  done(1);
166 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
done(int k)
Shutdown function.
Definition: main.c:156
char * line
Definition: reader.c:17
print_pos(char *st_line, char *st_cptr)
Definition: error.c:50
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

illegal_tag ( int  t_lineno,
char *  t_line,
char *  t_cptr 
)

Definition at line 147 of file error.c.

References done(), input_file_name, myname, and print_pos().

Referenced by get_tag().

151 {
152  fprintf(stderr, "%s: e - line %d of \"%s\", illegal tag\n",
153  myname, t_lineno, input_file_name);
154  print_pos(t_line, t_cptr);
155  done(1);
156 }
char * input_file_name
Definition: main.c:21
done(int k)
Shutdown function.
Definition: main.c:156
print_pos(char *st_line, char *st_cptr)
Definition: error.c:50
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

no_grammar ( )

Definition at line 227 of file error.c.

References done(), input_file_name, lineno, and myname.

Referenced by advance_to_start().

228 {
229  fprintf(stderr, "%s: e - line %d of \"%s\", no grammar has been \
230 specified\n", myname, lineno, input_file_name);
231  done(1);
232 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

no_space ( )

Definition at line 27 of file error.c.

References done(), and myname.

Referenced by allocate(), cachec(), create_file_names(), create_symbol_table(), dup_line(), expand_items(), expand_rules(), get_line(), get_literal(), get_tag(), initialize_grammar(), initialize_states(), make_bucket(), output_debug(), pack_grammar(), pack_names(), pack_symbols(), pack_vector(), read_declarations(), set_nullable(), unused_rules(), and verbose().

28 {
29  fprintf(stderr, "%s: f - out of space\n", myname);
30  done(2);
31 }
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

onintr ( )

Signal handler callback.

This function is executed whenever the program receives a shutdown signal (either SIGINT, SIGTERM, or SIGHUP). It just calls done(int) with code 1.

Definition at line 172 of file main.c.

References done().

Referenced by set_signals().

173 {
174  done(1);
175 }
done(int k)
Shutdown function.
Definition: main.c:156

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

open_error ( char *  filename)

Definition at line 34 of file error.c.

References done(), and myname.

Referenced by open_files(), output_defines(), output_semantic_actions(), and output_stored_text().

36 {
37  fprintf(stderr, "%s: f - cannot open \"%s\"\n", myname, filename);
38  done(2);
39 }
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

over_unionized ( char *  u_cptr)

Definition at line 137 of file error.c.

References done(), input_file_name, line, lineno, myname, and print_pos().

Referenced by copy_union().

139 {
140  fprintf(stderr, "%s: e - line %d of \"%s\", too many %%union \
141 declarations\n", myname, lineno, input_file_name);
142  print_pos(line, u_cptr);
143  done(1);
144 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
done(int k)
Shutdown function.
Definition: main.c:156
char * line
Definition: reader.c:17
print_pos(char *st_line, char *st_cptr)
Definition: error.c:50
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

prec_redeclared ( )

Definition at line 244 of file error.c.

References input_file_name, lineno, and myname.

Referenced by mark_symbol().

245 {
246  fprintf(stderr, "%s: w - line %d of \"%s\", conflicting %%prec \
247 specifiers\n", myname, lineno, input_file_name);
248 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
char * myname
Definition: main.c:12

+ Here is the caller graph for this function:

print_pos ( char *  st_line,
char *  st_cptr 
)

Definition at line 50 of file error.c.

Referenced by dollar_error(), illegal_character(), illegal_tag(), over_unionized(), syntax_error(), unterminated_action(), unterminated_comment(), unterminated_string(), unterminated_text(), and unterminated_union().

53 {
54  register char *s;
55 
56  if (st_line == 0) return;
57  for (s = st_line; *s != '\n'; ++s)
58  {
59  if (isprint(*s) || *s == '\t')
60  putc(*s, stderr);
61  else
62  putc('?', stderr);
63  }
64  putc('\n', stderr);
65  for (s = st_line; s < st_cptr; ++s)
66  {
67  if (*s == '\t')
68  putc('\t', stderr);
69  else
70  putc(' ', stderr);
71  }
72  putc('^', stderr);
73  putc('\n', stderr);
74 }

+ Here is the caller graph for this function:

reprec_warning ( char *  s)

Definition at line 195 of file error.c.

References input_file_name, lineno, and myname.

Referenced by declare_tokens().

197 {
198  fprintf(stderr, "%s: w - line %d of \"%s\", the precedence of %s has been \
199 redeclared\n", myname, lineno, input_file_name, s);
200 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
char * myname
Definition: main.c:12

+ Here is the caller graph for this function:

restarted_warning ( )

Definition at line 220 of file error.c.

References input_file_name, lineno, and myname.

Referenced by declare_start().

221 {
222  fprintf(stderr, "%s: w - line %d of \"%s\", the start symbol has been \
223 redeclared\n", myname, lineno, input_file_name);
224 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
char * myname
Definition: main.c:12

+ Here is the caller graph for this function:

retyped_warning ( char *  s)

Definition at line 187 of file error.c.

References input_file_name, lineno, and myname.

Referenced by declare_tokens(), and declare_types().

189 {
190  fprintf(stderr, "%s: w - line %d of \"%s\", the type of %s has been \
191 redeclared\n", myname, lineno, input_file_name, s);
192 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
char * myname
Definition: main.c:12

+ Here is the caller graph for this function:

revalued_warning ( char *  s)

Definition at line 203 of file error.c.

References input_file_name, lineno, and myname.

Referenced by declare_tokens().

205 {
206  fprintf(stderr, "%s: w - line %d of \"%s\", the value of %s has been \
207 redeclared\n", myname, lineno, input_file_name, s);
208 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
char * myname
Definition: main.c:12

+ Here is the caller graph for this function:

set_signals ( )

Sets the appropriate signal handlers up.

This function is executed on startup and sets onintr() as callback for any shutdown signal (SIGINT, SIGTERM, SIGHUP).

Definition at line 185 of file main.c.

References onintr().

Referenced by main().

186 {
187 #ifdef SIGINT
188  if (signal(SIGINT, SIG_IGN) != SIG_IGN)
189  signal(SIGINT, onintr);
190 #endif
191 #ifdef SIGTERM
192  if (signal(SIGTERM, SIG_IGN) != SIG_IGN)
193  signal(SIGTERM, onintr);
194 #endif
195 #ifdef SIGHUP
196  if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
197  signal(SIGHUP, onintr);
198 #endif
199 }
onintr()
Signal handler callback.
Definition: main.c:172

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

syntax_error ( int  st_lineno,
char *  st_line,
char *  st_cptr 
)

Definition at line 77 of file error.c.

References done(), input_file_name, myname, and print_pos().

Referenced by advance_to_start(), copy_ident(), declare_start(), declare_types(), keyword(), mark_symbol(), read_declarations(), and read_grammar().

81 {
82  fprintf(stderr, "%s: e - line %d of \"%s\", syntax error\n",
83  myname, st_lineno, input_file_name);
84  print_pos(st_line, st_cptr);
85  done(1);
86 }
char * input_file_name
Definition: main.c:21
done(int k)
Shutdown function.
Definition: main.c:156
print_pos(char *st_line, char *st_cptr)
Definition: error.c:50
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

terminal_lhs ( int  s_lineno)

Definition at line 235 of file error.c.

References done(), input_file_name, and myname.

Referenced by start_rule().

237 {
238  fprintf(stderr, "%s: e - line %d of \"%s\", a token appears on the lhs \
239 of a production\n", myname, s_lineno, input_file_name);
240  done(1);
241 }
char * input_file_name
Definition: main.c:21
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

terminal_start ( char *  s)

Definition at line 211 of file error.c.

References done(), input_file_name, lineno, and myname.

Referenced by advance_to_start(), and declare_start().

213 {
214  fprintf(stderr, "%s: e - line %d of \"%s\", the start symbol %s is a \
215 token\n", myname, lineno, input_file_name, s);
216  done(1);
217 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

tokenized_start ( char *  s)

Definition at line 178 of file error.c.

References done(), input_file_name, lineno, and myname.

Referenced by declare_tokens().

180 {
181  fprintf(stderr, "%s: e - line %d of \"%s\", the start symbol %s cannot be \
182 declared to be a token\n", myname, lineno, input_file_name, s);
183  done(1);
184 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

undefined_goal ( char *  s)

Definition at line 318 of file error.c.

References done(), and myname.

Referenced by check_symbols().

320 {
321  fprintf(stderr, "%s: e - the start symbol %s is undefined\n", myname, s);
322  done(1);
323 }
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

undefined_symbol_warning ( char *  s)

Definition at line 326 of file error.c.

References myname.

Referenced by check_symbols().

328 {
329  fprintf(stderr, "%s: w - the symbol %s is undefined\n", myname, s);
330 }
char * myname
Definition: main.c:12

+ Here is the caller graph for this function:

unexpected_EOF ( )

Definition at line 42 of file error.c.

References done(), input_file_name, lineno, and myname.

Referenced by advance_to_start(), copy_ident(), declare_start(), declare_tokens(), declare_types(), get_tag(), and read_declarations().

43 {
44  fprintf(stderr, "%s: e - line %d of \"%s\", unexpected end-of-file\n",
46  done(1);
47 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

unknown_rhs ( int  i)

Definition at line 302 of file error.c.

References done(), input_file_name, lineno, and myname.

Referenced by copy_action().

304 {
305  fprintf(stderr, "%s: e - line %d of \"%s\", $%d is untyped\n",
307  done(1);
308 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

unterminated_action ( int  a_lineno,
char *  a_line,
char *  a_cptr 
)

Definition at line 251 of file error.c.

References done(), input_file_name, myname, and print_pos().

Referenced by copy_action().

255 {
256  fprintf(stderr, "%s: e - line %d of \"%s\", unterminated action\n",
257  myname, a_lineno, input_file_name);
258  print_pos(a_line, a_cptr);
259  done(1);
260 }
char * input_file_name
Definition: main.c:21
done(int k)
Shutdown function.
Definition: main.c:156
print_pos(char *st_line, char *st_cptr)
Definition: error.c:50
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

unterminated_comment ( int  c_lineno,
char *  c_line,
char *  c_cptr 
)

Definition at line 89 of file error.c.

References done(), input_file_name, myname, and print_pos().

Referenced by copy_action(), copy_text(), copy_union(), and skip_comment().

93 {
94  fprintf(stderr, "%s: e - line %d of \"%s\", unmatched /*\n",
95  myname, c_lineno, input_file_name);
96  print_pos(c_line, c_cptr);
97  done(1);
98 }
char * input_file_name
Definition: main.c:21
done(int k)
Shutdown function.
Definition: main.c:156
print_pos(char *st_line, char *st_cptr)
Definition: error.c:50
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

unterminated_string ( int  s_lineno,
char *  s_line,
char *  s_cptr 
)

Definition at line 101 of file error.c.

References done(), input_file_name, myname, and print_pos().

Referenced by copy_action(), copy_text(), copy_union(), and get_literal().

105 {
106  fprintf(stderr, "%s: e - line %d of \"%s\", unterminated string\n",
107  myname, s_lineno, input_file_name);
108  print_pos(s_line, s_cptr);
109  done(1);
110 }
char * input_file_name
Definition: main.c:21
done(int k)
Shutdown function.
Definition: main.c:156
print_pos(char *st_line, char *st_cptr)
Definition: error.c:50
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

unterminated_text ( int  t_lineno,
char *  t_line,
char *  t_cptr 
)

Definition at line 113 of file error.c.

References done(), input_file_name, myname, and print_pos().

Referenced by copy_text().

117 {
118  fprintf(stderr, "%s: e - line %d of \"%s\", unmatched %%{\n",
119  myname, t_lineno, input_file_name);
120  print_pos(t_line, t_cptr);
121  done(1);
122 }
char * input_file_name
Definition: main.c:21
done(int k)
Shutdown function.
Definition: main.c:156
print_pos(char *st_line, char *st_cptr)
Definition: error.c:50
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

unterminated_union ( int  u_lineno,
char *  u_line,
char *  u_cptr 
)

Definition at line 125 of file error.c.

References done(), input_file_name, myname, and print_pos().

Referenced by copy_union().

129 {
130  fprintf(stderr, "%s: e - line %d of \"%s\", unterminated %%union \
131 declaration\n", myname, u_lineno, input_file_name);
132  print_pos(u_line, u_cptr);
133  done(1);
134 }
char * input_file_name
Definition: main.c:21
done(int k)
Shutdown function.
Definition: main.c:156
print_pos(char *st_line, char *st_cptr)
Definition: error.c:50
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

untyped_lhs ( )

Definition at line 284 of file error.c.

References done(), input_file_name, lineno, and myname.

Referenced by copy_action().

285 {
286  fprintf(stderr, "%s: e - line %d of \"%s\", $$ is untyped\n",
288  done(1);
289 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

untyped_rhs ( int  i,
char *  s 
)

Definition at line 292 of file error.c.

References done(), input_file_name, lineno, and myname.

Referenced by copy_action().

295 {
296  fprintf(stderr, "%s: e - line %d of \"%s\", $%d (%s) is untyped\n",
297  myname, lineno, input_file_name, i, s);
298  done(1);
299 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

used_reserved ( char *  s)

Definition at line 169 of file error.c.

References done(), input_file_name, lineno, and myname.

Referenced by get_name().

171 {
172  fprintf(stderr, "%s: e - line %d of \"%s\", illegal use of reserved symbol \
173 %s\n", myname, lineno, input_file_name, s);
174  done(1);
175 }
char * input_file_name
Definition: main.c:21
int lineno
Definition: main.c:15
done(int k)
Shutdown function.
Definition: main.c:156
char * myname
Definition: main.c:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function: