亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? engine.c

?? 編譯器的辭法分析器工具
?? C
字號(hào):
/*   parser suite - and / or / nothing / something  parsers   parser = [token] -> ([token],status)       implemented as sideeffecting on [token], returns status.*/# include "cc.h"/* for debugging: allow some error codes to be listed out by evaluate() * before terminating */# define MAXERRS 10/* can choose that the runtime stack be remade just in time every * time that it is needed. Uncomment next line if wanted.  There * is a 20% slowdown.# define DYNAMIC_STACK_RESIZING */int p_evaluate ()/* * This is the interpreter. It runs the instruction block * starting at the (global) pc point with the evaluation stack pointer * at (global) value, and returns the address of the next block of code when * it exits. */{        static ACTION *a;        static OPCODE n;        static int nargs=0;         /* counting args of an action */        static int nerrs=0;         /* how many times we've blown it */        static PARAM args[MAXARGS]; /* local stack for action args *//*      int pc;                     *//* use global program counter now *//*      STACKVALUE *value;          *//* & global stack pointer instead */                                      /* reset the evaluation stack */# ifdef DYNAMIC_STACK_RESIZING        extern void mkstack(), freestack();/*   precc_data.stacksize = 3*((int)(pstr-buffer)); */    if (stack == NULL)      mkstack ();    if (stack == NULL){      fprintf(stderr,"error: not enough memory (%d) for runtime stack\n",             precc_data.stacksize);      p_exit (1);    }# endif    value = &stack[0];loop:    /* place a stop at the end of program space for safety if worried */    /* pcode(program[maxprogramsize-1])=EXIT; */#ifndef __MSDOS__    instr=program[pc++];    n=Opcode(instr);    switch (n)#else   /* do it quickly to avoid MSDOS bug */        switch (n = Opcode(instr=program[pc++]))#endif        {        case CNST:      /* this is a literal */            /* there is no need to do this now! Actions don't read the               attribute stack any more */            if (precc_data.stacktokens)                 pushvalue(Value(instr));            break;        case NOP:       /* treat it as a exit */             /* fallthrough*/        case EXIT:      /* end of code block */# ifdef DYNAMIC_STACK_RESIZING            freestack ();# endif            return (pc);        case INCR:      /* increment stack pointer */            /* this instruction should never be generated any more */            /* value+=(int)Param(instr); */            break;        case PARM:        /* we want to try using our own local stack ..                         */            args[nargs++] = Param(instr);                        /* PARMs always come together before a FUNC. */                        /* The rightmost arg is first to appear. */            break;        case FUNC:      /*  we are using our own local arg stack:                         */# define ARG(N) (args[N])# define PREPARE(N)            a = Action(instr);            if (a)                switch(nargs)                {   /* I ASSUME args are evaluated left to right */                        case 16: PREPARE(16);                                 (*a) (ARG(15),ARG(14),ARG(13),ARG(12),                                    ARG(11),ARG(10),ARG(9),ARG(8),                                    ARG(7),ARG(6),ARG(5),ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 15: PREPARE(15);                                 (*a) (ARG(14),ARG(13),ARG(12),                                    ARG(11),ARG(10),ARG(9),ARG(8),                                    ARG(7),ARG(6),ARG(5),ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 14: PREPARE(14);                                 (*a) (ARG(13),ARG(12),                                    ARG(11),ARG(10),ARG(9),ARG(8),                                    ARG(7),ARG(6),ARG(5),ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 13: PREPARE(13);                                 (*a) (ARG(12),                                    ARG(11),ARG(10),ARG(9),ARG(8),                                    ARG(7),ARG(6),ARG(5),ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 12: PREPARE(12);                                 (*a) (ARG(11),ARG(10),ARG(9),ARG(8),                                    ARG(7),ARG(6),ARG(5),ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 11: PREPARE(11);                                 (*a) (ARG(10),ARG(9),ARG(8),                                    ARG(7),ARG(6),ARG(5),ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 10: PREPARE(10);                                 (*a) (ARG(9),ARG(8),                                    ARG(7),ARG(6),ARG(5),ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 9:  PREPARE(9);                                 (*a) (ARG(8),                                    ARG(7),ARG(6),ARG(5),ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 8:  PREPARE(8);                                 (*a) (ARG(7),ARG(6),ARG(5),ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 7:  PREPARE(7);                                 (*a) (ARG(6),ARG(5),ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 6:  PREPARE(6);                                 (*a) (ARG(5),ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 5:  PREPARE(5);                                 (*a) (ARG(4),                                    ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 4:  PREPARE(4);                                 (*a) (ARG(3),ARG(2),ARG(1),ARG(0));                                break;                        case 3:  PREPARE(3);                                 (*a) (ARG(2),ARG(1),ARG(0));                                break;                        case 2:  PREPARE(2);                                 (*a) (ARG(1),ARG(0));                                break;                        case 1:  PREPARE(1);                                 (*a) (ARG(0));                                break;                        case 0:  PREPARE(0);                                (*a) ();                                break;                        default:                fprintf(stderr,                "error: too many args (%d) in action call\n", nargs);                fprintf(stderr,"     : program counter: %d\n",pc);                fprintf(stderr,"     : line number    : %d\n",yylineno);                p_exit(1);                }# undef PREPARE# undef ARG                nargs=0;         /*  used up all the args */                break;        default:            fprintf(stderr,"\"engine\" module reports a client has overwritten the\n");            fprintf(stderr,"program area it is interpreting. This foreign code will be\n");            fprintf(stderr,"skipped for now but other insertions may not be detected\n");            fprintf(stderr,"and could cause a program crash. The following may be\n");            fprintf(stderr,"useful for debugging purposes:\n\n");            fprintf(stderr,"error: illegal opcode (%d)\n",n);            fprintf(stderr,"     : program counter(%d)\n",pc);            fprintf(stderr,"     : line number    (%d)\n",yylineno);            if (nerrs++ < MAXERRS)               break;             /* allow a retry */            fprintf(stderr,"engine: Too many errors (%u)\n",MAXERRS);            p_exit(1);            return (pc);        }        goto loop;}void readerror(n)/* raise an error because the read buffer has overflowed */int n;{    fprintf(stderr,    "\"engine\" module reports that the read buffer has overflowed.\n");    fprintf(stderr,    "It is currently set at %d tokens and it has read %d tokens.\n",    precc_data.readbuffersize, n);    fprintf(stderr,"To prevent a reoccurrence, insert more cut marks (!) in the definition\n");    fprintf(stderr,"script or increase the READBUFFERSIZE macro definition.\n");    p_exit(1);}/* get1token() is the ONLY place I call yylex() - it is the * interface with the lexer and I am trying to give it most * rights over pstr and maxp too. */TOKEN    get1token()/* Yylex() a token into the NEXT position for pstr if we are currently   at pstr=maxp, and increment pstr. Otherwise just increment pstr   and return the token we see.   Also get the matching attribute into the lvbuff, increase maxp if   needed.   Return EOF for fail and the token otherwise. Note that pstr is always   incremented by this call. */{    extern int yytchar;    if (++pstr <= maxp)        return *pstr;    /* there was a read ahead token available */    if (yytchar==EOF)    /* we got EOF before already */       return (TOKEN)EOF;                         /* a check that I never used to do, for speed,                          * but which seemed to be the cause of most bangs.                          */    if (pstr - buffer >= precc_data.readbuffersize)        readerror(pstr - buffer);    yybuffer=pstr;       /* we give yylex its buffer */    *pstr = yylex();     /* we read yylex's return token */                         /* just in case yylex forgot to tell us */    if (yytchar==EOF)            return (TOKEN)EOF;                         /* we read yylex's stashed attribute */    lvbuff[(int)(pstr - buffer)] = yylval;    maxp=pstr;           /* we're only here because we had maxp < pstr */    return *pstr;        /* everybody happy */}void realignbuffer()/* set pstr back to buffer so that the token we have just read now * seems to be in the first buffer position. */{     int n; /* the number of readahead tokens */     n = (int)(maxp - pstr);     /* get the first token */     *buffer = *pstr;     *lvbuff = lvbuff[(int)(pstr - buffer)];     /* now get the rest */     if (n>0)     {         memcpy(buffer+1,pstr+1,n*sizeof(TOKEN));         memcpy(lvbuff+1,lvbuff+(int)(pstr - buffer) + 1,n*sizeof(VALUE));     }     pstr = buffer;     maxp = pstr + n;}VOID    p_runline (p)/* discharge actions and run parser p */PARSER *p;{        static STATUS tok;        /* maxp = pstr                = buffer;    * - is now set by our caller */        pc = 0;             /* program start address */        fptr  = fstack+1;   /* frame stack zeroed -- hooray ! */        tok   = (*p) ();    /* call the parser designated as entry point */        if (GOODSTATUS(tok))        {                   /* same as p_uniq0() */            pushEXIT;            pc = 0;         /* program start address */            pc = p_evaluate (); /* evaluate starts with (pc=0) */            pc=0;            passcount++;                            /* if an error occurred, you might                             * want to look at program[pc-1] now */            if (*pstr)                zer_error();/* incomplete parse */        }        else            bad_error() ;   /* failed parse */}VOID  p_run (p)/*  Read lines from terminal, parse them, and if they are good according to p,  execute the program that p built up. If the line is bad, re-echo it -  thats the default error action, anyhow.*/PARSER *p;{          /* yylineno=0;  - no longer set; inherit globals instead */          /* passcount=0; - no longer set; inherit globals instead */          p_entry = 0;               /* the error parser */          while (1)          switch(setjmp(jmpb))       /* longjmp here with 1 on error */          {             case 0:                 /* normal continuation */                    precc_begin ();  /* user defined setup stuff */                    if(!pstr)        /* not set yet! It's the */                    {                /* first time through */                        pstr = maxp                             = buffer; /* or - 1 ? */                        *pstr = 0;   /* establish canonical situation */                    }         /* else we got here with pstr set but *pstr = 0 because the          * parse read everything successfully, including a final EOL,          * so we have to skip the 0 and get another token. Then we          * realign the buffer so that the new token is first. What a          * good idea!          */                    if (*pstr == 0)  /* increment pstr */                    {                        if (get1token() == (TOKEN)EOF)                        {            /* passed EOF */                             precc_end ();                             return;                        }                    }         /* But can we get here successfully with *pstr nonzero? and          * if so what do we do with the token? That would be a ZER_ERROR          * which would have invoked the error handler and jumped elsewhere.          *          * I think we just realign so that the token is first, which means          * we are in danger of reparsing it, but the alternative is to          * throw it away. To throw it away, remove the if(!*pstr) above.          */                    else  /* debug trap - seems never to be sprung */                    {                       pstr = pstr;                    }         /* now we have a genuine token, make it first */                    realignbuffer();                    p_runline (p);                    break;             default:                /* error action */         /* we had an error, which means that there are probably read          * ahead tokens to deal with. Now we are about to apply our          * reserve parser to them. It had better be very forgiving          * or we will be in trouble.          */         /* should we pull a token to prevent same error again?          * maybe, but why? It's the error parser's lookout.          */         /* we realign the buffer because there will be no backtrack */                    realignbuffer();                    if (p_entry)                      p_runline (p_entry);        /* I hope that ate everything OK, and it is time to behave         * normally again.         */                    break;          }        /* go round the loop */}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕在线视频一区| 久久在线观看免费| 国产精品一区二区三区网站| 亚洲欧美国产毛片在线| 精品欧美黑人一区二区三区| 色综合天天综合网天天看片| 国内精品第一页| 性久久久久久久久久久久| 日本一区二区视频在线观看| 欧美一区二区啪啪| 欧美国产日本韩| 欧美日韩第一区日日骚| 99国产精品久久久久| 国产一区二区三区四| 亚洲国产一二三| 国产精品久久毛片av大全日韩| 日韩久久精品一区| 欧美精品777| 日本伦理一区二区| jvid福利写真一区二区三区| 国产精品白丝av| 久久国内精品视频| 日本午夜一本久久久综合| 一区二区三区欧美| 亚洲视频 欧洲视频| 国产日韩精品久久久| 久久综合九色欧美综合狠狠| 91精品婷婷国产综合久久性色 | 色8久久精品久久久久久蜜| 国产乱子轮精品视频| 日本午夜精品视频在线观看 | 中文文精品字幕一区二区| 3d动漫精品啪啪1区2区免费| 欧美日韩视频不卡| 欧美三级午夜理伦三级中视频| 色先锋资源久久综合| 91在线porny国产在线看| 不卡欧美aaaaa| 成人app在线观看| caoporm超碰国产精品| 国产成人免费视频一区| 国产成人亚洲综合a∨婷婷图片| 九九视频精品免费| 国产在线一区观看| 国产成人在线视频免费播放| 国产91精品露脸国语对白| 成人在线综合网| 成人动漫av在线| 不卡一区二区三区四区| 色哟哟日韩精品| 欧美中文字幕一区| 欧美日韩精品福利| 日韩欧美一区二区在线视频| 精品播放一区二区| 亚洲国产精品99久久久久久久久 | 亚洲国产日韩在线一区模特| 亚洲国产成人tv| 奇米一区二区三区| 国产高清不卡一区二区| 成人av在线看| 欧美色图免费看| 欧美一级在线观看| 2020国产精品自拍| 国产精品国产精品国产专区不片| 亚洲精品videosex极品| 天天色天天操综合| 国产一区二区中文字幕| kk眼镜猥琐国模调教系列一区二区| 色拍拍在线精品视频8848| 欧美另类一区二区三区| 久久久久久久综合狠狠综合| 国产精品国产自产拍高清av王其 | 日日摸夜夜添夜夜添国产精品| 美女视频黄免费的久久| 丰满少妇久久久久久久| 欧美亚洲动漫另类| 精品伦理精品一区| 亚洲乱码国产乱码精品精的特点| 婷婷久久综合九色综合绿巨人 | 亚洲国产毛片aaaaa无费看| 久久不见久久见免费视频7| av电影一区二区| 欧美一区二区三区男人的天堂| 国产午夜亚洲精品羞羞网站| 亚洲午夜久久久久久久久久久| 久久精品国产一区二区| 一本色道亚洲精品aⅴ| 日韩欧美精品在线| 一区二区三区中文字幕精品精品| 老色鬼精品视频在线观看播放| 99热国产精品| 欧美第一区第二区| 亚洲综合色成人| 国产成人啪免费观看软件| 欧美久久久久久蜜桃| 中文字幕中文字幕一区二区 | 午夜精品视频在线观看| 国产白丝精品91爽爽久久| 5月丁香婷婷综合| 自拍偷在线精品自拍偷无码专区 | 色狠狠av一区二区三区| 精品区一区二区| 亚洲国产成人va在线观看天堂| 丁香一区二区三区| 日韩你懂的电影在线观看| 亚洲一二三区在线观看| aaa亚洲精品一二三区| 精品福利一二区| 日韩精品亚洲专区| 色视频成人在线观看免| 国产精品天天摸av网| 韩日av一区二区| 欧美日韩国产小视频在线观看| |精品福利一区二区三区| 国产麻豆精品视频| 精品国产91洋老外米糕| 性感美女极品91精品| 在线视频国内一区二区| 国产精品久久久久aaaa樱花| 国产99久久精品| 久久―日本道色综合久久| 久久国产精品第一页| 欧美日韩成人综合| 亚洲电影一级片| 欧美熟乱第一页| 亚洲国产精品久久人人爱蜜臀| 一本久久精品一区二区| 亚洲色图欧美激情| 99国产欧美另类久久久精品| 中文字幕中文字幕一区二区| 不卡av电影在线播放| 国产欧美精品一区二区色综合 | 欧美日韩亚洲不卡| 洋洋av久久久久久久一区| 色综合亚洲欧洲| 亚洲男人天堂av| 色狠狠桃花综合| 亚洲一区二区在线视频| 欧美日韩一区在线观看| 亚洲电影在线播放| 欧美挠脚心视频网站| 午夜电影一区二区| 日韩限制级电影在线观看| 日本欧美大码aⅴ在线播放| 欧美一级国产精品| 九一久久久久久| 久久精品男人的天堂| 成人av免费在线观看| 亚洲精品高清在线| 欧美日韩第一区日日骚| 蜜桃视频一区二区三区在线观看| 日韩视频一区二区三区 | 成人午夜伦理影院| ...xxx性欧美| 欧美日韩精品一区视频| 午夜精品一区二区三区三上悠亚| 日韩三级在线免费观看| 国产乱码一区二区三区| 亚洲三级电影全部在线观看高清| 91蜜桃免费观看视频| 亚洲成人手机在线| 亚洲一区二区三区四区在线| 欧美一区二区三区播放老司机| 国产真实精品久久二三区| 国产精品女上位| 欧美日韩精品一区二区三区| 麻豆成人91精品二区三区| 国产日韩欧美制服另类| 色偷偷成人一区二区三区91 | 精品在线你懂的| 国产精品久久久久久久蜜臀 | 色www精品视频在线观看| 亚洲成av人影院| 久久久国产一区二区三区四区小说| 成人高清在线视频| 日韩综合一区二区| 久久久九九九九| 欧美性淫爽ww久久久久无| 久久99国产精品尤物| 亚洲嫩草精品久久| 精品国产乱码久久久久久图片| 99re视频这里只有精品| 蜜臀精品久久久久久蜜臀| 国产精品久久国产精麻豆99网站 | 亚洲色图制服诱惑| 日韩视频免费直播| 色综合中文字幕国产 | 欧美一区二区在线观看| 成人永久看片免费视频天堂| 午夜精品久久久久久久久久久| 欧美激情一区二区三区蜜桃视频 | 日韩中文字幕亚洲一区二区va在线 | 国产精品欧美久久久久一区二区| 欧美性受xxxx| 成人国产视频在线观看| 秋霞午夜av一区二区三区| 亚洲视频免费看| 国产午夜精品一区二区| 欧美一区二区网站| 日本精品一区二区三区高清|