Annotation of 43BSD/contrib/B/src/bed/lexi.c, revision 1.1

1.1     ! root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
        !             2: static char rcsid[] = "$Header: lexi.c,v 2.4 84/10/26 12:01:34 guido Exp $";
        !             3: 
        !             4: /*
        !             5:  * B editor -- Lexical elements (identifiers, keywords, numbers etc.)
        !             6:  */
        !             7: 
        !             8: #include <ctype.h>
        !             9: 
        !            10: #include "b.h"
        !            11: #include "bobj.h"
        !            12: #include "node.h"
        !            13: #include "gram.h"
        !            14: 
        !            15: 
        !            16: /*
        !            17:  * Table defining lexical elements.
        !            18:  *
        !            19:  * ********** Indexed by (symbol-LEXICAL).
        !            20:  */
        !            21: 
        !            22: Hidden char lowercase[] = "0123456789'\"abcdefghijklmnopqrstuvwxyz";
        !            23: Hidden char uppercase[] = "0123456789'\"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        !            24: Hidden char digits[] = "0123456789";
        !            25: 
        !            26: Hidden struct {
        !            27:        string l_start;
        !            28:        string l_continue;
        !            29: } chclass[] = {
        !            30:        {lowercase+12, lowercase,}, /* IDENT */
        !            31:        {uppercase+12, uppercase,}, /* KEYWORD */
        !            32:        {digits, digits,}, /* NUMBER */
        !            33:        {"\\", "^",}, /* COMMENT */
        !            34:        {"^`'", "^`'",}, /* TEXT1 */
        !            35:        {"^`\"", "^`\"",}, /* TEXT2 */
        !            36:        {".+-*/#^~@|<=>", "",}, /* OPERATORS */
        !            37:        {"^", "^",}, /* RAW_INPUT */
        !            38:        {"", "",}, /* SUGGESTION (dummy) */
        !            39: };
        !            40: 
        !            41: #define NCHCLASS (sizeof(chclass)/sizeof(chclass[0]))
        !            42: 
        !            43: 
        !            44: /*
        !            45:  * Test whether character `c' may start a lexical element with
        !            46:  * symbolic name `lex'.
        !            47:  */
        !            48: 
        !            49: Visible bool
        !            50: maystart(c, lex)
        !            51:        char c;
        !            52:        int lex;
        !            53: {
        !            54:        string cp;
        !            55: 
        !            56:        lex -= LEXICAL;
        !            57:        Assert(lex >= 0);
        !            58:        if (lex >= NCHCLASS || !isascii(c) || c != ' ' && !isprint(c))
        !            59:                return No;
        !            60:        cp = chclass[lex].l_start;
        !            61:        if (*cp == '^')
        !            62:                return !index(cp+1, c);
        !            63:        return index(cp, c) != 0;
        !            64: }
        !            65: 
        !            66: 
        !            67: /*
        !            68:  * Test whether character `c' may continue a lexical element with
        !            69:  * symbolic name `lex'.
        !            70:  */
        !            71: 
        !            72: Visible bool
        !            73: maycontinue(c, lex)
        !            74:        char c;
        !            75:        int lex;
        !            76: {
        !            77:        string cp;
        !            78: 
        !            79:        lex -= LEXICAL;
        !            80:        Assert(lex >= 0);
        !            81:        if (lex >= NCHCLASS || !isascii(c) || c != ' ' && !isprint(c))
        !            82:                return No;
        !            83:        cp = chclass[lex].l_continue;
        !            84:        if (*cp == '^')
        !            85:                return !index(cp+1, c);
        !            86:        return index(cp, c) != 0;
        !            87: }

unix.superglobalmegacorp.com

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