home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / icon / dos / src / icont / err.c next >
C/C++ Source or Header  |  1992-02-10  |  9KB  |  287 lines

  1. /*
  2.  * err.c -- routines for producing error messages.
  3.  */
  4.  
  5. #include "../h/gsupport.h"
  6. #include "tlex.h"
  7. #include "trans.h"
  8. #include "tree.h"
  9. #include "token.h"
  10. #include "tproto.h"
  11.  
  12. /*
  13.  * Prototype.
  14.  */
  15.  
  16. hidden    char    *mapterm    Params((int typ,struct node *val));
  17.  
  18. extern int tfatals;
  19.  
  20. static struct errmsg {
  21.    int    e_state;        /* parser state number */
  22.    char *e_mesg;        /* message text */
  23.    } errtab[] = {
  24.  
  25.  
  26. /*
  27.  * Initialization of table that maps error states to messages.
  28.  */
  29.  
  30.      0, "global, record, or procedure declaration expected",
  31.      1, "end of file expected",
  32.      2, "global, record, or procedure declaration expected",
  33.     12, "missing semicolon",
  34.     14, "link list expected",
  35.     15, "invocable list expected",
  36.     17, "global, record, or procedure declaration expected",
  37.     18, "missing record name",
  38.     21, "invalid global declaration",
  39.     30, "missing procedure name",
  40.     32, "missing field list in record declaration",
  41.     34, "missing end",
  42.     35, "missing semicolon or operator",
  43.     50, "invalid argument for unary operator",
  44.     51, "invalid argument for unary operator",
  45.     52, "invalid argument for unary operator",
  46.     53, "invalid argument for unary operator",
  47.     54, "invalid argument for unary operator",
  48.     55, "invalid argument for unary operator",
  49.     56, "invalid argument for unary operator",
  50.     57, "invalid argument for unary operator",
  51.     58, "invalid argument for unary operator",
  52.     59, "invalid argument for unary operator",
  53.     60, "invalid argument for unary operator",
  54.     61, "invalid argument for unary operator",
  55.     62, "invalid argument for unary operator",
  56.     63, "invalid argument for unary operator",
  57.     64, "invalid argument for unary operator",
  58.     65, "invalid argument for unary operator",
  59.     66, "invalid argument for unary operator",
  60.     67, "invalid argument for unary operator",
  61.     68, "invalid argument for unary operator",
  62.     69, "invalid argument for unary operator",
  63.     70, "invalid argument for unary operator",
  64.     71, "invalid argument for unary operator",
  65.     72, "invalid argument for unary operator",
  66.     73, "invalid argument for unary operator",
  67.     83, "invalid create expression",
  68.     86, "invalid break expression",
  69.     87, "invalid expression list",
  70.     88, "invalid compound expression",
  71.     89, "invalid expression list",
  72.     90, "invalid keyword construction",
  73.     96, "invalid return expression",
  74.     97, "invalid suspend expression",
  75.     98, "invalid if control expression",
  76.     99, "invalid case control expression",
  77.    100, "invalid while control expression",
  78.    101, "invalid until control expression",
  79.    102, "invalid every control expression",
  80.    103, "invalid repeat expression",
  81.    106, "missing link file name",
  82.    107, "missing operation name",
  83.    108, "missing number of arguments",
  84.    109, "missing parameter list in procedure declaration",
  85.    111, "invalid procedure body",
  86.    112, "invalid local declaration",
  87.    113, "invalid initial expression",
  88.    117, "invalid expression",
  89.    118, "invalid argument",
  90.    119, "invalid argument",
  91.    120, "invalid argument in assignment",
  92.    121, "invalid argument in assignment",
  93.    122, "invalid argument in assignment",
  94.    123, "invalid argument in assignment",
  95.    124, "invalid argument in augmented assignment",
  96.    125, "invalid argument in augmented assignment",
  97.    126, "invalid argument in augmented assignment",
  98.    127, "invalid argument in augmented assignment",
  99.    128, "invalid argument in augmented assignment",
  100.    129, "invalid argument in augmented assignment",
  101.    130, "invalid argument in augmented assignment",
  102.    131, "invalid argument in augmented assignment",
  103.    132, "invalid argument in augmented assignment",
  104.    133, "invalid argument in augmented assignment",
  105.    134, "invalid argument in augmented assignment",
  106.    135, "invalid argument in augmented assignment",
  107.    136, "invalid argument in augmented assignment",
  108.    137, "invalid argument in augmented assignment",
  109.    138, "invalid argument in augmented assignment",
  110.    139, "invalid argument in augmented assignment",
  111.    140, "invalid argument in augmented assignment",
  112.    141, "invalid argument in augmented assignment",
  113.    142, "invalid argument in augmented assignment",
  114.    143, "invalid argument in augmented assignment",
  115.    144, "invalid argument in augmented assignment",
  116.    145, "invalid argument in augmented assignment",
  117.    146, "invalid argument in augmented assignment",
  118.    147, "invalid argument in augmented assignment",
  119.    148, "invalid argument in augmented assignment",
  120.    149, "invalid argument in augmented assignment",
  121.    150, "invalid argument in augmented assignment",
  122.    151, "invalid argument in augmented assignment",
  123.    152, "invalid to clause",
  124.    153, "invalid argument in alternation",
  125.    154, "invalid argument",
  126.    155, "invalid argument",
  127.    156, "invalid argument",
  128.    157, "invalid argument",
  129.    158, "invalid argument",
  130.    159, "invalid argument",
  131.    160, "invalid argument",
  132.    161, "invalid argument",
  133.    162, "invalid argument",
  134.    163, "invalid argument",
  135.    164, "invalid argument",
  136.    165, "invalid argument",
  137.    166, "invalid argument",
  138.    167, "invalid argument",
  139.    168, "invalid argument",
  140.    169, "invalid argument",
  141.    170, "invalid argument",
  142.    171, "invalid argument",
  143.    172, "invalid argument",
  144.    173, "invalid argument",
  145.    174, "invalid argument",
  146.    175, "invalid argument",
  147.    176, "invalid argument",
  148.    177, "invalid argument",
  149.    178, "invalid argument",
  150.    179, "invalid argument",
  151.    180, "invalid argument",
  152.    181, "invalid argument",
  153.    182, "invalid subscript",
  154.    183, "invalid pdco list",
  155.    184, "invalid expression list",
  156.    185, "invalid field name",
  157.    212, "missing right parenthesis",
  158.    214, "missing right brace",
  159.    216, "missing right bracket",
  160.    222, "missing then",
  161.    223, "missing of",
  162.    228, "missing identifier",
  163.    233, "missing right parenthesis",
  164.    235, "missing end",
  165.    236, "invalid declaration",
  166.    237, "missing semicolon or operator",
  167.    303, "missing right bracket",
  168.    306, "missing right brace",
  169.    308, "missing right parenthesis",
  170.    311, "invalid expression list",
  171.    313, "invalid expression",
  172.    315, "invalid do clause",
  173.    316, "invalid then clause",
  174.    317, "missing left brace",
  175.    318, "invalid do clause",
  176.    319, "invalid do clause",
  177.    320, "invalid do clause",
  178.    322, "invalid paramater list",
  179.    328, "invalid by clause",
  180.    330, "invalid section",
  181.    335, "invalid pdco list",
  182.    341, "invalid case clause",
  183.    346, "missing right bracket",
  184.    348, "missing right bracket or ampersand",
  185.    350, "invalid else clause",
  186.    351, "missing right brace or semicolon",
  187.    353, "missing colon",
  188.    354, "missing colon or ampersand",
  189.    359, "invalid case clause",
  190.    360, "invalid default clause",
  191.    361, "invalid case clause",
  192.     -1,  "syntax error"
  193.    };
  194.  
  195. /*
  196.  * yyerror produces syntax error messages.  tok is the offending token
  197.  *  (yychar), lval is yylval, and state is the parser's state.
  198.  *
  199.  * errtab is searched for the state, if it is found, the associated
  200.  *  message is produced; if the state isn't found, "syntax error"
  201.  *  is produced.
  202.  */
  203. novalue yyerror(tok, lval, state)
  204. int tok, state;
  205. nodeptr lval;
  206.    {
  207.    register struct errmsg *p;
  208.    int line;
  209.  
  210.    if (lval == NULL)
  211.       line = 0;
  212.    else
  213.       line = Line(lval);
  214.  
  215.  
  216.    if (tok_loc.n_file)
  217.       fprintf(stderr, "File %s; ", tok_loc.n_file);
  218.    if (tok == EOFX)   /* special case end of file */
  219.       fprintf(stderr, "unexpected end of file\n");
  220.    else {
  221.       fprintf(stderr, "Line %d # ", line);
  222.       if (Col(lval))
  223.          fprintf(stderr, "\"%s\": ", mapterm(tok,lval));
  224.       for (p = errtab; p->e_state != state && p->e_state >= 0; p++) ;
  225.       fprintf(stderr, "%s\n", p->e_mesg);
  226.       }
  227.    tfatals++;
  228.    nocode++;
  229.    }
  230.  
  231. /*
  232.  * tfatal produces the translator error messages s1 and s2 (if nonnull).  The
  233.  *  location of the error is found in tok_loc.
  234.  */
  235. novalue tfatal(s1, s2)
  236. char *s1, *s2;
  237.    {
  238.  
  239.    if (tok_loc.n_file)
  240.       fprintf(stderr, "File %s; ", tok_loc.n_file);
  241.    fprintf(stderr, "Line %d # ", tok_loc.n_line);
  242.    if (s2)
  243.       fprintf(stderr, "\"%s\": ", s2);
  244.    fprintf(stderr, "%s\n", s1);
  245.  
  246.    tfatals++;
  247.    nocode++;
  248.    }
  249.  
  250. /*
  251.  * nfatal produces the error message s and associates it with source location
  252.  *  of node.
  253.  */
  254. novalue nfatal(n, s)
  255. nodeptr n;
  256. char *s;
  257.    {
  258.  
  259.    fprintf(stderr, "File %s; ", File(n));
  260.    fprintf(stderr, "Line %d # ", Line(n));
  261.    fprintf(stderr, "%s\n", s);
  262.  
  263.    tfatals++;
  264.    nocode++;
  265.    }
  266.  
  267. /*
  268.  * mapterm finds a printable string for the given token type
  269.  *  and value.
  270.  */
  271. static char *mapterm(typ,val)
  272. int typ;
  273. nodeptr val;
  274.    {
  275.    register struct toktab *t;
  276.    register int i;
  277.  
  278.    i = typ;
  279.    if (i == IDENT || i == INTLIT || i == REALLIT || i == STRINGLIT ||
  280.       i == CSETLIT)
  281.          return Str0(val);
  282.    for (t = toktab; t->t_type != i; t++)
  283.       if (t->t_type == 0)
  284.          return "???";
  285.    return (t->t_word);
  286.    }
  287.