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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cc2.c

?? 功能強大的小型 c 編譯器,適合學習編譯原理,操作系統
?? C
字號:
/*
** Small-C Compiler -- Part 2 -- Front End and Miscellaneous.
** Copyright 1982, 1983, 1985, 1988 J. E. Hendrix
** All rights reserved.
*/

#include <stdio.h>
#include "cc.h"

extern char
 *symtab, *macn, *macq, *pline, *mline,  optimize,
  alarm, *glbptr, *line, *lptr, *cptr, *cptr2,  *cptr3,
 *locptr, msname[NAMESIZE],  pause,  quote[2];

extern int
  *wq,  ccode,  ch,  csp,  eof,  errflag,  iflevel,
  input,  input2,  listfp,  macptr,  nch,
  nxtlab,  op[16],  opindex,  opsize,  output,  pptr,
  skiplevel,  *wqptr;

/********************** input functions **********************/

preprocess() {
  int k;
  char c;
  if(ccode) {
    line = mline;
    ifline();
    if(eof) return;
    }
  else {
    inline();
    return;
    }
  pptr = -1;
  while(ch != NEWLINE && ch) {
    if(white()) {
      keepch(' ');
      while(white()) gch();
      }
    else if(ch == '"') {
      keepch(ch);
      gch();
      while(ch != '"' || (*(lptr-1) == 92 && *(lptr-2) != 92)) {
        if(ch == NULL) {
          error("no quote");
          break;
          }
        keepch(gch());
        }
      gch();
      keepch('"');
      }
    else if(ch == 39) {
      keepch(39);
      gch();
      while(ch != 39 || (*(lptr-1) == 92 && *(lptr-2) != 92)) {
        if(ch == NULL) {
          error("no apostrophe");
          break;
          }
        keepch(gch());
        }
      gch();
      keepch(39);
      }
    else if(ch == '/' && nch == '*') {
      bump(2);
      while((ch == '*' && nch == '/') == 0) {
        if(ch) bump(1);
        else {
          ifline();
          if(eof) break;
          }
        }
      bump(2);
      }
    else if(an(ch)) {
      k = 0;
      while(an(ch) && k < NAMEMAX) {
        msname[k++] = ch;
        gch();
        }
      msname[k] = NULL;
      if(search(msname, macn, NAMESIZE+2, MACNEND, MACNBR, 0)) {
        k = getint(cptr+NAMESIZE, 2);
        while(c = macq[k++]) keepch(c);
        while(an(ch)) gch();
        }
      else {
        k = 0;
        while(c = msname[k++]) keepch(c);
        }
      }
    else keepch(gch());
    }
  if(pptr >= LINEMAX) error("line too long");
  keepch(NULL);
  line = pline;
  bump(0);
  }

keepch(c)  char c; {
  if(pptr < LINEMAX) pline[++pptr] = c;
  }

ifline() {
  while(1) {
    inline();
    if(eof) return;
    if(match("#ifdef")) {
      ++iflevel;
      if(skiplevel) continue;
      symname(msname);
      if(search(msname, macn, NAMESIZE+2, MACNEND, MACNBR, 0) == 0)
        skiplevel = iflevel;
      continue;
      }
    if(match("#ifndef")) {
      ++iflevel;
      if(skiplevel) continue;
      symname(msname);
      if(search(msname, macn, NAMESIZE+2, MACNEND, MACNBR, 0))
        skiplevel = iflevel;
      continue;
      }
    if(match("#else")) {
      if(iflevel) {
        if(skiplevel == iflevel) skiplevel = 0;
        else if(skiplevel == 0)  skiplevel = iflevel;
        }
      else noiferr();
      continue;
      }
    if(match("#endif")) {
      if(iflevel) {
        if(skiplevel == iflevel) skiplevel = 0;
        --iflevel;
        }
      else noiferr();
      continue;
      }
    if(skiplevel) continue;
    if(ch == 0) continue;
    break;
    }
  }

inline() {           /* numerous revisions */
  int k, unit;
  poll(1);           /* allow operator interruption */
  if(input == EOF) openfile();
  if(eof) return;
  if((unit = input2) == EOF) unit = input;
  if(fgets(line, LINEMAX, unit) == NULL) {
    fclose(unit);
    if(input2 != EOF)
         input2 = EOF;
    else input  = EOF;
    *line = NULL;
    }
  else if(listfp) {
    if(listfp == output) fputc(';', output);
    fputs(line, listfp);
    }
  bump(0);
  }

inbyte()  {
  while(ch == 0) {
    if(eof) return 0;
    preprocess();
    }
  return gch();
  }

/********************* scanning functions ********************/

