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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? cc1.c

?? 一個(gè)簡(jiǎn)單的編譯器
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
    }
  }

/*
** parse next local or argument declaration
*/
decl(type, aid, id, sz) int type, aid, *id, *sz; {
  int n, p;
  if(match("(")) p = 1;
  else           p = 0;
  if(match("*"))        {*id = POINTER;  *sz  = BPW;}
  else                  {*id = VARIABLE; *sz  = type >> 2;}
  if((n = symname(ssname)) == 0) illname();
  if(p && match(")")) ;
  if(match("(")) {
    if(!p || *id != POINTER) error("try (*...)()");
    need(")");
    }
  else if(*id == VARIABLE && match("[")) {
    *id = aid;
    if((*sz *= needsub()) == 0) {
      if(aid == ARRAY) error("need array size");
      *sz  = BPW;      /* size of pointer argument */
      }
    }
  return n;
  }

/******************** start 2nd level parsing *******************/

/*
** statement parser
*/
statement() {
  if(ch == 0 && eof) return;
  else if(amatch("char",     4)) {declloc(CHR);    ns();}
  else if(amatch("int",      3)) {declloc(INT);    ns();}
  else if(amatch("unsigned", 8)) {
    if   (amatch("char",     4)) {declloc(UCHR);   ns();}
    else {amatch("int",      3);  declloc(UINT);   ns();}
    }
  else {
    if(declared >= 0) {
      if(ncmp > 1) nogo = declared;   /* disable goto */
      gen(ADDSP, csp - declared);
      declared = -1;
      }
    if(match("{"))                 compound();
    else if(amatch("if",       2)) {doif();           lastst = STIF;}
    else if(amatch("while",    5)) {dowhile();        lastst = STWHILE;}
    else if(amatch("do",       2)) {dodo();           lastst = STDO;}
    else if(amatch("for",      3)) {dofor();          lastst = STFOR;}
    else if(amatch("switch",   6)) {doswitch();       lastst = STSWITCH;}
    else if(amatch("case",     4)) {docase();         lastst = STCASE;}
    else if(amatch("default",  7)) {dodefault();      lastst = STDEF;}
    else if(amatch("goto",     4)) {dogoto();         lastst = STGOTO;}
    else if(dolabel())                                lastst = STLABEL;
    else if(amatch("return",   6)) {doreturn(); ns(); lastst = STRETURN;}
    else if(amatch("break",    5)) {dobreak();  ns(); lastst = STBREAK;}
    else if(amatch("continue", 8)) {docont();   ns(); lastst = STCONT;}
    else if(match(";"))            errflag = 0;
    else if(match("#asm"))         {doasm();          lastst = STASM;}
    else                           {doexpr(NO); ns(); lastst = STEXPR;}
    }
  return lastst;
  }

/*
** declare local variables
*/
declloc(type)  int type;  {
  int id, sz;
  if(swactive)     error("not allowed in switch");
  if(noloc)        error("not allowed with goto");
  if(declared < 0) error("must declare first in block");
  while(1) {
    if(endst()) return;
    decl(type, ARRAY, &id, &sz);
    declared += sz;
    addsym(ssname, id, type,  sz, csp - declared, &locptr, AUTOMATIC);
    if(match(",") == 0) return;
    }
  }

compound()  {
  int savcsp;
  char *savloc;
  savcsp = csp;
  savloc = locptr;
  declared = 0;           /* may now declare local variables */
  ++ncmp;                 /* new level open */
  while (match("}") == 0)
    if(eof) {
      error("no final }");
      break;
      }
    else statement();     /* do one */
  if(--ncmp               /* close current level */
  && lastst != STRETURN
  && lastst != STGOTO)
    gen(ADDSP, savcsp);   /* delete local variable space */
  cptr = savloc;          /* retain labels */
  while(cptr < locptr) {
    cptr2 = nextsym(cptr);
    if(cptr[IDENT] == LABEL) {
      while(cptr < cptr2) *savloc++ = *cptr++;
      }
    else cptr = cptr2;
    }
  locptr = savloc;        /* delete local symbols */
  declared = -1;          /* may not declare variables */
  }

doif()  {
  int flab1, flab2;
  test(flab1 = getlabel(), YES);  /* get expr, and branch false */
  statement();                    /* if true, do a statement */
  if(amatch("else", 4) == 0) {    /* if...else ? */
    /* simple "if"...print false label */
    gen(LABm, flab1);
    return;                       /* and exit */
    }
  flab2 = getlabel();
  if(lastst != STRETURN && lastst != STGOTO)
    gen(JMPm, flab2);
  gen(LABm, flab1);    /* print false label */
  statement();         /* and do "else" clause */
  gen(LABm, flab2);    /* print true label */
  }

