Annotation of 43BSDReno/pgrm/pascal/src/yy.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1980 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  *
                      6:  *     @(#)yy.h        5.2 (Berkeley) 6/21/85
                      7:  */
                      8: 
                      9: #include "y.tab.h"
                     10: #undef CBSIZE  /* from paramsys/param.h */
                     11: /*
                     12:  * INPUT/OUTPUT 
                     13:  */
                     14: 
                     15: /*
                     16:  * The buffer for the input file is normally "ibuf".
                     17:  * When files are included, however, this may be
                     18:  * pushed down in the stack of currently active
                     19:  * files. For this reason, the pointer ibp always
                     20:  * references the i/o buffer of the current input file.
                     21:  */
                     22: FILE           *ibuf, *ibp;
                     23: 
                     24: /*
                     25:  * Line and token buffers.  Charbuf is the character buffer for
                     26:  * input lines, token the buffer for tokens returned
                     27:  * by the scanner.  CBSIZE defines the maximum line
                     28:  * length allowed on input and is doubtless too small.
                     29:  * The token buffer should be a local array in yylex.
                     30:  */
                     31: #ifdef ADDR16
                     32: #define CBSIZE 161
                     33: #endif ADDR16
                     34: #ifdef ADDR32
                     35: #define CBSIZE 1024
                     36: #endif ADDR32
                     37: 
                     38: char   charbuf[CBSIZE], *bufp, token[CBSIZE];
                     39: 
                     40: #define digit(c)       (c >= '0' && c <= '9')
                     41: #define alph(c)                ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
                     42: 
                     43: /*
                     44:  * Flag to prevent reprinting current line after
                     45:  * an error.
                     46:  */
                     47: char   yyprtd;
                     48: 
                     49: /*
                     50:  * The following variables are maintained by
                     51:  * the scanner in the file lex and used in scanning
                     52:  * and in parsing.
                     53:  *
                     54:  * The variable yychar is the current scanner character.
                     55:  * Currently, the scanner must be called as
                     56:  *     yychar = yylex()
                     57:  * even though it should set yychar itself.
                     58:  * Yychar has value YEOF at end of file, and negative value if
                     59:  * there is no yychar, e.g. after a shift in the parser.
                     60:  *
                     61:  * The variable yycol is the current column in the line whose number
                     62:  * is given by yyline.  Yyecol and yyeline give the position for an
                     63:  * error message to flag, usually the start of an input token.
                     64:  * Yylval is the semantic return from the scanner.
                     65:  *
                     66:  * In fact all of these variables are "per token".
                     67:  * In the usual case, only the copies in the scanner token structure
                     68:  * 'Y' are used, and the #defines below serve to make them look
                     69:  * like variables.
                     70:  *
                     71:  * For the purposes of the error recovery, however, they are copied
                     72:  * and restored quite freely.  For the error recovery also, the
                     73:  * file name which the input line this token is on and the seek
                     74:  * pointer of this line in its source file are saved as yyefile
                     75:  * and yyseekp.  The global variable yylinpt is the seek pointer
                     76:  * of the current input line.
                     77:  */
                     78: int    yycol;
                     79: int    yyline;
                     80: int    yyseqid;
                     81: int    yysavc;
                     82: int    yylinpt;
                     83: 
                     84: /* *** NOTE ***
                     85:  * It would be much better to not have the Yyeline and Yyefile
                     86:  * in the scanner structure and to have a mechanism for mapping
                     87:  * seqid's to these globally.
                     88:  */
                     89: struct yytok {
                     90:        int     Yychar;
                     91:        int     Yylval;
                     92:        int     Yyecol;
                     93:        int     Yyeline;
                     94:        int     Yyseekp;
                     95:        char    *Yyefile;
                     96:        int     Yyeseqid;
                     97: } Y, OY;
                     98: 
                     99: #define        yychar  Y.Yychar
                    100: #define        yylval  Y.Yylval
                    101: #define        yyecol  Y.Yyecol
                    102: #define        yyeline Y.Yyeline
                    103: #define        yyseekp Y.Yyseekp
                    104: #define        yyefile Y.Yyefile
                    105: #define        yyeseqid Y.Yyeseqid
                    106: 
                    107: /* Semantic Stack so that y.tab.c will lint */
                    108: 
                    109: union semstack
                    110: {
                    111:     int                  i_entry;
                    112:     struct nl   *nl_entry;
                    113:     struct tnode *tr_entry;
                    114:     char        *cptr;
                    115: } yyval;
                    116: 
                    117: /*
                    118:  * Yyval is the semantic value returned by a reduction.
                    119:  * It is what "$$" is expanded to by yacc.
                    120:  */
                    121: 
                    122: int    *Ps;
                    123: 
                    124: /*
                    125:  * N is the length of a reduction.
                    126:  * Used externally by "lineof" to get the left and
                    127:  * right margins for a reduction.
                    128:  */
                    129: int    N;
                    130: /*
                    131:  * Definitions for looking up keywords.
                    132:  * The keyword array is called yykey, and
                    133:  * lastkey points at the end of it.
                    134:  */
                    135: char   *lastkey;
                    136: 
                    137: struct kwtab {
                    138:        char    *kw_str;
                    139:        int     kw_val;
                    140: } yykey[];
                    141: 
                    142: /*
                    143:  * ERROR RECOVERY EXTERNALS
                    144:  */
                    145: 
                    146: #define        CLIMIT  40      /* see yyrecover.c */
                    147: char   *tokname();
                    148: char   *charname();
                    149: 
                    150: char   *classes[];
                    151: 
                    152: /*
                    153:  * Tokens which yacc doesn't define
                    154:  */
                    155: #define        YEOF    0
                    156: #define        ERROR   256
                    157: 
                    158: /*
                    159:  * Limit on the number of syntax errors
                    160:  */
                    161: #define        MAXSYNERR       100
                    162: 
                    163: /*
                    164:  * Big costs
                    165:  */
                    166: #define        HUGE            50
                    167: #define        INFINITY        100
                    168: 
                    169: /*
                    170:  * Kinds of panics
                    171:  */
                    172: #define        PDECL   0
                    173: #define        PSTAT   1
                    174: #define        PEXPR   2
                    175: #define        PPROG   3
                    176: 
                    177: #define        yyresume()      yyResume = 1;
                    178: 
                    179: char   yyResume;
                    180: 
                    181: char   dquote;
                    182: 
                    183: #ifndef PC
                    184: #ifndef OBJ
                    185: char   errout;
                    186: #endif OBJ
                    187: #endif PC
                    188: 
                    189: /*
                    190:  * Yyidwant and yyidhave are the namelist classes
                    191:  * of identifiers associated with a identifier reduce
                    192:  * error, set before the recovery is called.
                    193:  * Since they may be set again during the forward move
                    194:  * they must be saved by yyrecover, which uses them in printing
                    195:  * error messages.
                    196:  */
                    197: int    yyidhave, yyidwant;
                    198: 
                    199: /*
                    200:  * The variables yy*shifts are used to prevent looping and the printing
                    201:  * of spurious messages in the parser.  Yyshifts gives the number of
                    202:  * true input shifts since the last corrective action.  YyOshifts
                    203:  * is the value of yyshifts before it was last cleared, and is used
                    204:  * by yyPerror in yypanic.c to suppress messages.
                    205:  *
                    206:  * Yytshifts counts true input shifts.  It is used to prevent looping
                    207:  * inserting unique symbols.  If yytshifts == yyTshifts (local to
                    208:  * yyrecover.c) then there has been no shift over true input since
                    209:  * the last unique symbol insertion.  We refuse, in this case,
                    210:  * to insert more unique symbols so as to prevent looping.
                    211:  *
                    212:  * The recovery cannot loop because it guarantees the progress of the
                    213:  * parse, i.e.:
                    214:  *
                    215:  *     1) Any insertion guarantees to shift over 2 symbols, a replacement
                    216:  *        over one symbol.
                    217:  *
                    218:  *     2) Unique symbol insertions are limited to one for each true
                    219:  *        symbol of input, or "safe" insertion of the keywords "end"
                    220:  *        and "until" at zero cost (safe since these are know to match
                    221:  *        stack that cannot have been generated - e.g. "begin" or "repeat")
                    222:  *
                    223:  *     3) We never panic more than once from a given state without
                    224:  *        shifting over input, i.e. we force the parse stack to shrink
                    225:  *        after each unsuccessful panic.
                    226:  */
                    227: int    yyshifts, yyOshifts;
                    228: unsigned yytshifts;
                    229: 
                    230: #ifdef PXP
                    231: 
                    232: /*
                    233:  * Identifier class definitions
                    234:  */
                    235: #define        UNDEF   0
                    236: #define        CONST   1
                    237: #define        TYPE    2
                    238: #define        VAR     3
                    239: #define        ARRAY   4
                    240: #define        PTRFILE 5
                    241: #define        RECORD  6
                    242: #define        FIELD   7
                    243: #define        PROC    8
                    244: #define        FUNC    9
                    245: #define        FVAR    10
                    246: #define        REF     11
                    247: #define        PTR     12
                    248: #define        FILET   13
                    249: #define        SET     14
                    250: #define        RANGE   15
                    251: #define        LABEL   16
                    252: #define        WITHPTR 17
                    253: #define        SCAL    18
                    254: #define        STR     19
                    255: #define        PROG    20
                    256: #define        IMPROPER 21
                    257: 
                    258: /*
                    259:  * COMMENT FORMATTING DEFINITIONS
                    260:  */
                    261: 
                    262: /*
                    263:  * Count of tokens on this input line
                    264:  * Note that this can be off if input is not syntactically correct.
                    265:  */
                    266: int    yytokcnt;
                    267: int    yywhcnt;
                    268: 
                    269: /*
                    270:  * Types of comments
                    271:  */
                    272: #define        CLMARG  0
                    273: #define        CALIGN  1
                    274: #define        CTRAIL  2
                    275: #define        CRMARG  3
                    276: #define        CSRMARG 4
                    277: #define        CNL     5
                    278: #define        CNLBL   6
                    279: #define        CFORM   7
                    280: #define        CINCLUD 8
                    281: 
                    282: /*
                    283:  * Comment structure
                    284:  * Cmhp is the head of the current list of comments
                    285:  */
                    286: struct comment {
                    287:        struct  comment *cmnext;
                    288:        int     cmdelim;
                    289:        struct  commline *cml;
                    290:        int     cmjust;
                    291:        int     cmseqid;
                    292: } *cmhp;
                    293: 
                    294: /*
                    295:  * Structure for holding a comment line
                    296:  */
                    297: struct commline {
                    298:        char    *cmtext;
                    299:        int     cmcol;  /* Only used for first line of comment currently */
                    300:        struct  commline *cml;
                    301: };
                    302: 
                    303: struct W {
                    304:        int     Wseqid;
                    305:        int     Wcol;
                    306: } yyw[MAXDEPTH + 1], *yypw;
                    307: 
                    308: #define        commform()      quickcomm(CFORM)
                    309: #define        commnl()        quickcomm(CNL)
                    310: #define        commnlbl()      quickcomm(CNLBL)
                    311: #endif

unix.superglobalmegacorp.com

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