/*
** test if next input string is legal symbol name
*/
symname(sname) char *sname; {
  int k;char c;
  blanks();
  if(alpha(ch) == 0) return (*sname = 0);
  k = 0;
  while(an(ch)) {
    sname[k] = gch();
    if(k < NAMEMAX) ++k;
    }
  sname[k] = 0;
  return 1;
  }

need(str)  char *str; {
  if(match(str) == 0) error("missing token");
  }

ns()  {
  if(match(";") == 0) error("no semicolon");
  else errflag = 0;
  }

match(lit)  char *lit; {
  int k;
  blanks();
  if(k = streq(lptr, lit)) {
    bump(k);
    return 1;
    }
  return 0;
  }

streq(str1, str2)  char str1[], str2[]; {
  int k;
  k = 0;
  while (str2[k]) {
    if(str1[k] != str2[k]) return 0;
    ++k;
    }
  return k;
 }

amatch(lit, len)  char *lit; int len; {
  int k;
  blanks();
  if(k = astreq(lptr, lit, len)) {
    bump(k);
    return 1;
    }
  return 0;
 }

astreq(str1, str2, len)  char str1[], str2[]; int len; {
  int k;
  k = 0;
  while (k < len) {
    if(str1[k] != str2[k]) break;
    /*
    ** must detect end of symbol table names terminated by
    ** symbol length in binary
    */
    if(str2[k] < ' ') break;
    if(str1[k] < ' ') break;
    ++k;
    }
  if(an(str1[k]) || an(str2[k])) return 0;
  return k;
  }

nextop(list) char *list; {
  char op[4];
  opindex = 0;
  blanks();
  while(1) {
    opsize = 0;
    while(*list > ' ') op[opsize++] = *list++;
    op[opsize] = 0;
    if(opsize = streq(lptr, op))
      if(*(lptr+opsize) != '=' && 
         *(lptr+opsize) != *(lptr+opsize-1))
         return 1;
    if(*list) {
      ++list;
      ++opindex;
      }
    else return 0;
    }
  }

blanks() {
  while(1) {
    while(ch) {
      if(white()) gch();
      else return;
      }
    if(line == mline) return;
    preprocess();
    if(eof) break;
    }
  }

white() {
  avail(YES);  /* abort on stack/symbol table overflow */
  return (*lptr <= ' ' && *lptr);
  }

gch() {
  int c;
  if(c = ch) bump(1);
  return c;
  }

bump(n) int n; {
  if(n) lptr += n;
  else  lptr  = line;
  if(ch = nch = *lptr) nch = *(lptr+1);
  }

kill() {
  *line = 0;
  bump(0);
  }

skip() {
  if(an(inbyte()))
       while(an(ch)) gch();
  else while(an(ch) == 0) {
    if(ch == 0) break;
    gch();
    }
  blanks();
  }

endst() {
  blanks();
  return (streq(lptr, ";") || ch == 0);
  }

/*********** symbol table management functions ***********/

addsym(sname, id, type, size, value, lgpp, class)
  char *sname, id, type;  int size, value, *lgpp, class; {
  if(lgpp == &glbptr) {
    if(cptr2 = findglb(sname)) return cptr2;
    if(cptr == 0) {
      error("global symbol table overflow");
      return 0;
      }
    }
  else {
    if(locptr > (ENDLOC-SYMMAX)) {
      error("local symbol table overflow");
      abort(ERRCODE);
      }
    cptr = *lgpp;
    }
  cptr[IDENT] = id;
  cptr[TYPE]  = type;
  cptr[CLASS] = class;
  putint(size, cptr + SIZE, 2);
  putint(value, cptr + OFFSET, 2);
  cptr3 = cptr2 = cptr + NAME;
  while(an(*sname)) *cptr2++ = *sname++;
  if(lgpp == &locptr) {
    *cptr2 = cptr2 - cptr3;         /* set length */
    *lgpp = ++cptr2;
    }
  return cptr;
  }

/*
** search for symbol match
** on return cptr points to slot found or empty slot
*/
search(sname, buf, len, end, max, off)
  char *sname, *buf, *end;  int len, max, off; {
  cptr  =
  cptr2 = buf+((hash(sname)%(max-1))*len);
  while(*cptr != NULL) {
    if(astreq(sname, cptr+off, NAMEMAX)) return 1;
    if((cptr = cptr+len) >= end) cptr = buf;
    if(cptr == cptr2) return (cptr = 0);
    }
  return 0;
  }

hash(sname) char *sname; {
  int i, c;
  i = 0;
  while(c = *sname++) i = (i << 1) + c;
  return i;
  }

findglb(sname)  char *sname; {
  if(search(sname, STARTGLB, SYMMAX, ENDGLB, NUMGLBS, NAME))
    return cptr;
  return 0;
  }

findloc(sname)  char *sname;  {
  cptr = locptr - 1;  /* search backward for block locals */
  while(cptr > STARTLOC) {
    cptr = cptr - *cptr;
    if(astreq(sname, cptr, NAMEMAX)) return (cptr - NAME);
    cptr = cptr - NAME - 1;
    }
  return 0;
  }

