Annotation of 43BSD/contrib/icon/tran/err.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Routines for producing error messages.
        !             3:  */
        !             4: 
        !             5: #include "itran.h"
        !             6: #include "token.h"
        !             7: #include "tree.h"
        !             8: #include "lex.h"
        !             9: 
        !            10: struct errmsg {
        !            11:    int e_state;                /* parser state number */
        !            12:    char *e_mesg;               /* message text */
        !            13:    } errtab[] = {
        !            14: #include "synerr.h"
        !            15:     -1,  "syntax error"
        !            16:    };
        !            17: 
        !            18: /*
        !            19:  * yyerror produces syntax error messages.  tok is the offending token
        !            20:  *  (yychar), lval is yylval, and state is the parser's state.
        !            21:  *
        !            22:  * errtab is searched for the state, if it is found, the associated
        !            23:  *  message is produced; if the state isn't found, "syntax error"
        !            24:  *  is produced.
        !            25:  */
        !            26: yyerror(tok, lval, state)
        !            27: int tok, state;
        !            28: nodeptr lval;
        !            29:    {
        !            30:    register struct errmsg *p;
        !            31:    char *mapterm();
        !            32: 
        !            33:    if (*filep)
        !            34:       fprintf(stderr, "%s, ", *filep);
        !            35:    if (tok == EOFX)   /* special case end of file */
        !            36:       fprintf(stderr, "unexpected end of file\n");
        !            37:    else {
        !            38:       fprintf(stderr, "line %d: ", LINE(lval));
        !            39:       if (COL(lval))
        !            40:          fprintf(stderr, "\"%s\": ", mapterm(tok,lval));
        !            41:       for (p = errtab; p->e_state != state && p->e_state >= 0; p++) ;
        !            42:       fprintf(stderr, "%s\n", p->e_mesg);
        !            43:       }
        !            44:    fatalerrs++;
        !            45:    nocode++;
        !            46:    }
        !            47: /*
        !            48:  * err produces the error messages s1 and s2 (if non-null).  The
        !            49:  *  current line number is found in tline.
        !            50:  */
        !            51: err(s1, s2)
        !            52: char *s1, *s2;
        !            53:    {
        !            54:    if (*filep)
        !            55:       fprintf(stderr, "%s, ", *filep);
        !            56:    fprintf(stderr, "line %d: ", tline);
        !            57:    if (s2)
        !            58:       fprintf(stderr, "\"%s\": ", s2);
        !            59:    fprintf(stderr, "%s\n", s1);
        !            60:    fatalerrs++;
        !            61:    nocode++;
        !            62:    }
        !            63: 
        !            64: /*
        !            65:  * lerr produces the error message s and associates it with line l.
        !            66:  */
        !            67: lerr(l, s)
        !            68: int l;
        !            69: char *s;
        !            70:    {
        !            71:    if (*filep)
        !            72:       fprintf(stderr, "%s, ", *filep);
        !            73:    fprintf(stderr, "line %d: ", l);
        !            74:    fprintf(stderr, "%s\n", s);
        !            75:    fatalerrs++;
        !            76:    nocode++;
        !            77:    }
        !            78: 
        !            79: /*
        !            80:  * warn produces s1 and s2 (if non-null) as warning messages.  The current
        !            81:  *  line is in tline.
        !            82:  */
        !            83: warn(s1, s2)
        !            84: char *s1, *s2;
        !            85:    {
        !            86:    if (*filep)
        !            87:       fprintf(stderr, "%s, ", *filep);
        !            88:    fprintf(stderr, "line %d: ", tline);
        !            89:    if (s2)
        !            90:       fprintf(stderr, "\"%s\": ", s2);
        !            91:    fprintf(stderr, "%s\n", s1);
        !            92:    warnings++;
        !            93:    }
        !            94: 
        !            95: /*
        !            96:  * syserr is called for fatal errors.  The message s is produced and the
        !            97:  *  translator exits.
        !            98:  */
        !            99: syserr(s)
        !           100: char *s;
        !           101:    {
        !           102:    if (*filep)
        !           103:       fprintf(stderr, "%s, ", *filep);
        !           104:    fprintf(stderr, "line %d: %s\n", inline, s);
        !           105:    exit(1);
        !           106:    }
        !           107: 
        !           108: /*
        !           109:  * mapterm finds a printable string for the given token type
        !           110:  *  and value.
        !           111:  */
        !           112: char *mapterm(typ,val)
        !           113: int typ;
        !           114: nodeptr val;
        !           115:    {
        !           116:    register struct toktab *t;
        !           117:    register i;
        !           118: 
        !           119:    i = typ;
        !           120:    if (i == IDENT || i == INTLIT || i == REALLIT || i == STRINGLIT || i == CSETLIT)
        !           121:       return (STR0(val));
        !           122:    for (t = toktab; t->t_type != i; t++)
        !           123:       if (t->t_type == 0)
        !           124:          return ("???");
        !           125:    return (t->t_word);
        !           126:    }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.