Commit | Line | Data |
---|---|---|
5bd13011 BJ |
1 | .if \n(xx .bp |
2 | .if !\n(xx \{\ | |
3 | .so tmac.p \} | |
4 | .if n 'ND | |
5 | .nr H1 2 | |
6 | .NH | |
7 | Error diagnostics | |
8 | .PP | |
9 | This section of the | |
10 | .UM | |
11 | discusses the error diagnostics of the programs | |
12 | .PI | |
13 | and | |
14 | .X . | |
15 | .I Pix | |
16 | is a simple but useful program which invokes | |
17 | .PI | |
18 | and | |
19 | .X | |
20 | to do all the real processing. | |
21 | See its manual section | |
22 | .IX | |
23 | (VI) | |
24 | and section 5.2 below for more details. | |
25 | .NH 2 | |
26 | Translator syntax errors | |
27 | .PP | |
28 | A few comments on the general nature of the syntax errors usually | |
29 | made by Pascal programmers | |
30 | and the recovery mechanisms of the current translator may help in using | |
31 | the system. | |
32 | .SH | |
33 | Illegal characters | |
34 | .PP | |
35 | Characters such as `$', `!', and `@' are not part of the language Pascal. | |
36 | If they are found in the source program, | |
37 | and are not part of a constant string, a constant character, or a comment, | |
38 | they are considered to be | |
39 | `illegal characters'. | |
40 | This can happen if you leave off an opening string quote `\(aa'. | |
41 | Note that the character `"', although used in English to quote strings, | |
42 | is not used to quote strings in Pascal. | |
43 | Most non-printing characters in your input are also illegal except | |
44 | in character constants and character strings. | |
45 | Except for the tab and form feed characters, | |
46 | which are used to ease formatting of the program, | |
47 | non-printing characters in the input file print as the character `?' | |
48 | so that they will show in your listing. | |
49 | .SH | |
50 | String errors | |
51 | .PP | |
52 | There is no character string of length 0 in Pascal. | |
53 | Consequently the input `\(aa\(aa' is not acceptable. | |
54 | Similarly, encountering an end-of-line after an opening string quote `\(aa' | |
55 | without encountering the matching closing quote yields the diagnostic | |
56 | ``Unmatched \(aa for string''. | |
57 | It is permissible to use the character `#' | |
58 | instead of `\'' | |
59 | to delimit character and constant strings for portability reasons. | |
60 | For this reason, a spuriously placed `#' sometimes causes the diagnostic | |
61 | about unbalanced quotes. | |
62 | Similarly, a `#' in column one is used when preparing programs which are to | |
63 | be kept in multiple files. | |
64 | See section 5.9 for details. | |
65 | .SH | |
66 | Comments in a comment, non-terminated comments | |
67 | .PP | |
68 | As we saw above, these errors are usually caused by leaving off a comment | |
69 | delimiter. | |
70 | You can convert parts of your program to comments | |
71 | without generating this diagnostic | |
72 | since there are two different kinds of comments \- those delimited by | |
73 | `{' and `}', and those delimited by `(*' and `*)'. | |
74 | Thus consider: | |
75 | .LS | |
76 | { This is a comment enclosing a piece of program | |
77 | a := functioncall; (* comment within comment *) | |
78 | procedurecall; | |
79 | lhs := rhs; (* another comment *) | |
80 | } | |
81 | .LE | |
82 | .PP | |
83 | By using one kind of comment exclusively in your program you can use | |
84 | the other delimiters when you need to | |
85 | ``comment out'' | |
86 | parts of your program\*(dg. | |
87 | .FS | |
88 | \*(dgIf you wish to transport your program, | |
89 | especially to the 6000-3.4 implementation, | |
90 | you should use the character sequence `(*' to delimit comments. | |
91 | For transportation over the | |
92 | .I rcslink | |
93 | to Pascal 6000-3.4, the character `#' should be used to delimit characters | |
94 | and constant strings. | |
95 | .FE | |
96 | In this way you will also allow the translator to help by detecting | |
97 | statements accidentally placed within comments. | |
98 | .PP | |
99 | If a comment does not terminate before the end of the input file, | |
100 | the translator will point to the beginning of the comment, | |
101 | indicating that the comment is not terminated. | |
102 | In this case processing will terminate immediately. | |
103 | See the discussion of ``QUIT'' below. | |
104 | .SH | |
105 | Digits in numbers | |
106 | .PP | |
107 | This part of the language is a minor nuisance. | |
108 | Pascal requires digits in real numbers both before and after the decimal | |
109 | point. | |
110 | Thus the following statements, which look quite reasonable to | |
111 | .SM | |
112 | FORTRAN | |
113 | .NL | |
114 | users, generate diagnostics in Pascal: | |
115 | .LS .ID | |
116 | .so digitsout | |
117 | .LE | |
118 | These same constructs are also illegal as input to the Pascal interpreter | |
119 | .I px . | |
120 | .SH | |
121 | Replacements, insertions, and deletions | |
122 | .PP | |
123 | When a syntax error is encountered in the input text, | |
124 | the parser invokes an error recovery procedure. | |
125 | This procedure examines the input text immediately after the point | |
126 | of error and considers a set of simple corrections to see whether they | |
127 | will allow the analysis to continue. | |
128 | These corrections involve replacing an input token with a different | |
129 | token, | |
130 | inserting a token, | |
131 | or replacing an input token with a different token. | |
132 | Most of these changes will not cause fatal syntax errors. | |
133 | The exception is the insertion of or replacement with a symbol | |
134 | such as an identifier or a number; | |
135 | in this case the recovery makes no attempt to determine | |
136 | .I which | |
137 | identifier or | |
138 | .I what | |
139 | number should be inserted, | |
140 | hence these are considered fatal syntax errors. | |
141 | .PP | |
142 | Consider the following example. | |
143 | .LS | |
144 | % \*bpix -l synerr.p\fR | |
145 | .tr -- | |
146 | .so synerrout | |
147 | % | |
148 | .LE | |
149 | The only surprise here may be that Pascal does not have an exponentiation | |
150 | operator, hence the complaint about `**'. | |
151 | This error illustrates that, if you assume that the language has a feature | |
152 | which it does not, the translator diagnostic may not indicate this, | |
153 | as the translator is unlikely to recognize the construct you supply. | |
154 | .SH | |
155 | Undefined or improper identifiers | |
156 | .PP | |
157 | If an identifier is encountered in the input but is undefined, | |
158 | the error recovery will replace it with an identifier of the | |
159 | appropriate class. | |
160 | Further references to this identifier will be summarized at the | |
161 | end of the containing | |
162 | .B procedure | |
163 | or | |
164 | .B function | |
165 | or at the end of the | |
166 | .B program | |
167 | if the reference occurred in the main program. | |
168 | Similarly, | |
169 | if an identifier is used in an inappropriate way, | |
170 | e.g. if a | |
171 | .B type | |
172 | identifier is used in an assignment statement, | |
173 | or if a simple variable | |
174 | is used where a | |
175 | .B record | |
176 | variable is required, | |
177 | a diagnostic will be produced and an identifier of the appropriate | |
178 | type inserted. | |
179 | Further incorrect references to this identifier will be flagged only | |
180 | if they involve incorrect use in a different way, | |
181 | with all incorrect uses being summarized in the same way as undefined | |
182 | variable uses are. | |
183 | .SH | |
184 | Expected symbols, malformed constructs | |
185 | .PP | |
186 | If none of the above mentioned corrections appear reasonable, the | |
187 | error recovery will examine the input | |
188 | to the left of the point of error to see if there is only one symbol | |
189 | which can follow this input. | |
190 | If this is the case, the recovery will print a diagnostic which | |
191 | indicates that the given symbol was `Expected'. | |
192 | .PP | |
193 | In cases where none of these corrections resolve the problems | |
194 | in the input, | |
195 | the recovery may issue a diagnostic that indicates that the | |
196 | input is ``malformed''. | |
197 | If necessary, the translator may then skip forward in the input to | |
198 | a place where analysis can continue. | |
199 | This process may cause some errors in the text to be missed. | |
200 | .PP | |
201 | Consider the following example: | |
202 | .LS .ID | |
203 | % \*bpix -l synerr2.p\fR | |
204 | .so synerr2out | |
205 | % | |
206 | .LE | |
207 | Here we misspelled | |
208 | .I input | |
209 | and gave a | |
210 | .SM FORTRAN | |
211 | style variable declaration | |
212 | which the translator diagnosed as a `Malformed declaration'. | |
213 | When, on line 6, we used `(' and `)' for subscripting | |
214 | (as in | |
215 | .SM FORTRAN ) | |
216 | rather than the `[' and `]' which are used in Pascal, | |
217 | the translator noted that | |
218 | .I a | |
219 | was not defined as a | |
220 | .B procedure . | |
221 | This occurred because | |
222 | .B procedure | |
223 | and | |
224 | .B function | |
225 | argument lists are delimited by parentheses in Pascal. | |
226 | As it is not permissible to assign to procedure calls the translator | |
227 | diagnosed a malformed statement at the point of assignment. | |
228 | .SH | |
229 | Expected and unexpected end-of-file, ``QUIT'' | |
230 | .PP | |
231 | If the translator finds a complete program, but there is more non-comment text | |
232 | in the input file, then it will indicate that an end-of-file was expected. | |
233 | This situation may occur after a bracketing error, or if too many | |
234 | .B end s | |
235 | are present in the input. | |
236 | The message may appear | |
237 | after the recovery says that it | |
238 | ``Expected \`.\'\|'' | |
239 | since `.' is the symbol that terminates a program. | |
240 | .PP | |
241 | If severe errors in the input prohibit further processing | |
242 | the translator may produce a diagnostic followed by ``QUIT''. | |
243 | One example of this was given above \- | |
244 | a non-terminated comment; | |
245 | another example is a line which is longer than 160 | |
246 | characters. | |
247 | Consider also the following example. | |
248 | .LS .ID | |
249 | % \*bpix -l mism.p\fR | |
250 | .so mismout | |
251 | % | |
252 | .LE | |
253 | .NH 2 | |
254 | Translator semantic errors | |
255 | .PP | |
256 | The extremely large number of semantic diagnostic messages which the translator | |
257 | produces make it unreasonable to discuss each message or group of messages | |
258 | in detail. | |
259 | The messages are, however, very informative. | |
260 | We will here explain the typical formats and the terminology used in the error | |
261 | messages so that you will be able to make sense out of them. | |
262 | In any case in which a diagnostic is not completely comprehensible you can | |
263 | refer to the | |
264 | .I "User Manual" | |
265 | by Jensen and Wirth for examples. | |
266 | .SH | |
267 | Format of the error diagnostics | |
268 | .PP | |
269 | As we saw in the example program above, the error diagnostics from | |
270 | the Pascal translator include the number of a line in the text of the program | |
271 | as well as the text of the error message. | |
272 | While this number is most often the line where the error occurred, it | |
273 | is occasionally the number of a line containing a bracketing keyword | |
274 | like | |
275 | .B end | |
276 | or | |
277 | .B until . | |
278 | In this case, the diagnostic may refer to the previous statement. | |
279 | This occurs because of the method the translator uses for sampling line | |
280 | numbers. | |
281 | The absence of a trailing `;' in the previous statement causes the line | |
282 | number corresponding to the | |
283 | .B end | |
284 | or | |
285 | .B until . | |
286 | to become associated with the statement. | |
287 | As Pascal is a free-format language, the line number associations | |
288 | can only be approximate and may seem arbitrary to some users. | |
289 | This is the only notable exception, however, to reasonable associations. | |
290 | .bp | |
291 | .SH | |
292 | Incompatible types | |
293 | .PP | |
294 | Since Pascal is a strongly typed language, many semantic errors manifest | |
295 | themselves as type errors. | |
296 | These are called `type clashes' by the translator. | |
297 | The types allowed for various operators in the language are summarized on page | |
298 | 108 of the | |
299 | Jensen-Wirth | |
300 | .I "User Manual" . | |
301 | It is important to know that the Pascal translator, in its diagnostics, | |
302 | distinguishes between the following type `classes': | |
303 | .br | |
304 | .ne 8 | |
305 | .TS | |
306 | center; | |
307 | lew(10) le le le le. | |
308 | array Boolean char file integer | |
309 | pointer real record scalar string | |
310 | .TE | |
311 | These words are plugged into a great number of error messages. | |
312 | Thus, if you tried to assign an | |
313 | .I integer | |
314 | value to a | |
315 | .I char | |
316 | variable you would receive a diagnostic like the following: | |
317 | .LS | |
318 | .so clashout | |
319 | .LE | |
320 | In this case, one error produced a two line error message. | |
321 | If the same error occurs more than once, the same explanatory | |
322 | diagnostic will be given each time. | |
323 | .SH | |
324 | Scalar | |
325 | .PP | |
326 | The only class whose meaning is not self-explanatory is | |
327 | `scalar'. | |
328 | Scalar has a precise meaning in the | |
329 | Jensen-Wirth | |
330 | .I "User Manual" | |
331 | where, in fact, it refers to | |
332 | .I char , | |
333 | .I integer , | |
334 | .I real , | |
335 | and | |
336 | .I Boolean | |
337 | types as well as the enumerated types. | |
338 | For the purposes of the Pascal translator, | |
339 | scalar | |
340 | in an error message refers to a user-defined, enumerated | |
341 | type, such as | |
342 | .I ops | |
343 | in the example above or | |
344 | .I color | |
345 | in | |
346 | .LS | |
347 | \*btype\fP color = (red, green, blue) | |
348 | .LE | |
349 | For integers, the more explicit denotation | |
350 | .I integer | |
351 | is used. | |
352 | Although it would be correct, in the context of the | |
353 | .I "User Manual" | |
354 | to refer to an integer variable as a | |
355 | .I scalar | |
356 | variable | |
357 | .PI | |
358 | prefers the more specific identification. | |
359 | .SH | |
360 | Function and procedure type errors | |
361 | .PP | |
362 | For built-in procedures and functions, two kinds of errors occur. | |
363 | If the routines are called with the wrong number of arguments a message similar to: | |
364 | .LS | |
365 | .so sinout1 | |
366 | .LE | |
367 | is given. | |
368 | If the type of the argument is wrong, a message like | |
369 | .LS | |
370 | .so sinout2 | |
371 | .LE | |
372 | is produced. | |
373 | A few functions and procedures implemented in Pascal 6000-3.4 are | |
374 | diagnosed as unimplemented in | |
375 | .UX | |
376 | Pascal, notably those related to | |
377 | .B segmented | |
378 | files. | |
379 | .SH | |
380 | Can't read and write scalars, etc. | |
381 | .PP | |
382 | The messages which state that scalar (user-defined) types | |
383 | cannot be written to and from files are often mysterious. | |
384 | It is in fact the case that if you define | |
385 | .LS | |
386 | \*btype\fP color = (red, green, blue) | |
387 | .LE | |
388 | the translator does not associate these constants with the strings | |
389 | `red', `green', and `blue' in any way. | |
390 | If you wish such an association to be made, you will have to write a routine | |
391 | to make it. | |
392 | Note, in particular, that you can only read characters, integers and real | |
393 | numbers from text files. | |
394 | You cannot read strings or Booleans. | |
395 | It is possible to make a | |
396 | .LS | |
397 | \*bfile of\fP color | |
398 | .LE | |
399 | but the representation is binary rather than string. | |
400 | .SH | |
401 | .bp | |
402 | Expression diagnostics | |
403 | .PP | |
404 | The diagnostics for semantically ill-formed expressions are very explicit. | |
405 | Consider this sample translation: | |
406 | .LS .ID | |
407 | % \*bpi -l expr.p\fP | |
408 | .so exprout | |
409 | % | |
410 | .LE | |
411 | This example is admittedly far-fetched, but illustrates that the error | |
412 | messages are sufficiently clear to allow easy determination of the | |
413 | problem in the expressions. | |
414 | .SH | |
415 | Type equivalence | |
416 | .PP | |
417 | Several diagnostics produced by the Pascal translator complain about | |
418 | `non-equivalent types'. | |
419 | In general, | |
420 | .UX | |
421 | Pascal considers variables to have the same type only if they were | |
422 | declared with the same constructed type or with the same type identifier. | |
423 | Thus, the variables | |
424 | .I x | |
425 | and | |
426 | .I y | |
427 | declared as | |
428 | .LS | |
429 | \*bvar\fP | |
430 | x: ^ integer; | |
431 | y: ^ integer; | |
432 | .LE | |
433 | do not have the same type. | |
434 | The assignment | |
435 | .LS | |
436 | x := y | |
437 | .LE | |
438 | thus produces the diagnostics: | |
439 | .LS | |
440 | .so typequout | |
441 | .LE | |
442 | Thus it is always necessary to declare a type such as | |
443 | .LS | |
444 | \*btype\fP intptr = ^ integer; | |
445 | .LE | |
446 | and use it to declare | |
447 | .LS | |
448 | \*bvar\fP x: intptr; y: intptr; | |
449 | .LE | |
450 | Note that if we had initially declared | |
451 | .LS | |
452 | \*bvar\fP x, y: ^ integer; | |
453 | .LE | |
454 | then the assignment statement would have worked. | |
455 | The statement | |
456 | .LS | |
457 | x^ := y^ | |
458 | .LE | |
459 | is allowed in either case. | |
460 | Since the parameter to a | |
461 | .B procedure | |
462 | or | |
463 | .B function | |
464 | must be declared with a | |
465 | type identifier rather than a constructed type, | |
466 | it is always necessary, in practice, | |
467 | to declare any type which will be used in this way. | |
468 | .SH | |
469 | Unreachable statements | |
470 | .PP | |
471 | .UX | |
472 | Pascal flags unreachable statements. | |
473 | Such statements usually correspond to errors in the program logic. | |
474 | Note that a statement is considered to be reachable | |
475 | if there is a potential path of control, | |
476 | even if it can never be taken. | |
477 | Thus, no diagnostic is produced for the statement: | |
478 | .LS | |
479 | \*bif\fP false \*bthen\fP | |
480 | writeln('impossible!') | |
481 | .LE | |
482 | .SH | |
483 | Goto's into structured statements | |
484 | .PP | |
485 | The translator detects and complains about | |
486 | .B goto | |
487 | statements which transfer control into structured statements (\c | |
488 | .B for , | |
489 | .B while , | |
490 | etc.) | |
491 | It does not allow such jumps, nor does it allow branching from the | |
492 | .B then | |
493 | part of an | |
494 | .B if | |
495 | statement into the | |
496 | .B else | |
497 | part. | |
498 | Such checks are made only within the body of a single procedure or | |
499 | function. | |
500 | .SH | |
501 | Unused variables, never set variables | |
502 | .PP | |
503 | Although | |
504 | .UX | |
505 | Pascal always clears variables to 0 at | |
506 | .B procedure | |
507 | and | |
508 | .B function | |
509 | entry, it is | |
510 | .B not | |
511 | good programming practice to rely on this initialization. | |
512 | To discourage this practice, and to help detect errors in program logic, | |
513 | .PI | |
514 | flags as a `w' warning error: | |
515 | .IP | |
516 | .RS | |
517 | .HP 1) | |
518 | Use of a variable which is never assigned a value. | |
519 | .IP 2) | |
520 | A variable which is declared but never used, distinguishing | |
521 | between those variables for which values are computed but which are never | |
522 | used, and those completely unused. | |
523 | .RE | |
524 | .LP | |
525 | In fact, these diagnostics are applied to all declared items. | |
526 | Thus a | |
527 | .B constant | |
528 | or a | |
529 | .B procedure | |
530 | which is declared but never used is flagged. | |
531 | The | |
532 | .B w | |
533 | option of | |
534 | .PI | |
535 | may be used to suppress these warnings; | |
536 | see sections 5.1 and 5.2. | |
537 | .NH 2 | |
538 | Translator panics, i/o errors | |
539 | .SH | |
540 | Panics | |
541 | .PP | |
542 | One class of error which rarely occurs, but which causes termination | |
543 | of all processing when it does is a panic. | |
544 | A panic indicates a translator-detected internal inconsistency. | |
545 | A typical panic message is: | |
546 | .LS | |
547 | snark (rvalue) line=110 yyline=109 | |
548 | Snark in pi | |
549 | .LE | |
550 | If you receive such a message, the translation will be quickly and perhaps | |
551 | ungracefully terminated. | |
552 | You should contact a teaching assistant or a member of the system staff, | |
553 | after saving a copy of your program for later inspection. | |
554 | If you were making changes to an existing program when the problem | |
555 | occurred, you may | |
556 | be able to work around the problem by ascertaining which change caused the | |
557 | .I snark | |
558 | and making a different change or correcting an error in the program. | |
559 | You should report the problem in any case. | |
560 | Pascal system bugs cannot be fixed unless they are reported. | |
561 | .SH | |
562 | Out of memory | |
563 | .PP | |
564 | The only other error which will abort translation when no errors are | |
565 | detected is running out of memory. | |
566 | All tables in the translator, with the exception of the parse stack, | |
567 | are dynamically allocated, and can grow to take up the full available | |
568 | process space of 64000 bytes. | |
569 | Generally, the size of the largest translatable program is directly related to | |
570 | .B procedure | |
571 | and | |
572 | .B function | |
573 | size. | |
574 | A number of non-trivial Pascal programs, including | |
575 | some with more than 2000 lines and 2500 statements | |
576 | have been translated and interpreted using | |
577 | .UX | |
578 | Pascal. | |
579 | Notable among these are the Pascal-S | |
580 | interpreter, | |
581 | a large set of programs for automated generation of | |
582 | code generators, | |
583 | and a general context-free parsing program which has been used to | |
584 | parse sentences with a grammar for a superset of English. | |
585 | .PP | |
586 | If you receive an out of space message from the translator | |
587 | during translation of a large | |
588 | .B procedure | |
589 | or | |
590 | .B function | |
591 | or one containing a large number of string constants | |
592 | you may yet be able | |
593 | to translate your program if you break this one | |
594 | .B procedure | |
595 | or | |
596 | .B function | |
597 | into several routines. | |
598 | .SH | |
599 | I/O errors | |
600 | .PP | |
601 | Other errors which you may encounter when running | |
602 | .PI | |
603 | relate to input-output. | |
604 | If | |
605 | .PI | |
606 | cannot open the file you specify, | |
607 | or if the file is empty, | |
608 | you will be so informed. | |
609 | If your disk space quota\*(dg is exceeded while | |
610 | .PI | |
611 | is creating the file | |
612 | .I obj , | |
613 | or if the system runs out of disk space you will be notified; | |
614 | in this case you should remove unneeded files. | |
615 | .FS | |
616 | \*(dgDisk quotas are also a modification at Berkeley | |
617 | and may not exist at your installation. | |
618 | .FE | |
619 | .NH 2 | |
620 | Run-time errors | |
621 | .PP | |
622 | We saw, in our second example, a run-time error. | |
623 | We here give the general description of run-time errors. | |
624 | The more unusual interpreter error messages are explained | |
625 | briefly in the manual section for | |
626 | .I px | |
627 | (VI). | |
628 | .SH | |
629 | Start-up errors | |
630 | .PP | |
631 | These errors occur when the object file to be executed is not available | |
632 | or appropriate. | |
633 | Typical errors here are caused by the specified object file not existing, | |
634 | not being a Pascal object, or being inaccessible to the user. | |
635 | .SH | |
636 | Program execution errors | |
637 | .PP | |
638 | These errors occur when the program interacts with the Pascal runtime | |
639 | environment in an inappropriate way. | |
640 | Typical errors are values or subscripts out of range, | |
641 | bad arguments to built-in functions, | |
642 | exceeding the statement limit because of an infinite loop, | |
643 | or running out of memory\*(dd. | |
644 | .FS | |
645 | \*(ddThe checks for running out of memory are not foolproof and there | |
646 | is a chance that the interpreter will fault, producing a core image | |
647 | when it runs out of memory. | |
648 | This situation occurs very rarely. | |
649 | .FE | |
650 | The interpreter will produce a backtrace after the error occurs, | |
651 | showing all the active routine calls, | |
652 | unless the | |
653 | .B p | |
654 | option was disabled when the program was translated. | |
655 | Unfortunately, no variable values are given and no way of extracting them | |
656 | is available. | |
657 | .PP | |
658 | As an example of such an error, assume that we have accidentally | |
659 | declared the constant | |
660 | .I n1 | |
661 | to be 6, instead of 7 | |
662 | on line 2 of the program primes as given in section 2.6 above. | |
663 | If we run this program we get the following response. | |
664 | .LS .ID | |
665 | % \*bpix primes.p\fP | |
666 | .so primeout3 | |
667 | % | |
668 | .LE | |
669 | .PP | |
670 | Here the interpreter indicates that the program terminated | |
671 | abnormally due to a subscript out of range near line 14, | |
672 | which is eight lines into the body of the program primes. | |
673 | .SH | |
674 | Interrupts | |
675 | .PP | |
676 | If the program is interrupted while executing | |
677 | and the | |
678 | .B p | |
679 | option was not specified, | |
680 | then a backtrace will be printed.\*(dg | |
681 | .FS | |
682 | \*(dgOccasionally, the Pascal system will be in an inconsistent | |
683 | state when this occurs, | |
684 | e.g. when an interrupt terminates a | |
685 | .B procedure | |
686 | or | |
687 | .B function | |
688 | entry or exit. | |
689 | In this case, the backtrace will only contain the current line. | |
690 | A reverse call order list of procedures will not be given. | |
691 | .FE | |
692 | The file | |
693 | .I pmon.out | |
694 | of profile information will be written if the program was translated | |
695 | with the | |
696 | .B z | |
697 | option enabled to | |
698 | .PI | |
699 | or | |
700 | .IX . | |
701 | .SH | |
702 | I/O interaction errors | |
703 | .PP | |
704 | The final class of interpreter errors results from inappropriate | |
705 | interactions with files, including the user's terminal. | |
706 | Included here are bad formats for integer and real numbers (such as | |
707 | no digits after the decimal point) when reading. | |
708 | .SH | |
709 | Panics | |
710 | .PP | |
711 | A small number of panics are possible with | |
712 | .I px . | |
713 | These should be reported to a teaching assistant or to the system | |
714 | staff if they occur. |