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

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

?? cc3.c

?? 功能強(qiáng)大的小型 c 編譯器,適合學(xué)習(xí)編譯原理,操作系統(tǒng)
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
        }
      }
    else is[ST] = addsym(sname, FUNCTION, INT, 0, 0, &glbptr, AUTOEXT);
    return 0;
    }
  if(constant(is) == 0) experr();
  return 0;
  }

experr() {
  error("invalid expression");
  gen(GETw1n, 0);
  skip();
  }
 
callfunc(ptr)  char *ptr; {      /* symbol table entry or 0 */
  int nargs, const, val;
  nargs = 0;
  blanks();                      /* already saw open paren */
  while(streq(lptr, ")") == 0) {
    if(endst()) break;
    if(ptr) {
      expression(&const, &val);
      gen(PUSH1, 0);
      }
    else {
      gen(PUSH1, 0);
      expression(&const, &val);
      gen(SWAP1s, 0);            /* don't push addr */
      }
    nargs = nargs + BPW;         /* count args*BPW */
    if(match(",") == 0) break;
    }
  need(")");
  if(streq(ptr + NAME, "CCARGC") == 0) gen(ARGCNTn, nargs >> LBPW);
  if(ptr) gen(CALLm, ptr);
  else    gen(CALL1, 0);
  gen(ADDSP, csp + nargs);
  }

/*
** true if is2's operand should be doubled
*/
double(oper, is1, is2) int oper, is1[], is2[]; {
  if((oper != ADD12 && oper != SUB12)
  || (is1[TA] >> 2 != BPW)
  || (is2[TA])) return 0;
  return 1;
  }

step(oper, is, oper2) int oper, is[], oper2; {
  fetch(is);
  gen(oper, is[TA] ? (is[TA] >> 2) : 1);
  store(is);
  if(oper2) gen(oper2, is[TA] ? (is[TA] >> 2) : 1);
  }

store(is)  int is[]; {
  char *ptr;
  if(is[TI]) {                    /* putstk */
    if(is[TI] >> 2 == 1)
         gen(PUTbp1, 0);
    else gen(PUTwp1, 0);
    }
  else {                          /* putmem */
    ptr = is[ST];
    if(ptr[IDENT] != POINTER
    && ptr[TYPE] >> 2 == 1)
         gen(PUTbm1, ptr);
    else gen(PUTwm1, ptr);
    }
  }

fetch(is) int is[]; {
  char *ptr;
  ptr = is[ST];
  if(is[TI]) {                                   /* indirect */
    if(is[TI] >> 2 == BPW)     gen(GETw1p,  0);
    else {
      if(ptr[TYPE] & UNSIGNED) gen(GETb1pu, 0);
      else                     gen(GETb1p,  0);
      }
    } 
  else {                                         /* direct */
    if(ptr[IDENT] == POINTER
    || ptr[TYPE] >> 2 == BPW)  gen(GETw1m,  ptr); 
    else {
      if(ptr[TYPE] & UNSIGNED) gen(GETb1mu, ptr);
      else                     gen(GETb1m,  ptr);
      }
    }
  }

constant(is)  int is[]; {
  int offset;
  if     (is[TC] = number(is + CV)) gen(GETw1n,  is[CV]);
  else if(is[TC] = chrcon(is + CV)) gen(GETw1n,  is[CV]);
  else if(string(&offset))          gen(POINT1l, offset);
  else return 0;
  return 1;
  }

number(value)  int *value; {
  int k, minus;
  k = minus = 0;
  while(1) {
    if(match("+")) ;
    else if(match("-")) minus = 1;
    else break;
    }
  if(isdigit(ch) == 0) return 0;
  if(ch == '0') {
    while(ch == '0') inbyte();
    if(toupper(ch) == 'X') {
      inbyte();
      while(isxdigit(ch)) {
        if(isdigit(ch))
             k = k*16 + (inbyte() - '0');
        else k = k*16 + 10 + (toupper(inbyte()) - 'A');
        }
      }
    else while (ch >= '0' && ch <= '7')
      k = k*8 + (inbyte() - '0');
    }
  else while (isdigit(ch)) k = k*10 + (inbyte() - '0');
  if(minus) {
    *value = -k;
    return (INT);
    }
  if((*value = k) < 0) return (UINT);
  else                 return (INT);
  }

chrcon(value)  int *value; {
  int k;
  k = 0;
  if(match("'") == 0) return 0;
  while(ch != '\'') k = (k << 8) + (litchar() & 255);
  gch();
  *value = k;
  return (INT);
  }

