Annotation of researchv9/jtools/src/pi/gram.c, revision 1.1.1.1

1.1       root        1: 
                      2: #include "gram.h"
                      3: #include "expr.pub"
                      4: #include "bpts.pub"
                      5: #include <ctype.h>
                      6: int LexIndex;
                      7: int LexGoal;
                      8: struct Expr *CurrentExpr;
                      9: char *LexString;
                     10: char *yyerr;           /* yacc doesn't use this */
                     11: long yyres;
                     12: char Token[128];
                     13: int DotDot;
                     14: Expr *E_IConst(long), *E_DConst(double);
                     15: 
                     16: typedef union  {
                     17:        char            cc;
                     18:        long            ll;
                     19:        char            ss[32];
                     20:        struct Expr     *ee;
                     21:        double          dd;
                     22: } YYSTYPE;
                     23: # define G_EXPR 257
                     24: # define G_DOTEQ_CONEX 258
                     25: # define G_DOLEQ_CONEX 259
                     26: # define G_CONEX 260
                     27: # define G_DOTDOT 261
                     28: # define ICONST 262
                     29: # define ID 263
                     30: # define PCENT 264
                     31: # define EQUAL 265
                     32: # define SLASH 266
                     33: # define DOLLAR 267
                     34: # define SIZEOF 268
                     35: # define TYPEOF 269
                     36: # define QMARK 270
                     37: # define SEMI 271
                     38: # define UNOP 272
                     39: # define STAR 273
                     40: # define PLUS 274
                     41: # define MINUS 275
                     42: # define AMPER 276
                     43: # define ARROW 277
                     44: # define DOT 278
                     45: # define LB 279
                     46: # define LP 280
                     47: # define COMMA 281
                     48: # define ERROR 282
                     49: # define RB 283
                     50: # define RP 284
                     51: # define PLUSPLUS 285
                     52: # define MINUSMINUS 286
                     53: # define EQUALEQUAL 287
                     54: # define GREATER 288
                     55: # define LESS 289
                     56: # define BAR 290
                     57: # define BARBAR 291
                     58: # define AMPERAMPER 292
                     59: # define HAT 293
                     60: # define TILDE 294
                     61: # define GREATEREQUAL 295
                     62: # define LESSEQUAL 296
                     63: # define FABS 297
                     64: # define GREATERGREATER 298
                     65: # define LESSLESS 299
                     66: # define BANG 300
                     67: # define BANGEQUAL 301
                     68: # define DCONST 302
                     69: # define LC 303
                     70: # define RC 304
                     71: # define DOTDOT 305
                     72: #define yyclearin yychar = -1
                     73: #define yyerrok yyerrflag = 0
                     74: extern int yychar;
                     75: extern short yyerrflag;
                     76: #ifndef YYMAXDEPTH
                     77: #define YYMAXDEPTH 150
                     78: #endif
                     79: YYSTYPE yylval, yyval;
                     80: # define YYERRCODE 256
                     81: 
                     82: 
                     83: 
                     84: #define LOOK (LexString[LexIndex ])
                     85: #define TAKE (AddToken(), LexString[LexIndex++])
                     86: #define MORE (LexString[LexIndex+1])
                     87: #define yc (yylval.cc)
                     88: #define yd (yylval.dd)
                     89: #define yl (yylval.ll)
                     90: #define ys (yylval.ss)
                     91: #define ishex(x) (isdigit(x) || (x>='a'&&x<='f') || (x>='A'&&x<='F'))
                     92: #define isoct(x) ( x>='0' && x<='7' )
                     93: int doyylex();
                     94: int yyerror(char*);
                     95: 
                     96: yylex()
                     97: {
                     98:        int token = doyylex();
                     99: 
                    100:        return token;
                    101: }
                    102: 
                    103: void AddToken()
                    104: {
                    105:        int l = strlen(Token);
                    106: 
                    107:        if( l < 64 ){
                    108:                Token[l] = LOOK;
                    109:                Token[l+1] = '\0';
                    110:        }
                    111: }
                    112: 
                    113: doyylex()
                    114: {
                    115:        double atof(char*);
                    116: 
                    117:        if( LexIndex < 0 ){
                    118:                LexIndex = 0;
                    119:                return LexGoal;
                    120:        }
                    121:        while( isspace(LOOK) ) TAKE;
                    122:        Token[0] = '\0';
                    123:        if( isalpha(LOOK) || LOOK=='_' || LOOK=='$' ){
                    124:                TAKE;
                    125:                while( isalnum(LOOK) || LOOK=='_' ) TAKE;
                    126:                strcpy( ys, Token );
                    127:                if( !strcmp(ys,"sizeof") ) return SIZEOF;
                    128:                if( !strcmp(ys,"typeof") ) return TYPEOF;
                    129:                if( !strcmp(ys,"fabs") ) return FABS;
                    130:                if( !strcmp(ys,"$") ) return DOLLAR;
                    131:                return ID;
                    132:        }
                    133:        if( LOOK == '\'' ){
                    134:                TAKE;
                    135:                if( LOOK == '\\' ){
                    136:                        TAKE;
                    137:                        if( MORE != '\'' ) return 0;
                    138:                        char *trans = "bnftv", *late = "\b\n\f\t\v";
                    139:                        yl = LOOK;
                    140:                        for( int i = 0; trans[i]; ++i )
                    141:                                if( LOOK == trans[i] ) yl = late[i];
                    142:                        TAKE; TAKE; return ICONST;
                    143:                }
                    144:                if( MORE != '\'' ) return 0;
                    145:                yl = TAKE;
                    146:                TAKE;
                    147:                return ICONST;
                    148:        }
                    149:        if( LOOK=='0' && (MORE=='x' || MORE=='X') ){
                    150:                TAKE; TAKE;
                    151:                if( !ishex(LOOK) ) return 0;
                    152:                for( yl = 0; ishex(LOOK); TAKE )
                    153:                    yl = (yl<<4) + (isalpha(LOOK) ? (LOOK|' ')+10-'a' : LOOK-'0');
                    154:                return ICONST;
                    155:        }
                    156:        if( LOOK=='0' ){
                    157:                for( TAKE, yl = 0; isoct(LOOK); TAKE ) yl = (yl<<3) + LOOK - '0';
                    158:                goto IorD;
                    159:        }
                    160:        if( isdigit(LOOK) ){
                    161:                for( yl = 0; isdigit(LOOK); TAKE ) yl = yl*10 + LOOK - '0';
                    162:                goto IorD;
                    163:        }
                    164:        if( LOOK == '.' && isdigit(MORE) ) goto Point;
                    165: #define EAT2(x) {TAKE; TAKE; return x;}
                    166:        if( LOOK=='.' && MORE=='.' ) EAT2(DOTDOT)
                    167:        if( LOOK=='-' && MORE=='>' ) EAT2(ARROW)
                    168:        if( LOOK=='-' && MORE=='-' ) EAT2(MINUSMINUS)
                    169:        if( LOOK=='+' && MORE=='+' ) EAT2(PLUSPLUS)
                    170:        if( LOOK=='=' && MORE=='=' ) EAT2(EQUALEQUAL)
                    171:        if( LOOK=='!' && MORE=='=' ) EAT2(BANGEQUAL)
                    172:        if( LOOK==':' && MORE=='=' ) EAT2(EQUAL)
                    173:        if( LOOK=='>' && MORE=='=' ) EAT2(GREATEREQUAL)
                    174:        if( LOOK=='<' && MORE=='=' ) EAT2(LESSEQUAL)
                    175:        if( LOOK=='&' && MORE=='&' ) EAT2(AMPERAMPER)
                    176:        if( LOOK=='|' && MORE=='|' ) EAT2(BARBAR)
                    177:        if( LOOK=='>' && MORE=='>' ) EAT2(GREATERGREATER)
                    178:        if( LOOK=='<' && MORE=='<' ) EAT2(LESSLESS)
                    179:        switch( TAKE ){
                    180:                case '>' : return GREATER;
                    181:                case '<' : return LESS;
                    182:                case '/' : return SLASH;
                    183:                case '*' : return STAR;
                    184:                case '+' : return PLUS;
                    185:                case '-' : return MINUS;
                    186:                case '.' : return DOT;
                    187:                case '(' : return LP;
                    188:                case ')' : return RP;
                    189:                case '[' : return LB;
                    190:                case ']' : return RB;
                    191:                case '&' : return AMPER;
                    192:                case ',' : return COMMA;
                    193:                case '%' : return PCENT;
                    194:                case '=' : return EQUAL;
                    195:                case ';' : return SEMI;
                    196:                case '|' : return BAR;
                    197:                case '^' : return HAT;
                    198:                case '~' : return TILDE;
                    199:                case '!' : return BANG;
                    200:                case '{' : return LC;
                    201:                case '}' : return RC;
                    202:                default  : return 0;
                    203:        }
                    204: IorD:
                    205:        if( LOOK=='l' || LOOK=='L' ) return TAKE, ICONST;
                    206:        if( LOOK=='.' && MORE=='.' ) return ICONST;
                    207:        if( LOOK=='.' ) goto Point;
                    208:        if( LOOK=='e' || LOOK=='E' ) goto Exp;
                    209:        return ICONST;
                    210: Point:
                    211:        for( TAKE; isdigit(LOOK); TAKE) {}
                    212:        if( LOOK!='e' && LOOK!='E' ) goto Double;
                    213: Exp:
                    214:        TAKE;
                    215:        if( LOOK=='+' || LOOK=='-' ) TAKE;
                    216:        if( !isdigit(LOOK) ) return 0;
                    217:        while( isdigit(LOOK) ) TAKE;
                    218: Double:
                    219:        yd = atof(Token);
                    220:        return DCONST;  
                    221: 
                    222: }
                    223: short yyexca[] ={
                    224: -1, 1,
                    225:        0, -1,
                    226:        -2, 0,
                    227:        };
                    228: # define YYNPROD 62
                    229: # define YYLAST 800
                    230: short yyact[]={
                    231: 
                    232:   66,  50,  68, 128,  81,  72, 127,  42,   9,  67,
                    233:   69,  64,  54,  65,  48,  70,  10,  49,  35,  34,
                    234:  129, 126, 110,  56,  59,  58,  53,  51,  52,  55,
                    235:   93,  61,  60,   8,  62,  63,   7,  57,  66,  50,
                    236:   68,  47,  65,  48,  70,   1, 117,  67,  69,  64,
                    237:   54,  65,  48,  70,   0,  49,   0, 125,   0,   0,
                    238:    0,  56,  59,  58,  53,  51,  52,  55,   0,  61,
                    239:   60,   0,  62,  63,   0,  57,  66,  50,  68,  47,
                    240:    2,   4,   5,   6,   3,  67,  69,  64,  54,  65,
                    241:   48,  70,   0,  49,   0,   0, 120,   0,   0,  56,
                    242:   59,  58,  53,  51,  52,  55,   0,  61,  60,   0,
                    243:   62,  63,   0,  57,  66,  50,  68,  47,   0,   0,
                    244:    0,   0,   0,  67,  69,  64,  54,  65,  48,  70,
                    245:    0,  49,   0,   0,   0,   0,   0,  56,  59,  58,
                    246:   53,  51,  52,  55,   0,  61,  60,   0,  62,  63,
                    247:    0,  57,   0,   0, 116,  47,  66,  50,  68,   0,
                    248:    0,   0,   0,  82,   0,  67,  69,  64,  54,  65,
                    249:   48,  70,   0,  49,   0,   0,   0,   0,   0,  56,
                    250:   59,  58,  53,  51,  52,  55,   0,  61,  60,   0,
                    251:   62,  63,   0,  57,  66,  50,  68,  47,   0,   0,
                    252:    0,  46,   0,  67,  69,  64,  54,  65,  48,  70,
                    253:    0,  49,   0,   0,   0,   0,   0,  56,  59,  58,
                    254:   53,  51,  52,  55,   0,  61,  60,   0,  62,  63,
                    255:    0,  57,  66,  50,  68,  47,   0,   0,   0,   0,
                    256:    0,  67,  69,  64,  54,  65,  48,  70,   0,   0,
                    257:    0,   0,   0,   0,   0,  56,  59,  58,  53,  51,
                    258:   52,  55,   0,  61,  60,   0,  62,  63,   0,  57,
                    259:   66,  50,  68,  47,   0,   0,   0,   0,   0,  67,
                    260:   69,  64,  54,  65,  48,  70,   0,  49,   0,   0,
                    261:    0,   0,   0,  56,  59,  58,  53,  51,  52,  55,
                    262:    0,  61,  60,   0,  62,  63,   0,  57,  66,  50,
                    263:   68,  14,  13,   0,   0,   0,  12,  67,  69,  64,
                    264:   54,  65,  48,  70,  16,  15,   0,   0,   0,  17,
                    265:    0,  56,  59,  58,  53,  51,  52,  55,   0,  61,
                    266:   60,   0,  62,  63,  66,  57,  68,   0,   0,   0,
                    267:    0,   0,   0,  67,  69,  64,  54,  65,  48,  70,
                    268:    0,   0,  38,   0,  40,   0,   0,  56,  59,  58,
                    269:   53,  39,  52,  55,   0,  61,  60,  42,  62,  63,
                    270:   66,  57,  68,   0,   0,   0,   0,   0,   0,  67,
                    271:   69,  64,  54,  65,  48,  70,   0,   0,   0,   0,
                    272:    0,   0,   0,  56,  59,  58,  53,   0,   0,  55,
                    273:    0,  61,  60,   0,  62,  63,  66,  57,  68,   0,
                    274:    0,   0,   0,   0,   0,  67,  69,  64,  54,  65,
                    275:   48,  70,   0,   0,   0,   0,   0,   0,   0,  56,
                    276:   59,  58,   0,   0,   0,  55,   0,  61,  60,   0,
                    277:   62,  63,  66,  57,  68,   0,   0,   0,   0,   0,
                    278:    0,  67,  69,  64,  54,  65,  48,  70,   0,   0,
                    279:    0,   0,   0,   0,   0,  56,  59,  58,   0,  66,
                    280:    0,  68,   0,  61,  60,   0,  62,  63,  67,  57,
                    281:   23,  21,  65,  48,  70,  19,  26,  27,   0,   0,
                    282:   66,  24,  68,  29,  25,   0,   0,   0,  31,  67,
                    283:   69,  64, 118,  65,  48,  70,   0,   0,   0,   0,
                    284:    0,   0,  30,   0,   0,  32,   0,   0,  28,   0,
                    285:   22,  20,  23,  21,  62,  63,   0,  19,  26,  27,
                    286:    0,   0,  38,  24,  40,  29,  25,   0,   0,   0,
                    287:   31,  39,  41,  37,   0,   0,   0,  42,   0,   0,
                    288:    0,   0,  91,   0,  30,   0,  66,  32,  68,   0,
                    289:   28,   0,  22,  20,   0,  67,  69,  64,   0,  65,
                    290:   48,  70,   0,   0,   0,   0,   0,   0,   0,  56,
                    291:   59,  58,   0,   0,   0,   0,   0,  61,  60,   0,
                    292:   62,  63,  66,  57,  68,   0,   0,   0,   0,   0,
                    293:    0,  67,  69,  64,   0,  65,  48,  70,   0,   0,
                    294:   38,   0,  40,   0,   0,   0,  59,  58,   0,  39,
                    295:   41,  37,   0,  61,  60,  42,  62,  63,  66, 124,
                    296:   68,   0,   0,   0,   0,   0,   0,  67,  69,  64,
                    297:    0,  65,  48,  70,  38,   0,  40,   0,   0,   0,
                    298:    0, 123,   0,  39,  41,  37,  38,   0,  40,  42,
                    299:   18,   0,   0, 122,   0,  39,  41,  37,  38,  33,
                    300:   40,  42,   0,   0,   0,  36,   0,  39,  41,  37,
                    301:    0,  71,   0,  42,   0,  73,  74,  75,  76,  77,
                    302:   78,  79,  80,   0,   0,   0,   0,   0,   0,   0,
                    303:    0,   0,   0,   0,   0,   0,   0,   0,  92,   0,
                    304:   94,  95,  96,  97,  98,  99, 100, 101, 102, 103,
                    305:  104, 105, 106, 107, 108, 109,   0, 111, 112, 113,
                    306:  114, 115,  11, 119,   0,   0,   0,   0,   0,   0,
                    307:    0,   0, 121,   0,   0,   0,   0,   0,  43,  44,
                    308:   45,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                    309:    0,   0,   0,   0,   0,   0,   0,  83,  84,   0,
                    310:   85,  86,  87,  88,  89,  90,   0,   0,   0,   0,
                    311:    0,   0,   0,   0,   0,   0,   0,   0,   0, 130 };
                    312: short yypact[]={
                    313: 
                    314: -177,-1000,-1000,-1000,-270,-251,  49, 270, 270,-246,
                    315: -247, 414,-1000,-1000,-1000,  49,  49,  49, -70,-1000,
                    316:  270,-275,-1000,-1000, 270, 270, 270, 270, 270, 270,
                    317:  270, 270,-276,-108,  49,  49,-1000,  49,  49,  49,
                    318:   49,  49,  49,-272,-272, 278,-1000, 270,-233, 270,
                    319:  270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
                    320:  270, 270, 270, 270, 270,-241, 270, 270, 270, 270,
                    321:  270,-150, 228,-235, 302,-235,-235,-235,-235,-235,
                    322: -188, 270,-1000, 402, 390,  98,-272,-272,-272,  98,
                    323:  356,-1000,   6,-1000,  44,  44,  80, 116, 152, 302,
                    324:  188, 338, 338, 236, 236, 236, 236, 374, 374, 215,
                    325: -1000,-235,-235,-235, 215,-226,-242,-278,-1000, -32,
                    326: -1000,-264,-1000,-1000,-1000,-1000,-1000,-1000, 270,-1000,
                    327:  -32 };
                    328: short yypgo[]={
                    329: 
                    330:    0, 670,  46, 742,  45,  36,  33 };
                    331: short yyr1[]={
                    332: 
                    333:    0,   5,   4,   6,   4,   4,   4,   4,   1,   1,
                    334:    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
                    335:    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
                    336:    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
                    337:    1,   1,   1,   1,   1,   1,   1,   1,   3,   3,
                    338:    3,   3,   3,   3,   3,   3,   3,   3,   3,   3,
                    339:    2,   2 };
                    340: short yyr2[]={
                    341: 
                    342:    0,   0,   4,   0,   4,   5,   5,   3,   1,   4,
                    343:    1,   1,   1,   2,   2,   2,   2,   2,   2,   2,
                    344:    3,   3,   3,   3,   3,   3,   3,   3,   3,   3,
                    345:    3,   3,   3,   3,   3,   3,   3,   3,   3,   3,
                    346:    3,   3,   3,   4,   4,   3,   3,   4,   1,   1,
                    347:    1,   2,   2,   3,   3,   3,   3,   3,   4,   3,
                    348:    1,   3 };
                    349: short yychk[]={
                    350: 
                    351: -1000,  -4, 257, 261, 258, 259, 260,  -5,  -6, 278,
                    352:  267,  -3, 267, 263, 262, 276, 275, 280,  -1, 267,
                    353:  303, 263, 302, 262, 273, 276, 268, 269, 300, 275,
                    354:  294, 280, 297,  -1, 265, 265, 271, 275, 264, 273,
                    355:  266, 274, 279,  -3,  -3,  -3, 271, 305, 278, 281,
                    356:  265, 291, 292, 290, 276, 293, 287, 301, 289, 288,
                    357:  296, 295, 298, 299, 275, 277, 264, 273, 266, 274,
                    358:  279,  -1, 280,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
                    359:   -1, 280, 271,  -3,  -3,  -3,  -3,  -3,  -3,  -3,
                    360:   -3, 284,  -1, 263,  -1,  -1,  -1,  -1,  -1,  -1,
                    361:   -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
                    362:  263,  -1,  -1,  -1,  -1,  -1, 304,  -2, 284,  -1,
                    363:  284,  -1, 271, 271, 283, 283, 263, 284, 281, 284,
                    364:   -1 };
                    365: short yydef[]={
                    366: 
                    367:    0,  -2,   1,   3,   0,   0,   0,   0,   0,   0,
                    368:    0,   0,  48,  49,  50,   0,   0,   0,   0,   8,
                    369:    0,  10,  11,  12,   0,   0,   0,   0,   0,   0,
                    370:    0,   0,   0,   0,   0,   0,   7,   0,   0,   0,
                    371:    0,   0,   0,  51,  52,   0,   2,   0,   0,   0,
                    372:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                    373:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                    374:    0,   0,   0,  13,  14,  15,  16,  17,  18,  19,
                    375:    0,   0,   4,   0,   0,  53,  54,  55,  56,  57,
                    376:    0,  59,  20,  21,  22,  23,  24,  25,  26,  27,
                    377:   28,  29,  30,  31,  32,  33,  34,  35,  36,  37,
                    378:   38,  39,  40,  41,  42,   0,   0,   0,  45,  60,
                    379:   46,   0,   5,   6,  58,  43,   9,  44,   0,  47,
                    380:   61 };
                    381: #ifndef lint
                    382: static char yaccpar_sccsid[] = "@(#)yaccpar 1.2 86/07/18 SMI"; /* from UCB 4.1 83/02/11 */
                    383: #endif
                    384: 
                    385: #
                    386: # define YYFLAG -1000
                    387: # define YYERROR goto yyerrlab
                    388: # define YYACCEPT return(0)
                    389: # define YYABORT return(1)
                    390: 
                    391: /*     parser for yacc output  */
                    392: 
                    393: #ifdef YYDEBUG
                    394: int yydebug = 0; /* 1 for debugging */
                    395: #endif
                    396: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
                    397: int yychar = -1; /* current input token number */
                    398: int yynerrs = 0;  /* number of errors */
                    399: short yyerrflag = 0;  /* error recovery flag */
                    400: 
                    401: yyparse() {
                    402: 
                    403:        short yys[YYMAXDEPTH];
                    404:        short yyj, yym;
                    405:        register YYSTYPE *yypvt;
                    406:        register short yystate, *yyps, yyn;
                    407:        register YYSTYPE *yypv;
                    408:        register short *yyxi;
                    409: 
                    410:        yystate = 0;
                    411:        yychar = -1;
                    412:        yynerrs = 0;
                    413:        yyerrflag = 0;
                    414:        yyps= &yys[-1];
                    415:        yypv= &yyv[-1];
                    416: 
                    417:  yystack:    /* put a state and value onto the stack */
                    418: 
                    419: #ifdef YYDEBUG
                    420:        if( yydebug  ) printf( "state %d, char 0%o\n", yystate, yychar );
                    421: #endif
                    422:                if( ++yyps>= &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
                    423:                *yyps = yystate;
                    424:                ++yypv;
                    425:                *yypv = yyval;
                    426: 
                    427:  yynewstate:
                    428: 
                    429:        yyn = yypact[yystate];
                    430: 
                    431:        if( yyn<= YYFLAG ) goto yydefault; /* simple state */
                    432: 
                    433:        if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
                    434:        if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
                    435: 
                    436:        if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
                    437:                yychar = -1;
                    438:                yyval = yylval;
                    439:                yystate = yyn;
                    440:                if( yyerrflag > 0 ) --yyerrflag;
                    441:                goto yystack;
                    442:                }
                    443: 
                    444:  yydefault:
                    445:        /* default state action */
                    446: 
                    447:        if( (yyn=yydef[yystate]) == -2 ) {
                    448:                if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
                    449:                /* look through exception table */
                    450: 
                    451:                for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
                    452: 
                    453:                while( *(yyxi+=2) >= 0 ){
                    454:                        if( *yyxi == yychar ) break;
                    455:                        }
                    456:                if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
                    457:                }
                    458: 
                    459:        if( yyn == 0 ){ /* error */
                    460:                /* error ... attempt to resume parsing */
                    461: 
                    462:                switch( yyerrflag ){
                    463: 
                    464:                case 0:   /* brand new error */
                    465: 
                    466:                        yyerror( "syntax error" );
                    467:                yyerrlab:
                    468:                        ++yynerrs;
                    469: 
                    470:                case 1:
                    471:                case 2: /* incompletely recovered error ... try again */
                    472: 
                    473:                        yyerrflag = 3;
                    474: 
                    475:                        /* find a state where "error" is a legal shift action */
                    476: 
                    477:                        while ( yyps >= yys ) {
                    478:                           yyn = yypact[*yyps] + YYERRCODE;
                    479:                           if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
                    480:                              yystate = yyact[yyn];  /* simulate a shift of "error" */
                    481:                              goto yystack;
                    482:                              }
                    483:                           yyn = yypact[*yyps];
                    484: 
                    485:                           /* the current yyps has no shift onn "error", pop stack */
                    486: 
                    487: #ifdef YYDEBUG
                    488:                           if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
                    489: #endif
                    490:                           --yyps;
                    491:                           --yypv;
                    492:                           }
                    493: 
                    494:                        /* there is no state on the stack with an error shift ... abort */
                    495: 
                    496:        yyabort:
                    497:                        return(1);
                    498: 
                    499: 
                    500:                case 3:  /* no shift yet; clobber input char */
                    501: 
                    502: #ifdef YYDEBUG
                    503:                        if( yydebug ) printf( "error recovery discards char %d\n", yychar );
                    504: #endif
                    505: 
                    506:                        if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
                    507:                        yychar = -1;
                    508:                        goto yynewstate;   /* try again in the same state */
                    509: 
                    510:                        }
                    511: 
                    512:                }
                    513: 
                    514:        /* reduction by production yyn */
                    515: 
                    516: #ifdef YYDEBUG
                    517:                if( yydebug ) printf("reduce %d\n",yyn);
                    518: #endif
                    519:                yyps -= yyr2[yyn];
                    520:                yypvt = yypv;
                    521:                yypv -= yyr2[yyn];
                    522:                yyval = yypv[1];
                    523:                yym=yyn;
                    524:                        /* consult goto table to find next state */
                    525:                yyn = yyr1[yyn];
                    526:                yyj = yypgo[yyn] + *yyps + 1;
                    527:                if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
                    528:                switch(yym){
                    529:                        
                    530: case 1:
                    531: { DotDot=0; } break;
                    532: case 2:
                    533: { yyres = (long) yypvt[-1].ee;  } break;
                    534: case 3:
                    535: { DotDot=1; } break;
                    536: case 4:
                    537: { yyres = (long) yypvt[-1].ee;  } break;
                    538: case 5:
                    539: { yyres = (long) yypvt[-1].ee; } break;
                    540: case 6:
                    541: { yyres = (long) yypvt[-1].ee; } break;
                    542: case 7:
                    543: { yyres = (long) yypvt[-1].ee; } break;
                    544: case 8:
                    545: { if( !CurrentExpr){
                    546:                                        yyerror("$ cannot be used here");
                    547:                                        YYACCEPT;
                    548:                                  }
                    549:                                  yyval.ee = CurrentExpr;
                    550:                                } break;
                    551: case 9:
                    552: { yyval.ee = E_Binary( yypvt[-2].ee, O_ENV, E_Id(yypvt[-0].ss) ); } break;
                    553: case 10:
                    554: { yyval.ee = E_Id( yypvt[-0].ss ); } break;
                    555: case 11:
                    556: { yyval.ee = E_DConst( yypvt[-0].dd ); } break;
                    557: case 12:
                    558: { yyval.ee = E_IConst( yypvt[-0].ll ); } break;
                    559: case 13:
                    560: { yyval.ee = E_Unary( O_DEREF, yypvt[-0].ee ); } break;
                    561: case 14:
                    562: { yyval.ee = E_Unary( O_REF, yypvt[-0].ee ); } break;
                    563: case 15:
                    564: { yyval.ee = E_Unary( O_SIZEOF, yypvt[-0].ee ); } break;
                    565: case 16:
                    566: { yyval.ee = E_Unary( O_TYPEOF, yypvt[-0].ee ); } break;
                    567: case 17:
                    568: { yyval.ee = E_Unary( O_LOGNOT, yypvt[-0].ee ); } break;
                    569: case 18:
                    570: { yyval.ee = E_Unary( O_MINUS, yypvt[-0].ee ); } break;
                    571: case 19:
                    572: { yyval.ee = E_Unary( O_1SCOMP, yypvt[-0].ee ); } break;
                    573: case 20:
                    574: { if( !DotDot ){
                    575:                                        yyerror(".. cannot be used here");
                    576:                                        YYACCEPT;
                    577:                                  }
                    578:                                  yyval.ee = E_Binary( yypvt[-2].ee, O_RANGE, yypvt[-0].ee );} break;
                    579: case 21:
                    580: { yyval.ee = E_Binary( yypvt[-2].ee, O_DOT, E_Id(yypvt[-0].ss)); } break;
                    581: case 22:
                    582: { yyval.ee = E_Binary( yypvt[-2].ee, O_COMMA, yypvt[-0].ee ); } break;
                    583: case 23:
                    584: { yyval.ee = E_Binary( yypvt[-2].ee, O_ASSIGN, yypvt[-0].ee ); } break;
                    585: case 24:
                    586: { yyval.ee = E_Binary( yypvt[-2].ee, O_LOGOR, yypvt[-0].ee ); } break;
                    587: case 25:
                    588: { yyval.ee = E_Binary( yypvt[-2].ee, O_LOGAND, yypvt[-0].ee ); } break;
                    589: case 26:
                    590: { yyval.ee = E_Binary( yypvt[-2].ee, O_BITOR, yypvt[-0].ee ); } break;
                    591: case 27:
                    592: { yyval.ee = E_Binary( yypvt[-2].ee, O_BITAND, yypvt[-0].ee ); } break;
                    593: case 28:
                    594: { yyval.ee = E_Binary( yypvt[-2].ee, O_BITXOR, yypvt[-0].ee ); } break;
                    595: case 29:
                    596: { yyval.ee = E_Binary( yypvt[-2].ee, O_EQ, yypvt[-0].ee ); } break;
                    597: case 30:
                    598: { yyval.ee = E_Binary( yypvt[-2].ee, O_NE, yypvt[-0].ee ); } break;
                    599: case 31:
                    600: { yyval.ee = E_Binary( yypvt[-2].ee, O_LT, yypvt[-0].ee ); } break;
                    601: case 32:
                    602: { yyval.ee = E_Binary( yypvt[-2].ee, O_GT, yypvt[-0].ee ); } break;
                    603: case 33:
                    604: { yyval.ee = E_Binary( yypvt[-2].ee, O_LE, yypvt[-0].ee ); } break;
                    605: case 34:
                    606: { yyval.ee = E_Binary( yypvt[-2].ee, O_GE, yypvt[-0].ee ); } break;
                    607: case 35:
                    608: { yyval.ee = E_Binary( yypvt[-2].ee, O_RSHIFT, yypvt[-0].ee ); } break;
                    609: case 36:
                    610: { yyval.ee = E_Binary( yypvt[-2].ee, O_LSHIFT, yypvt[-0].ee ); } break;
                    611: case 37:
                    612: { yyval.ee = E_Binary( yypvt[-2].ee, O_MINUS, yypvt[-0].ee ); } break;
                    613: case 38:
                    614: { yyval.ee = E_Binary( yypvt[-2].ee, O_ARROW, E_Id(yypvt[-0].ss)); } break;
                    615: case 39:
                    616: { yyval.ee = E_Binary( yypvt[-2].ee, O_MOD, yypvt[-0].ee ); } break;
                    617: case 40:
                    618: { yyval.ee = E_Binary( yypvt[-2].ee, O_MULT, yypvt[-0].ee ); } break;
                    619: case 41:
                    620: { yyval.ee = E_Binary( yypvt[-2].ee, O_DIV, yypvt[-0].ee ); } break;
                    621: case 42:
                    622: { yyval.ee = E_Binary( yypvt[-2].ee, O_PLUS, yypvt[-0].ee ); } break;
                    623: case 43:
                    624: { yyval.ee = E_Binary( yypvt[-3].ee, O_INDEX, yypvt[-1].ee );} break;
                    625: case 44:
                    626: { yyval.ee = E_Binary( E_Id(yypvt[-3].ss), O_CALL, yypvt[-1].ee ); } break;
                    627: case 45:
                    628: { yyval.ee = E_Binary( E_Id(yypvt[-2].ss), O_CALL, 0 ); } break;
                    629: case 46:
                    630: { yyval.ee = yypvt[-1].ee; } break;
                    631: case 47:
                    632: { yyval.ee = E_Unary( O_FABS, yypvt[-1].ee ); } break;
                    633: case 48:
                    634: { if( !CurrentExpr){
                    635:                                        yyerror("no current expression for $");
                    636:                                        YYACCEPT;
                    637:                                  }
                    638:                                  yyval.ee = CurrentExpr;
                    639:                                } break;
                    640: case 49:
                    641: { yyval.ee = E_Id( yypvt[-0].ss ); } break;
                    642: case 50:
                    643: { yyval.ee = E_IConst( yypvt[-0].ll ); } break;
                    644: case 51:
                    645: { yyval.ee = E_Unary( O_REF, yypvt[-0].ee ); } break;
                    646: case 52:
                    647: { yyval.ee = E_Unary( O_MINUS, yypvt[-0].ee ); } break;
                    648: case 53:
                    649: { yyval.ee = E_Binary( yypvt[-2].ee, O_MINUS, yypvt[-0].ee ); } break;
                    650: case 54:
                    651: { yyval.ee = E_Binary( yypvt[-2].ee, O_MOD, yypvt[-0].ee ); } break;
                    652: case 55:
                    653: { yyval.ee = E_Binary( yypvt[-2].ee, O_MULT, yypvt[-0].ee ); } break;
                    654: case 56:
                    655: { yyval.ee = E_Binary( yypvt[-2].ee, O_DIV, yypvt[-0].ee ); } break;
                    656: case 57:
                    657: { yyval.ee = E_Binary( yypvt[-2].ee, O_PLUS, yypvt[-0].ee ); } break;
                    658: case 58:
                    659: { yyval.ee = E_Binary( yypvt[-3].ee, O_INDEX, yypvt[-1].ee );} break;
                    660: case 59:
                    661: { yyval.ee = yypvt[-1].ee; } break;
                    662: case 60:
                    663: { yyval.ee = yypvt[-0].ee; } break;
                    664: case 61:
                    665: { yyval.ee = E_Binary( yypvt[-2].ee, O_COMMA, yypvt[-0].ee ); } break;
                    666:                }
                    667:                goto yystack;  /* stack new state and value */
                    668: 
                    669:        }

unix.superglobalmegacorp.com

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