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

Defined variables

N defined in line 119; used 5 times
Ps defined in line 112; used 2 times
Y defined in line 98; used 29 times
bufp defined in line 39; used 6 times
classes defined in line 140; used 12 times
cmhp defined in line 278; never used
dquote defined in line 171; used 2 times
errout defined in line 173; used 1 times
lastkey defined in line 125; used 2 times
token defined in line 39; used 11 times
yyResume defined in line 169; used 2 times
yyidhave defined in line 183; used 8 times
yyidwant defined in line 183; used 5 times
yyprtd defined in line 48; used 4 times
yypw defined in line 292; used 8 times
yysavc defined in line 82; used 11 times
yytokcnt defined in line 252; used 3 times
yyval defined in line 112; used 3 times
yyw defined in line 292; used 1 times
yywhcnt defined in line 253; used 3 times

Defined struct's

W defined in line 289; never used
comment defined in line 272; used 2 times
  • in line 273(2)
commline defined in line 283; used 3 times
kwtab defined in line 127; used 4 times

Defined macros

ARRAY defined in line 225; used 1 times
CALIGN defined in line 259; never used
CBSIZE defined in line 37; used 5 times
CFORM defined in line 265; used 1 times
CINCLUD defined in line 266; never used
CLMARG defined in line 258; never used
CNL defined in line 263; used 1 times
CNLBL defined in line 264; used 1 times
CONST defined in line 222; used 2 times
CRMARG defined in line 261; never used
CSRMARG defined in line 262; never used
CTRAIL defined in line 260; never used
FIELD defined in line 228; used 3 times
FILET defined in line 234; used 1 times
FUNC defined in line 230; used 1 times
FVAR defined in line 231; used 2 times
HUGE defined in line 156; never used
IMPROPER defined in line 242; used 1 times
LABEL defined in line 237; never used
MAXSYNERR defined in line 151; used 1 times
PDECL defined in line 162; used 8 times
PEXPR defined in line 164; used 4 times
PPROG defined in line 165; used 3 times
PROC defined in line 229; never used
PROG defined in line 241; never used
PSTAT defined in line 163; used 5 times
PTR defined in line 233; used 2 times
PTRFILE defined in line 226; never used
RANGE defined in line 236; never used
RECORD defined in line 227; used 1 times
REF defined in line 232; used 1 times
SCAL defined in line 239; never used
SET defined in line 235; never used
STR defined in line 240; never used
TYPE defined in line 223; never used
UNDEF defined in line 221; never used
VAR defined in line 224; used 2 times
WITHPTR defined in line 238; never used
alph defined in line 42; used 1 times
commform defined in line 294; used 1 times
commnl defined in line 295; used 1 times
commnlbl defined in line 296; used 1 times
digit defined in line 41; used 8 times
yyecol defined in line 102; used 3 times
yyefile defined in line 105; used 3 times
yyeseqid defined in line 106; used 4 times
yyresume defined in line 167; never used
yyseekp defined in line 104; used 3 times

Usage of this include

Last modified: 1981-07-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 3907
Valid CSS Valid XHTML 1.0 Strict