nextsym(entry) char *entry; {
  entry = entry + NAME;
  while(*entry++ >= ' ');    /* find length byte */
  return entry;
  }

/******** while queue management functions *********/  

addwhile(ptr)  int ptr[]; {
  int k;
  ptr[WQSP]   = csp;         /* and stk ptr */
  ptr[WQLOOP] = getlabel();  /* and looping label */
  ptr[WQEXIT] = getlabel();  /* and exit label */
  if(wqptr == WQMAX) {
    error("control statement nesting limit");
    abort(ERRCODE);
    }
  k = 0;
  while (k < WQSIZ) *wqptr++ = ptr[k++];
  }

readwhile(ptr) int *ptr; {
  if(ptr <= wq) {
    error("out of context");
    return 0;
    }
  else return (ptr - WQSIZ);
 }

delwhile() {
  if(wqptr > wq) wqptr -= WQSIZ;
  }

/****************** utility functions ********************/  

/*
** test if c is alphabetic
*/
alpha(c)  char c; {
  return (isalpha(c) || c == '_');
  }

/*
** test if given character is alphanumeric
*/
an(c)  char c; {
  return (alpha(c) || isdigit(c));
  }

/*
** return next avail internal label number
*/
getlabel() {
  return(++nxtlab);
  }

/*
** get integer of length len from address addr
** (byte sequence set by "putint")
*/
getint(addr, len) char *addr; int len; {
  int i;
  i = *(addr + --len);  /* high order byte sign extended */
  while(len--) i = (i << 8) | *(addr + len) & 255;
  return i;
  }

/*
** put integer i of length len into address addr
** (low byte first)
*/
putint(i, addr, len) char *addr; int i, len; {
  while(len--) {
    *addr++ = i;
    i = i >> 8;
    }
  }

lout(line, fd) char *line; int fd; {
  fputs(line, fd);
  fputc(NEWLINE, fd);
  }

/******************* error functions *********************/  

illname() {
  error("illegal symbol");
  skip();
  }

multidef(sname)  char *sname; {
  error("already defined");
  }

needlval() {
  error("must be lvalue");
  }

noiferr() {
  error("no matching #if...");
  errflag = 0;
  }

error(msg) char msg[]; {
  if(errflag) return;
  else errflag = 1;
  lout(line, stderr);
  errout(msg, stderr);
  if(alarm) fputc(7, stderr);
  if(pause) while(fgetc(stderr) != NEWLINE);
  if(listfp > 0) errout(msg, listfp);
  }