string(offset) int *offset; {
  char c;
  if(match(quote) == 0) return 0;
  *offset = litptr;
  while (ch != '"') {
    if(ch == 0) break;
    stowlit(litchar(), 1);
    }
  gch();
  litq[litptr++] = 0;
  return 1;
  }

stowlit(value, size) int value, size; {
  if((litptr+size) >= LITMAX) {
    error("literal queue overflow");
    abort(ERRCODE);
    }
  putint(value, litq+litptr, size);
  litptr += size;
  }

litchar() {
  int i, oct;
  if(ch != '\\' || nch == 0) return gch();
  gch();
  switch(ch) {
    case 'n': gch(); return NEWLINE;
    case 't': gch(); return  9;  /* HT */
    case 'b': gch(); return  8;  /* BS */
    case 'f': gch(); return 12;  /* FF */
    }
  i = 3;
  oct = 0;
  while((i--) > 0 && ch >= '0' && ch <= '7')
    oct = (oct << 3) + gch() - '0';
  if(i == 2) return gch();
  else       return oct;
  }

/***************** pipeline functions ******************/

/*
** skim over terms adjoining || and && operators
*/
skim(opstr, tcode, dropval, endval, level, is)
  char *opstr;
  int tcode, dropval, endval, (*level)(), is[]; {
  int k, droplab, endlab;
  droplab = 0;
  while(1) {
    k = down1(level, is);
    if(nextop(opstr)) {
      bump(opsize);
      if(droplab == 0) droplab = getlabel();
      dropout(k, tcode, droplab, is);
      }
    else if(droplab) {
      dropout(k, tcode, droplab, is);
      gen(GETw1n, endval);
      gen(JMPm, endlab = getlabel());
      gen(LABm, droplab);
      gen(GETw1n, dropval);
      gen(LABm, endlab);
      is[TI] = is[TA] = is[TC] = is[CV] = is[SA] = 0;
      return 0;
      }
    else return k;
    }
  }

/*
** test for early dropout from || or && sequences
*/
dropout(k, tcode, exit1, is)
  int k, tcode, exit1, is[]; {
  if(k) fetch(is);
  else if(is[TC]) gen(GETw1n, is[CV]);
  gen(tcode, exit1);          /* jumps on false */
  } 

/*
** drop to a lower level
*/
down(opstr, opoff, level, is)
  char *opstr;  int opoff, (*level)(), is[]; {
  int k;
  k = down1(level, is);
  if(nextop(opstr) == 0) return k;
  if(k) fetch(is);
  while(1) {
    if(nextop(opstr)) {
      int is2[7];     /* allocate only if needed */
      bump(opsize);
      opindex += opoff;
      down2(op[opindex], op2[opindex], level, is, is2);
      }
    else return 0;
    }
  }

/*
** unary drop to a lower level
*/
down1(level, is) int (*level)(), is[]; {
  int k, *before, *start;
  setstage(&before, &start);
  k = (*level)(is);
  if(is[TC]) clearstage(before, 0);  /* load constant later */
  return k;
  }

/*
** binary drop to a lower level
*/
down2(oper, oper2, level, is, is2)
  int oper, oper2, (*level)(), is[], is2[]; {
  int *before, *start;
  char *ptr;
  setstage(&before, &start);
  is[SA] = 0;                     /* not "... op 0" syntax */
  if(is[TC]) {                    /* consant op unknown */
    if(down1(level, is2)) fetch(is2);
    if(is[CV] == 0) is[SA] = snext;
    gen(GETw2n, is[CV] << double(oper, is2, is));
    }
  else {                          /* variable op unknown */
    gen(PUSH1, 0);                /* at start in the buffer */
    if(down1(level, is2)) fetch(is2);
    if(is2[TC]) {                 /* variable op constant */
      if(is2[CV] == 0) is[SA] = start;
      csp += BPW;                 /* adjust stack and */
      clearstage(before, 0);      /* discard the PUSH */
      if(oper == ADD12) {         /* commutative */
        gen(GETw2n, is2[CV] << double(oper, is, is2));
        }
      else {                      /* non-commutative */
        gen(MOVE21, 0);
        gen(GETw1n, is2[CV] << double(oper, is, is2));
        }
      }
    else {                        /* variable op variable */
      gen(POP2, 0);
      if(double(oper, is, is2)) gen(DBL1, 0);
      if(double(oper, is2, is)) gen(DBL2, 0);
      }
    }
  if(oper) {
    if(nosign(is) || nosign(is2)) oper = oper2;
    if(is[TC] = is[TC] & is2[TC]) {               /* constant result */
      is[CV] = calc(is[CV], oper, is2[CV]);
      clearstage(before, 0);  
      if(is2[TC] == UINT) is[TC] = UINT;
      }
    else {                                        /* variable result */
      gen(oper, 0);
      if(oper == SUB12
      && is [TA] >> 2 == BPW
      && is2[TA] >> 2 == BPW) { /* difference of two word addresses */
        gen(SWAP12, 0);
        gen(GETw1n, 1);
        gen(ASR12, 0);          /* div by 2 */
        }
      is[OP] = oper;            /* identify the operator */
      }
    if(oper == SUB12 || oper == ADD12) {
      if(is[TA] && is2[TA])     /*  addr +/- addr */
        is[TA] = 0;
      else if(is2[TA]) {        /* value +/- addr */
        is[ST] = is2[ST];
        is[TI] = is2[TI];
        is[TA] = is2[TA];
        }
      }
    if(is[ST] == 0 || ((ptr = is2[ST]) && (ptr[TYPE] & UNSIGNED)))
      is[ST] = is2[ST];
    }
  }

