diff options
Diffstat (limited to 'ipl/packs/ibpag2/iohno.icn')
-rw-r--r-- | ipl/packs/ibpag2/iohno.icn | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/ipl/packs/ibpag2/iohno.icn b/ipl/packs/ibpag2/iohno.icn new file mode 100644 index 0000000..dcf54d0 --- /dev/null +++ b/ipl/packs/ibpag2/iohno.icn @@ -0,0 +1,95 @@ +############################################################################ +# +# Name: iohno.icn +# +# Title: iohno (error handler, with hard-coded messages) +# +# Author: Richard L. Goerwitz +# +# Version: 1.20 +# +############################################################################ +# +# This file contains iohno(n, s) - an error handler taking two +# arguments: 1) an integer and 2) a string. The string (2) is an +# optional error message. The integer (1) is one of several +# hard-coded error numbers (see below). +# +############################################################################ +# +# Links: rewrap +# +############################################################################ + +# +# iohno: print error message s to stderr; abort with exit status n +# +procedure iohno(n, s) + + local i, msg + static errlist + initial { + errlist := [[100, "unspecified failure"], + + [2, "can't find iiparse.lib file"], + + [4, "unexpected EOF"], + [5, "unknown associativity value"], + + [11, "malformed right-hand side"], + [12, "unexpected RHS symbol type"], + + [21, "malformed left-hand side"], + + [30, "unknown or unimplemented % declaration"], + [31, "malformed token declaration"], + [32, "start symbol redefined"], + [33, "LHS symbol expected"], + [34, "colon missing"], + [35, "malformed RHS in rule declaration"], + [36, "undeclared character literal"], + [37, "illegal $integer reference"], + [38, "out-of-range $reference"], + [39, "unterminated brace { in action"], + [43, "bogus precedence"], + [44, "superfluous epsilon"], + [45, "superfluous %union declaration"], + [47, "empty or missing rules section"], + [48, "garbled declarations section"], + [49, "multiple characters within quotes"], + + [40, "same prec, different (or perhaps lacking) assoc"], + [41, "conflict between nonassociative rules"], + [42, "reduce -- reduce conflict"], + [46, "unresolvable shift/reduce conflict"], + + [50, "illegal conflict for nonassociative rules"], + [51, "reduce/reduce conflict"], + [52, "nonterminal useless and/or declared as a terminal"], + + [60, "malformed $insertion point in iiparse file"], + + [70, "bad action format"], + [71, "nonexistent rule number specified in old action"], + [72, "nonexistent rule number specified in new action"], + + [80, "conflict in goto table"], + + [90, "RHS nonterminal appears in no LHS"], + [91, "useless nonterminal"] + ] + } + + /n := 0 + every i := 1 to *errlist do + if errlist[i][1] = n then msg := errlist[i][2] + writes(&errout, "error ", n, " (", msg, ")") + if \s then { + write(&errout, ": ") + every write(&errout, "\t", rewrap(s) | rewrap()) + } + else write(&errout) + + exit(n) + +end |