Annotation of researchv9/jtools/src/pi/gram.c, revision 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.