/*
** unsigned operand?
*/
nosign(is) int is[]; {
  char *ptr;
  if(is[TA]
  || is[TC] == UINT
  || ((ptr = is[ST]) && (ptr[TYPE] & UNSIGNED))
    ) return 1;
  return 0;
  }

/*
** calcualte signed constant result
*/
calc(left, oper, right) int left, oper, right; {
  switch(oper) {
    case ADD12: return (left  +  right); 
    case SUB12: return (left  -  right);
    case MUL12: return (left  *  right); 
    case DIV12: return (left  /  right);
    case MOD12: return (left  %  right); 
    case EQ12:  return (left  == right); 
    case NE12:  return (left  != right);
    case LE12:  return (left  <= right); 
    case GE12:  return (left  >= right);
    case LT12:  return (left  <  right); 
    case GT12:  return (left  >  right);
    case AND12: return (left  &  right);
    case OR12:  return (left  |  right);
    case XOR12: return (left  ^  right); 
    case ASR12: return (left  >> right); 
    case ASL12: return (left  << right);
    } 
  return (calc2(left, oper, right));
  }

/*
** calcualte unsigned constant result
*/
calc2(left, oper, right) unsigned left, right; int oper; {
  switch(oper) {
    case MUL12u: return (left  *  right); 
    case DIV12u: return (left  /  right);
    case MOD12u: return (left  %  right); 
    case LE12u:  return (left  <= right); 
    case GE12u:  return (left  >= right);
    case LT12u:  return (left  <  right); 
    case GT12u:  return (left  >  right);
    } 
  return (0);
  }

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利精品视频| 精品国产一区二区国模嫣然| 久久成人久久爱| 亚洲激情自拍偷拍| 欧美精品一区二区在线观看| 色先锋久久av资源部| 韩国成人福利片在线播放| 一区二区欧美国产| 国产精品久久久久精k8| 久久久久久一二三区| 欧美日韩精品一区二区三区| 91在线观看成人| 成人免费不卡视频| 国产一区二区三区四| 日本欧美在线看| 午夜国产精品一区| 亚洲午夜精品在线| 日韩久久一区二区| 国产精品久久影院| 久久精品日韩一区二区三区| 日韩午夜激情免费电影| 欧美日韩国产美女| 欧美综合一区二区| 日本精品免费观看高清观看| 成人av网站在线观看| 懂色av一区二区三区蜜臀| 国产麻豆精品theporn| 久久国产精品一区二区| 日本网站在线观看一区二区三区| 亚洲va韩国va欧美va| 亚洲国产欧美在线| 亚洲国产综合91精品麻豆| 亚洲天堂免费看| 亚洲免费观看高清完整版在线观看| 国产精品嫩草影院av蜜臀| 日本一区二区三区久久久久久久久不 | 久久精品99久久久| 日韩和欧美一区二区| 亚洲成人av电影| 亚洲高清三级视频| 日韩成人精品在线观看| 全国精品久久少妇| 久久精品噜噜噜成人av农村| 韩国v欧美v亚洲v日本v| 国产精品综合av一区二区国产馆| 国产高清在线观看免费不卡| 国产高清不卡二三区| zzijzzij亚洲日本少妇熟睡| 91在线porny国产在线看| 在线观看一区二区精品视频| 欧美日韩国产综合草草| 欧美一区二区在线免费观看| 日韩欧美一级二级三级久久久| 日韩欧美亚洲一区二区| 久久亚洲精华国产精华液| 久久精品免视看| 一区在线观看视频| 一区二区三区精品久久久| 午夜视频一区在线观看| 精品一区精品二区高清| 成人黄色av电影| 91成人免费在线| 日韩一区二区在线看片| 亚洲国产精品ⅴa在线观看| 亚洲欧洲综合另类在线| 天天av天天翘天天综合网色鬼国产| 蜜桃视频第一区免费观看| 国产麻豆欧美日韩一区| 在线观看网站黄不卡| 精品久久人人做人人爽| 中文字幕一区av| 青青草精品视频| 99国产一区二区三精品乱码| 欧美精品在线观看播放| 国产午夜亚洲精品理论片色戒| 亚洲美女屁股眼交| 久久精品av麻豆的观看方式| 99精品欧美一区二区三区小说 | 亚洲国产激情av| 亚洲国产日日夜夜| 国产高清精品在线| 欧美嫩在线观看| 中文字幕在线一区免费| 免费在线看一区| 色婷婷亚洲综合| 精品国精品国产| 一区二区欧美精品| 国产不卡视频在线播放| 欧美猛男男办公室激情| 国产三级一区二区| 污片在线观看一区二区 | 精品少妇一区二区| 亚洲在线中文字幕| 成人午夜精品在线| 日韩美女一区二区三区| 亚洲国产综合在线| 不卡视频一二三| www国产亚洲精品久久麻豆| 一区二区三区免费| av激情成人网| 亚洲精品一区二区三区精华液 | 久久人人爽人人爽| 日本视频中文字幕一区二区三区 | 精品久久久久久综合日本欧美| 亚洲免费成人av| 成人黄色av网站在线| 精品久久久久久久一区二区蜜臀| 亚洲一区免费观看| 91色.com| 国产精品久久久久久久久图文区| 寂寞少妇一区二区三区| 欧美高清一级片在线| 亚洲女人****多毛耸耸8| 成人av资源在线观看| 久久久久9999亚洲精品| 久久99久久久久| 宅男在线国产精品| 亚洲一区二区精品3399| 日本精品免费观看高清观看| 亚洲欧洲美洲综合色网| 国产99一区视频免费| 亚洲精品一区二区三区香蕉| 久久福利资源站| 欧美成人一区二区三区片免费| 午夜久久电影网| 欧美日韩一卡二卡三卡| 午夜伦欧美伦电影理论片| 欧美在线小视频| 亚洲福利视频三区| 欧美无砖专区一中文字| 亚洲一区二区视频在线| 欧美少妇性性性| 视频一区免费在线观看| 91精品国产综合久久久久| 日本中文在线一区| 日韩视频中午一区| 久久国产人妖系列| 久久综合丝袜日本网| 国产黑丝在线一区二区三区| 国产欧美精品一区aⅴ影院| 成人av动漫在线| 亚洲嫩草精品久久| 欧美日韩一卡二卡三卡 | 91在线云播放| 一区二区三区国产豹纹内裤在线| 日本乱码高清不卡字幕| 午夜精品久久久久久不卡8050| 欧美精品丝袜久久久中文字幕| 日本麻豆一区二区三区视频| 日韩美一区二区三区| 国产成人在线电影| 亚洲欧美自拍偷拍色图| 在线观看一区二区视频| 日韩一区精品字幕| 久久先锋影音av| 91亚洲精华国产精华精华液| 亚洲精品一卡二卡| 欧美一区二区三区小说| 国产一区 二区| 亚洲精品久久嫩草网站秘色| 欧美美女网站色| 国产精品性做久久久久久| 亚洲欧美视频在线观看视频| 欧美色倩网站大全免费| 精品一二线国产| 亚洲素人一区二区| 欧美美女网站色| 成人综合婷婷国产精品久久| 一片黄亚洲嫩模| 精品久久久久99| 色偷偷久久一区二区三区| 毛片一区二区三区| 日韩理论片在线| 日韩视频在线一区二区| jizzjizzjizz欧美| 蜜桃久久av一区| 亚洲色图欧美偷拍| 欧美精品一区视频| 在线精品国精品国产尤物884a| 国产在线一区二区综合免费视频| 亚洲伦在线观看| 欧美zozozo| 欧美性大战xxxxx久久久| 国产精品一二一区| 午夜精品久久久久久久| 国产精品乱人伦中文| 欧美一级免费大片| 在线中文字幕不卡| 国产精品一区二区三区四区 | 亚洲1区2区3区视频| 中文字幕免费在线观看视频一区| 精品1区2区3区| av午夜一区麻豆| 经典三级在线一区| 亚洲福利电影网| 国产精品久久久久久户外露出| 日韩区在线观看| 欧美日韩小视频| 91麻豆国产福利在线观看| 国产精品自拍一区|