|
|
1.1 root 1: head 1.1;
2: access ;
3: symbols ;
4: locks bin:1.1;
5: comment @ * @;
6:
7:
8: 1.1
9: date 91.02.27.18.41.42; author bin; state Exp;
10: branches ;
11: next ;
12:
13:
14: desc
15: @pulled from 310 ship disk
16: @
17:
18:
19:
20: 1.1
21: log
22: @Initial revision
23: @
24: text
25: @/* (-lgl
26: * COHERENT Version 3.0
27: * Copyright (c) 1982, 1990 by Mark Williams Company.
28: * All rights reserved. May not be copied without permission.
29: -lgl) */
30: #include "action.h"
31: #define YYNOCHAR (-1000)
32: #define yyerrok yyerrflag=0
33: #define yyclearin yylval=YYNOCHAR
34: int yystack[YYMAXDEPTH];
35: YYSTYPE yyvstack[YYMAXDEPTH], *yyv;
36: int yychar;
37:
38: #ifdef YYDEBUG
39: int yydebug = 1; /* No sir, not in the BSS */
40: #include <stdio.h>
41: #endif
42:
43: short yyerrflag;
44: int *yys;
45:
46: yyparse()
47: {
48: register YYSTYPE *yypvt;
49: int act;
50: register unsigned *ip, yystate;
51: int pno;
52: yystate = 0;
53: yychar = YYNOCHAR;
54: yyv = &yyvstack[-1];
55: yys = &yystack[-1];
56:
57: stack:
58: if( ++yys >= &yystack[YYMAXDEPTH] ) {
59: write(2, "Stack overflow\n", 15);
60: exit(1);
61: }
62: *yys = yystate;
63: *++yyv = yyval;
64: #ifdef YYDEBUG
65: if( yydebug )
66: fprintf(stdout, "Stack state %d, char %d\n", yystate, yychar);
67: #endif
68:
69: read:
70: ip = &yyact[yypa[yystate]];
71: if( ip[1] != YYNOCHAR ) {
72: if( yychar == YYNOCHAR ) {
73: yychar = yylex();
74: #ifdef YYDEBUG
75: if( yydebug )
76: fprintf(stdout, "lex read char %d, val %d\n", yychar, yylval);
77: #endif
78: }
79: while (ip[1]!=YYNOCHAR) {
80: if (ip[1]==yychar)
81: break;
82: ip += 2;
83: }
84: }
85: act = ip[0];
86: switch( act>>YYACTSH ) {
87: case YYSHIFTACT:
88: if( ip[1]==YYNOCHAR )
89: goto YYerract;
90: if( yychar != -1 )
91: yychar = YYNOCHAR; /* dont throw away EOF */
92: yystate = act&YYAMASK;
93: yyval = yylval;
94: #ifdef YYDEBUG
95: if( yydebug )
96: fprintf(stdout, "shift %d\n", yystate);
97: #endif
98: if( yyerrflag )
99: --yyerrflag;
100: goto stack;
101:
102: case YYACCEPTACT:
103: #ifdef YYDEBUG
104: if( yydebug )
105: fprintf(stdout, "accept\n");
106: #endif
107: return(0);
108:
109: case YYERRACT:
110: YYerract:
111: switch (yyerrflag) {
112: case 0:
113: yyerror("Syntax error");
114:
115: case 1:
116: case 2:
117:
118: yyerrflag = 3;
119: while( yys >= & yystack[0] ) {
120: ip = &yyact[yypa[*yys]];
121: while( ip[1]!=YYNOCHAR )
122: ip += 2;
123: if( (*ip&~YYAMASK) == (YYSHIFTACT<<YYACTSH) ) {
124: yystate = *ip&YYAMASK;
125: goto stack;
126: }
127: #ifdef YYDEBUG
128: if( yydebug )
129: fprintf(stderr, "error recovery leaves state %d, uncovers %d\n", *yys, yys[-1]);
130: #endif
131: yys--;
132: yyv--;
133: }
134: #ifdef YYDEBUG
135: if( yydebug )
136: fprintf(stderr, "no shift on error; abort\n");
137: #endif
138: return(1);
139:
140: case 3:
141: #ifdef YYDEBUG
142: if( yydebug )
143: fprintf(stderr, "Error recovery clobbers char %o\n", yychar);
144: #endif
145: if( yychar==YYEOFVAL )
146: return(1);
147: yychar = YYNOCHAR;
148: goto read;
149: }
150:
151: case YYREDACT:
152: pno = act&YYAMASK;
153: #ifdef YYDEBUG
154: if( yydebug )
155: fprintf(stdout, "reduce %d\n", pno);
156: #endif
157: yypvt = yyv;
158: yyv -= yypn[pno];
159: yys -= yypn[pno];
160: yyval = yyv[1];
161: switch(pno) {
162: $A
163: }
164: ip = &yygo[ yypgo[yypdnt[pno]] ];
165: while( *ip!=*yys && *ip!=YYNOCHAR )
166: ip += 2;
167: yystate = ip[1];
168: goto stack;
169: }
170: }
171:
172:
173:
174:
175: @
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.