dowhile()  {
  int wq[4];              /* allocate local queue */
  addwhile(wq);           /* add entry to queue for "break" */
  gen(LABm, wq[WQLOOP]);  /* loop label */
  test(wq[WQEXIT], YES);  /* see if true */
  statement();            /* if so, do a statement */
  gen(JMPm, wq[WQLOOP]);  /* loop to label */
  gen(LABm, wq[WQEXIT]);  /* exit label */
  delwhile();             /* delete queue entry */
  }

dodo() {
  int wq[4];
  addwhile(wq);
  gen(LABm, wq[WQLOOP]);
  statement();
  need("while");
  test(wq[WQEXIT], YES);
  gen(JMPm, wq[WQLOOP]);
  gen(LABm, wq[WQEXIT]);
  delwhile();
  ns();
  }

dofor() {
  int wq[4], lab1, lab2;
  addwhile(wq);
  lab1 = getlabel();
  lab2 = getlabel();
  need("(");
  if(match(";") == 0) {
    doexpr(NO);           /* expr 1 */
    ns();
    }
  gen(LABm, lab1);
  if(match(";") == 0) {
    test(wq[WQEXIT], NO); /* expr 2 */
    ns();
    }
  gen(JMPm, lab2);
  gen(LABm, wq[WQLOOP]);
  if(match(")") == 0) {
    doexpr(NO);           /* expr 3 */
    need(")");
    }
  gen(JMPm, lab1);
  gen(LABm, lab2);
  statement();
  gen(JMPm, wq[WQLOOP]);
  gen(LABm, wq[WQEXIT]);
  delwhile();
  }

doswitch() {
  int wq[4], endlab, swact, swdef, *swnex, *swptr;
  swact = swactive;
  swdef = swdefault;
  swnex = swptr = swnext;
  addwhile(wq);
  *(wqptr + WQLOOP - WQSIZ) = 0;
  need("(");
  doexpr(YES);                /* evaluate switch expression */
  need(")");
  swdefault = 0;
  swactive = 1;
  gen(JMPm, endlab = getlabel());
  statement();                /* cases, etc. */
  gen(JMPm, wq[WQEXIT]);
  gen(LABm, endlab);
  gen(SWITCH, 0);             /* match cases */
  while(swptr < swnext) {
    gen(NEARm, *swptr++);
    gen(WORDn,  *swptr++);    /* case value */
    }
  gen(WORDn, 0);
  if(swdefault) gen(JMPm, swdefault);
  gen(LABm, wq[WQEXIT]);
  delwhile();
  swnext    = swnex;
  swdefault = swdef;
  swactive  = swact;
  }

docase() {
  if(swactive == 0) error("not in switch");
  if(swnext > swend) {
    error("too many cases");
    return;
    }
  gen(LABm, *swnext++ = getlabel());
  constexpr(swnext++);
  need(":");
  }

dodefault() {
  if(swactive) {
    if(swdefault) error("multiple defaults");
    }
  else error("not in switch");
  need(":");
  gen(LABm, swdefault = getlabel());
  }

dogoto() {
  if(nogo > 0) error("not allowed with block-locals");
  else noloc = 1;
  if(symname(ssname)) gen(JMPm, addlabel(NO));
  else error("bad label");
  ns();
  }

dolabel() {
  char *savelptr;
  blanks();
  savelptr = lptr;
  if(symname(ssname)) {
    if(gch() == ':') {
      gen(LABm, addlabel(YES));
      return 1;
      }
    else bump(savelptr-lptr);
    }
  return 0;
  }

addlabel(def) int def; {
  if(cptr = findloc(ssname)) {
    if(cptr[IDENT] != LABEL) error("not a label");
    else if(def) {
      if(cptr[TYPE]) error("duplicate label");
      else cptr[TYPE] = YES;
      }
    }
  else cptr = addsym(ssname, LABEL, def, 0, getlabel(), &locptr, LABEL);
  return (getint(cptr+OFFSET, 2));
  }

doreturn()  {
  int savcsp;
  if(endst() == 0) doexpr(YES);
  savcsp = csp;
  gen(RETURN, 0);
  csp = savcsp;
  }

dobreak()  {
  int *ptr;
  if((ptr = readwhile(wqptr)) == 0) return;
  gen(ADDSP, ptr[WQSP]);
  gen(JMPm, ptr[WQEXIT]);
  }

docont()  {
  int *ptr;
  ptr = wqptr;
  while (1) {
    if((ptr = readwhile(ptr)) == 0) return;
    if(ptr[WQLOOP]) break;
    }
  gen(ADDSP, ptr[WQSP]);
  gen(JMPm, ptr[WQLOOP]);
  }

