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

Defined variables

N defined in line 129; used 5 times
bufp defined in line 38; used 6 times
classes defined in line 150; used 12 times
cmhp defined in line 292; never used
dquote defined in line 181; used 2 times
errout defined in line 185; used 1 times
yyResume defined in line 179; used 2 times
yysavc defined in line 81; used 11 times
yyval defined in line 115; used 3 times
yyw defined in line 306; used 1 times
yywhcnt defined in line 267; used 3 times

Defined struct's

W defined in line 303; never used
comment defined in line 286; used 2 times
  • in line 287(2)
commline defined in line 297; used 3 times
kwtab defined in line 137; used 4 times

Defined union's

Defined macros

ARRAY defined in line 239; used 1 times
CALIGN defined in line 273; never used
CBSIZE defined in line 35; used 6 times
CFORM defined in line 279; used 1 times
CINCLUD defined in line 280; never used
CLMARG defined in line 272; never used
CNL defined in line 277; used 1 times
CNLBL defined in line 278; used 1 times
CONST defined in line 236; used 2 times
CRMARG defined in line 275; never used
CSRMARG defined in line 276; never used
CTRAIL defined in line 274; never used
FIELD defined in line 242; used 3 times
FILET defined in line 248; used 1 times
FVAR defined in line 245; used 2 times
HUGE defined in line 166; never used
IMPROPER defined in line 256; used 1 times
LABEL defined in line 251; never used
MAXSYNERR defined in line 161; used 1 times
PROG defined in line 255; never used
PTR defined in line 247; used 2 times
PTRFILE defined in line 240; never used
RANGE defined in line 250; never used
RECORD defined in line 241; used 1 times
SCAL defined in line 253; used 1 times
SET defined in line 249; never used
STR defined in line 254; never used
TYPE defined in line 237; never used
UNDEF defined in line 235; never used
VAR defined in line 238; used 2 times
WITHPTR defined in line 252; never used
alph defined in line 41; used 1 times
commform defined in line 308; used 1 times
commnl defined in line 309; used 1 times
commnlbl defined in line 310; used 1 times
yyresume defined in line 177; never used

Usage of this include

Last modified: 1985-06-21
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 4001
Valid CSS Valid XHTML 1.0 Strict