errout(msg, fp) char msg[]; int fp; {
  int k;
  k = line+2;
  while(k++ <= lptr) fputc(' ', fp);
  lout("/\\", fp);
  fputs("**** ", fp); lout(msg, fp);
  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久夜精品精品免费| 欧美在线免费观看亚洲| 久久久国际精品| 国产aⅴ综合色| 日本一区二区视频在线| 成人a免费在线看| 亚洲日本乱码在线观看| 欧美日韩二区三区| 欧美aaaaaa午夜精品| 久久久不卡网国产精品一区| 99久久伊人精品| 亚洲成人综合视频| 久久一二三国产| 91亚洲精品乱码久久久久久蜜桃| 亚洲午夜在线观看视频在线| 欧美成人一区二区三区片免费| 国产高清久久久久| 亚洲乱码国产乱码精品精可以看| 欧美日韩亚洲综合在线| 韩国三级中文字幕hd久久精品| 国产精品久久一卡二卡| 欧美性猛片aaaaaaa做受| 蜜臀精品久久久久久蜜臀| 欧美极品xxx| 91麻豆精品国产91久久久资源速度| 激情综合色丁香一区二区| 自拍偷拍欧美精品| 欧美成人一级视频| 一本大道久久a久久综合| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久久久久亚洲综合| 欧美视频一区二区三区在线观看| 久久99精品一区二区三区| 日韩毛片视频在线看| 精品国产网站在线观看| 色综合久久久久久久| 国产综合成人久久大片91| 亚洲视频一区在线观看| 26uuu国产在线精品一区二区| 日本精品视频一区二区| 东方aⅴ免费观看久久av| 日韩成人午夜精品| 自拍偷自拍亚洲精品播放| 欧美精品一区二区三区高清aⅴ| 欧美日韩在线三区| 成人av片在线观看| 国产精品综合在线视频| 日韩高清在线观看| 亚洲自拍偷拍麻豆| 国产精品美女久久久久aⅴ国产馆| 欧美一级在线视频| 欧美午夜免费电影| 色综合久久中文综合久久97| 国产一区二区视频在线播放| 日韩av在线发布| 偷拍一区二区三区四区| 亚洲欧美日本在线| 国产精品区一区二区三| 久久婷婷国产综合精品青草| 日韩欧美一二区| 欧美精品视频www在线观看| 99视频一区二区| 成av人片一区二区| 国产盗摄视频一区二区三区| 麻豆久久一区二区| 视频一区中文字幕| 五月婷婷激情综合网| 亚洲精品视频在线看| 亚洲理论在线观看| 亚洲欧洲精品成人久久奇米网| 久久免费精品国产久精品久久久久| 精品日产卡一卡二卡麻豆| 日韩一卡二卡三卡国产欧美| 欧美精品丝袜中出| 91精品综合久久久久久| 7777精品伊人久久久大香线蕉的| 欧美日韩在线一区二区| 欧美日本精品一区二区三区| 欧美丰满一区二区免费视频| 欧美电影影音先锋| 日韩一区二区在线免费观看| 日韩精品一区二区在线| 26uuu国产在线精品一区二区| 国产丝袜美腿一区二区三区| 欧美国产亚洲另类动漫| 国产精品久久国产精麻豆99网站| 国产精品国产自产拍高清av| 亚洲视频一区二区免费在线观看| 亚洲欧美成人一区二区三区| 一级女性全黄久久生活片免费| 亚洲成a人片在线不卡一二三区| 日本在线不卡一区| 黑人巨大精品欧美一区| 国产精品一区二区你懂的| 99视频精品全部免费在线| 日本韩国欧美一区| 91麻豆精品国产91久久久资源速度| 日韩免费看网站| 国产精品美女久久久久高潮| 亚洲最大色网站| 久久成人麻豆午夜电影| 国产精品一区二区三区四区| 97精品久久久久中文字幕| 欧美色综合影院| 精品国产成人系列| 中文字幕亚洲一区二区va在线| 一区二区三区在线视频免费观看 | 久久久久亚洲蜜桃| 中文字幕日韩av资源站| 午夜不卡av免费| 国产精品夜夜爽| 欧美三级电影网| 国产午夜精品美女毛片视频| 一区二区三区精品在线观看| 蜜桃av一区二区三区电影| 成人av电影在线| 日韩片之四级片| 国产精品久久久久四虎| 五月婷婷激情综合| 波多野结衣91| 91 com成人网| 国产精品国产a| 六月婷婷色综合| 在线一区二区观看| 久久久久一区二区三区四区| 亚洲无人区一区| 国产69精品久久99不卡| 8v天堂国产在线一区二区| 欧美国产日韩亚洲一区| 日本视频在线一区| 91免费国产在线| 久久亚区不卡日本| 亚洲v日本v欧美v久久精品| 国产999精品久久久久久| 欧美精品一级二级| 夜夜精品浪潮av一区二区三区| 国产91综合网| 欧美成人高清电影在线| 亚洲国产一区二区视频| www.欧美日韩| 久久男人中文字幕资源站| 日韩精品一二三| 在线一区二区三区做爰视频网站| 国产精品人成在线观看免费 | 国产成人小视频| 91精品午夜视频| 亚洲福利一二三区| 99久久精品久久久久久清纯| 国产日韩欧美一区二区三区乱码| 青青草精品视频| 欧美美女黄视频| 亚洲一二三区在线观看| 色综合久久综合网欧美综合网| 欧美激情资源网| 国产v综合v亚洲欧| 欧美变态凌虐bdsm| 久久er精品视频| 欧美大片日本大片免费观看| 日韩在线a电影| 欧美一区日本一区韩国一区| 亚洲一区二区三区视频在线| 在线观看亚洲a| 亚洲综合视频网| 欧美色电影在线| 亚洲二区视频在线| 欧美色区777第一页| 亚洲电影视频在线| 欧美高清视频一二三区 | 国产精品超碰97尤物18| 国产91在线|亚洲| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 精品精品国产高清a毛片牛牛 | 国产精品国产三级国产| 成人v精品蜜桃久久一区| 国产精品久久久久久久久动漫| 成人av高清在线| 一区二区成人在线| 欧美亚州韩日在线看免费版国语版| 一级做a爱片久久| 欧美一区二区三区在线观看| 久久99精品久久只有精品| 久久久久久久久久久久久女国产乱| 国产黄人亚洲片| 亚洲欧美日本韩国| 欧美巨大另类极品videosbest| 六月丁香婷婷久久| 国产视频视频一区| 91在线免费看| 手机精品视频在线观看| 欧美www视频| 99这里都是精品| 日韩精品免费专区| 久久久久久免费网| 99久久精品免费看| 人禽交欧美网站| 中文字幕av一区 二区| 在线观看日韩av先锋影音电影院| 日韩高清一级片| 国产精品国产三级国产aⅴ无密码| 欧美三级中文字幕|