doasm()  {
  ccode = 0;           /* mark mode as "asm" */
  while (1) {
    inline();
    if(match("#endasm")) break;
    if(eof)break;
    fputs(line, output);
    }
  kill();
  ccode = 1;
  }

doexpr(use) int use; {
  int const, val;
  int *before, *start;
  usexpr = use;        /* tell isfree() whether expr value is used */
  while(1) {
    setstage(&before, &start);
    expression(&const, &val);
    clearstage(before, start);
    if(ch != ',') break;
    bump(1);
    }
  usexpr = YES;        /* return to normal value */
  }

/******************** miscellaneous functions *******************/

/*
** get run options
*/
ask() {
  int i;
  i = listfp = nxtlab = 0;
  output = stdout;
  optimize = YES;
  alarm = monitor = pause = NO;
  line = mline;
  while(getarg(++i, line, LINESIZE, argcs, argvs) != EOF) {
    if(line[0] != '-' && line[0] != '/') continue;
    if(toupper(line[1]) == 'L'
    && isdigit(line[2])
    && line[3] <= ' ') {
      listfp = line[2]-'0';
      continue;
      }
    if(toupper(line[1]) == 'N'
    && toupper(line[2]) == 'O'
    && line[3] <= ' ') {
      optimize = NO;
      continue;
      }
    if(line[2] <= ' ') {
      if(toupper(line[1]) == 'A') {alarm   = YES; continue;}
      if(toupper(line[1]) == 'M') {monitor = YES; continue;}
      if(toupper(line[1]) == 'P') {pause   = YES; continue;}
      }
    fputs("usage: cc [file]... [-m] [-a] [-p] [-l#] [-no]\n", stderr);
    abort(ERRCODE);
    }
  }

/*
** input and output file opens
*/
openfile() {        /* entire function revised */
  char outfn[15];
  int i, j, ext;
  input = EOF;
  while(getarg(++filearg, pline, LINESIZE, argcs, argvs) != EOF) {
    if(pline[0] == '-' || pline[0] == '/') continue;
    ext = NO;
    i = -1;
    j = 0;
    while(pline[++i]) {
      if(pline[i] == '.') {
        ext = YES;
        break;
        }
      if(j < 10) outfn[j++] = pline[i];
      }
    if(!ext) strcpy(pline + i, ".C");
    input = mustopen(pline, "r");
    if(!files && iscons(stdout)) {
      strcpy(outfn + j, ".ASM");
      output = mustopen(outfn, "w");
      }
    files = YES;
    kill();
    return;
    }
  if(files++) eof = YES;
  else input = stdin;
  kill();
  }

/*
** open a file with error checking
*/
mustopen(fn, mode) char *fn, *mode; {
  int fd;
  if(fd = fopen(fn, mode)) return fd;
  fputs("open error on ", stderr);
  lout(fn, stderr);
  abort(ERRCODE);
  }

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区免费高清| 亚洲欧洲制服丝袜| 欧美系列在线观看| 99综合电影在线视频| 国产91清纯白嫩初高中在线观看 | 精品美女一区二区| 欧美一区二区三区在| 91超碰这里只有精品国产| 欧美日韩aaaaa| 91麻豆精品国产91久久久久久久久| 在线精品视频一区二区三四| 色成年激情久久综合| 色狠狠色噜噜噜综合网| 欧美在线色视频| 欧美精品乱码久久久久久| 欧美日韩你懂的| 欧美一级爆毛片| 亚洲精品一区在线观看| 中文字幕av一区二区三区高| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 在线电影院国产精品| 欧美精品亚洲二区| 日韩欧美www| 久久精品网站免费观看| 中文天堂在线一区| 一区二区三区在线高清| 午夜精品福利久久久| 美女尤物国产一区| 处破女av一区二区| 日本高清不卡一区| 欧美一二三四区在线| 久久久www成人免费无遮挡大片| 国产精品免费丝袜| 亚洲福利电影网| 久草这里只有精品视频| 不卡电影一区二区三区| 欧美四级电影在线观看| 精品美女被调教视频大全网站| 欧美极品少妇xxxxⅹ高跟鞋 | 国产99一区视频免费| 色婷婷久久久综合中文字幕| 制服丝袜一区二区三区| 久久精品一二三| 亚洲一区二区成人在线观看| 麻豆91小视频| 91色乱码一区二区三区| 91精品国产综合久久福利| 中文字幕欧美区| 香蕉加勒比综合久久| 亚洲品质自拍视频| 亚洲色图一区二区| 蜜桃av一区二区在线观看| 波多野结衣91| 欧美电视剧在线看免费| 综合在线观看色| 精品一区二区三区在线观看国产| 99视频国产精品| 日韩一区二区精品| 亚洲免费av高清| 欧美自拍偷拍午夜视频| 欧美精品一区在线观看| 一个色妞综合视频在线观看| 精品一区二区成人精品| 欧美色网站导航| 国产精品理论在线观看| 蜜臀精品久久久久久蜜臀 | 成人黄色av电影| 777a∨成人精品桃花网| 中文字幕在线观看一区| 色拍拍在线精品视频8848| 在线电影欧美成精品| 国产精品―色哟哟| 精品一区二区三区香蕉蜜桃| 在线观看亚洲精品| 国产精品网站导航| 精品一区二区免费在线观看| 欧美亚洲综合久久| 亚洲视频免费在线| 国产福利一区在线| 精品国产免费人成在线观看| 亚洲成人动漫av| 色综合一区二区| 国产视频一区不卡| 国内成人精品2018免费看| 欧美日韩1234| 亚洲一区二区三区四区的| k8久久久一区二区三区 | 亚洲1区2区3区视频| 91丝袜美女网| 中文欧美字幕免费| 国产精品99久久久| 久久综合九色综合久久久精品综合 | 91精品国产一区二区三区香蕉| 一区二区三区四区视频精品免费| 成人免费视频视频| 欧美国产在线观看| 国产成人免费av在线| 久久亚洲精品国产精品紫薇| 久久99久久精品| 日韩欧美国产电影| 久久国产欧美日韩精品| 91精品国产品国语在线不卡| 日韩高清一区在线| 777色狠狠一区二区三区| 日韩和欧美的一区| 91精品国产91热久久久做人人| 丝瓜av网站精品一区二区| 欧美欧美欧美欧美首页| 日韩电影在线观看电影| 555www色欧美视频| 久久精品99久久久| 精品国产不卡一区二区三区| 久久99国内精品| 久久嫩草精品久久久久| 国产成人免费在线| 中文字幕在线视频一区| 成人av小说网| 亚洲精品第一国产综合野| 欧美三级资源在线| 日韩av电影免费观看高清完整版在线观看| 欧美日韩综合不卡| 麻豆国产精品视频| 国产日韩欧美不卡在线| 波多野结衣亚洲| 亚洲一级在线观看| 欧美一级电影网站| 国产91在线观看丝袜| 日韩一区二区电影| 色就色 综合激情| 亚洲欧洲中文日韩久久av乱码| 91免费国产在线| 日韩不卡在线观看日韩不卡视频| 日韩欧美精品在线| 福利一区二区在线| 一区二区三区中文字幕| 欧美一区二区三区男人的天堂| 国内偷窥港台综合视频在线播放| 欧美国产精品专区| 欧美在线视频全部完| 久久99热这里只有精品| 中文字幕一区二区三区在线观看 | 久久久久久久久久久久久久久99 | 国模套图日韩精品一区二区| 国产欧美日韩中文久久| 色欧美88888久久久久久影院| 亚洲r级在线视频| 国产婷婷一区二区| 欧美自拍偷拍午夜视频| 国产精品中文字幕日韩精品| 一区二区视频在线看| 国产99久久久久| 国产精品电影一区二区| 欧美精品三级在线观看| 国产91精品精华液一区二区三区| 一区二区三区四区五区视频在线观看| 日韩一级片网站| 色综合视频在线观看| 麻豆高清免费国产一区| 亚洲人妖av一区二区| 欧美成人精品1314www| 91在线看国产| 国内不卡的二区三区中文字幕 | 久久久亚洲午夜电影| 在线精品视频免费观看| 国产精品一区二区在线播放| 亚洲成人综合网站| 中文字幕精品一区二区精品绿巨人 | 亚洲精品国产第一综合99久久| 日韩欧美亚洲一区二区| 色综合久久综合| 国产精品538一区二区在线| 午夜精品福利在线| 亚洲欧美日韩系列| 久久久久久久久99精品| 欧美丰满少妇xxxxx高潮对白| 9l国产精品久久久久麻豆| 国内精品国产三级国产a久久| 午夜精品久久久久久久久| 成人欧美一区二区三区| 久久久99精品免费观看不卡| 欧美一区二区三区性视频| 色婷婷综合久久| 99久久久无码国产精品| 国产精品一区二区三区四区| 久久精品久久精品| 图片区小说区国产精品视频| 亚洲免费在线视频一区 二区| av亚洲精华国产精华精华| 波多野结衣91| 久久99精品久久久| 亚洲一区国产视频| 中文字幕中文字幕一区| 久久久久国产一区二区三区四区| 日韩网站在线看片你懂的| 欧美日精品一区视频| 日本高清无吗v一区| 91麻豆6部合集magnet| 99精品久久99久久久久| www.亚洲在线| av成人免费在线观看|