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

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

?? cc1.c

?? 一個簡單的編譯器
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
** Small-C Compiler -- Part 1 --  Top End.
** Copyright 1982, 1983, 1985, 1988 J. E. Hendrix
** All rights reserved.
*/

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

/*
** miscellaneous storage
*/
int
  nogo,     /* disable goto statements? */
  noloc,    /* disable block locals? */
  opindex,  /* index to matched operator */
  opsize,   /* size of operator in characters */
  swactive, /* inside a switch? */
  swdefault,/* default label #, else 0 */
 *swnext,   /* address of next entry */
 *swend,    /* address of last entry */
 *stage,    /* staging buffer address */
 *wq,       /* while queue */
  argcs,    /* static argc */
 *argvs,    /* static argv */
 *wqptr,    /* ptr to next entry */
  litptr,   /* ptr to next entry */
  macptr,   /* macro buffer index */
  pptr,     /* ptr to parsing buffer */
  ch,       /* current character of input line */
  nch,      /* next character of input line */
  declared, /* # of local bytes to declare, -1 when declared */
  iflevel,  /* #if... nest level */
  skiplevel,/* level at which #if... skipping started */
  nxtlab,   /* next avail label # */
  litlab,   /* label # assigned to literal pool */
  csp,      /* compiler relative stk ptr */
  argstk,   /* function arg sp */
  argtop,   /* highest formal argument offset */
  ncmp,     /* # open compound statements */
  errflag,  /* true after 1st error in statement */
  eof,      /* true on final input eof */
  output,   /* fd for output file */
  files,    /* true if file list specified on cmd line */
  filearg,  /* cur file arg index */
  input   = EOF, /* fd for input file */
  input2  = EOF, /* fd for "#include" file */
  usexpr  = YES, /* true if value of expression is used */
  ccode   = YES, /* true while parsing C code */
 *snext,    /* next addr in stage */
 *stail,    /* last addr of data in stage */
 *slast,    /* last addr in stage */
  listfp,   /* file pointer to list device */
  lastst,   /* last parsed statement type */
  oldseg;   /* current segment (0, DATASEG, CODESEG) */

char
  optimize, /* optimize output of staging buffer? */
  alarm,    /* audible alarm on errors? */
  monitor,  /* monitor function headers? */
  pause,    /* pause for operator on errors? */
 *symtab,   /* symbol table */
 *litq,     /* literal pool */
 *macn,     /* macro name buffer */
 *macq,     /* macro string buffer */
 *pline,    /* parsing buffer */
 *mline,    /* macro buffer */
 *line,     /* ptr to pline or mline */
 *lptr,     /* ptr to current character in "line" */
 *glbptr,   /* global symbol table */
 *locptr,   /* next local symbol table entry */
  quote[2] = {'"'}, /* literal string for '"' */
 *cptr,     /* work ptrs to any char buffer */
 *cptr2,
 *cptr3,
  msname[NAMESIZE],   /* macro symbol name */
  ssname[NAMESIZE];   /* static symbol name */

int op[16] = {   /* p-codes of signed binary operators */
  OR12,                        /* level5 */
  XOR12,                       /* level6 */
  AND12,                       /* level7 */
  EQ12,   NE12,                /* level8 */
  LE12,   GE12,  LT12,  GT12,  /* level9 */
  ASR12,  ASL12,               /* level10 */
  ADD12,  SUB12,               /* level11 */
  MUL12, DIV12, MOD12          /* level12 */
  };

int op2[16] = {  /* p-codes of unsigned binary operators */
  OR12,                        /* level5 */
  XOR12,                       /* level6 */
  AND12,                       /* level7 */
  EQ12,   NE12,                /* level8 */
  LE12u,  GE12u, LT12u, GT12u, /* level9 */
  ASR12,  ASL12,               /* level10 */
  ADD12,  SUB12,               /* level11 */
  MUL12u, DIV12u, MOD12u       /* level12 */
  };

/*
** execution begins here
*/
main(argc, argv) int argc, *argv; {
  fputs(VERSION, stderr);
  fputs(CRIGHT1, stderr);
  argcs   = argc;
  argvs   = argv;
  swnext  = calloc(SWTABSZ, 1);
  swend   = swnext+(SWTABSZ-SWSIZ);
  stage   = calloc(STAGESIZE, 2*BPW);
  wqptr   =
  wq      = calloc(WQTABSZ, BPW);
  litq    = calloc(LITABSZ, 1);
  macn    = calloc(MACNSIZE, 1);
  macq    = calloc(MACQSIZE, 1);
  pline   = calloc(LINESIZE, 1);
  mline   = calloc(LINESIZE, 1);
  slast   = stage+(STAGESIZE*2*BPW);
  symtab  = calloc((NUMLOCS*SYMAVG + NUMGLBS*SYMMAX), 1);
  locptr  = STARTLOC;
  glbptr  = STARTGLB;
  
  ask();          /* get user options */
  openfile();     /* and initial input file */
  preprocess();   /* fetch first line */
  header();       /* intro code */
  setcodes();     /* initialize code pointer array */ 
  parse();        /* process ALL input */
  trailer();      /* follow-up code */
  fclose(output); /* explicitly close output */
  }

/******************** high level parsing *******************/

/*
** process all input text
**
** At this level, only static declarations,
**      defines, includes and function
**      definitions are legal...
*/
parse() {
  while (eof == 0) {
    if     (amatch("extern", 6)) dodeclare(EXTERNAL);
    else if(dodeclare(STATIC))   ;
    else if( match("#asm"))      doasm();
    else if( match("#include"))  doinclude();
    else if( match("#define"))   dodefine();
    else                         dofunction();
    blanks();                 /* force eof if pending */
    }
  }

/*
** test for global declarations
*/
dodeclare(class) int class; {
  if     (amatch("char",     4))  declglb(CHR,  class);
  else if(amatch("unsigned", 8)) {
    if   (amatch("char",     4))  declglb(UCHR, class);
    else {amatch("int",      3);  declglb(UINT, class);}
    }
  else if(amatch("int",      3)
       || class == EXTERNAL)      declglb(INT,  class);
  else return 0;
  ns();
  return 1;
  }

/*
** declare a static variable
*/
declglb(type, class)  int type, class; {
  int id, dim;
  while(1) {
    if(endst()) return;  /* do line */
    if(match("*"))       {id = POINTER;  dim = 0;}
    else                 {id = VARIABLE; dim = 1;}
    if(symname(ssname) == 0) illname();
    if(findglb(ssname)) multidef(ssname);
    if(id == VARIABLE) {
      if     (match("("))  {id = FUNCTION; need(")");}
      else if(match("["))  {id = ARRAY; dim = needsub();}
      }
    if     (class == EXTERNAL) external(ssname, type >> 2, id);
    else if(   id != FUNCTION) initials(type >> 2, id, dim);
    if(id == POINTER) 
         addsym(ssname, id, type, BPW, 0, &glbptr, class);
    else addsym(ssname, id, type, dim * (type >> 2), 0, &glbptr, class);
    if(match(",") == 0) return;
    }
  }

/*
** initialize global objects
*/
initials(size, ident, dim) int size, ident, dim; {
  int savedim;
  litptr = 0;
  if(dim == 0) dim = -1;         /* *... or ...[] */
  savedim = dim;
  public(ident);
  if(match("=")) {
    if(match("{")) {
      while(dim) {
        init(size, ident, &dim);
        if(match(",") == 0) break;
        }
      need("}");
      }
    else init(size, ident, &dim);
    }
  if(savedim == -1 && dim == -1) {
    if(ident == ARRAY) error("need array size");
    stowlit(0, size = BPW);
    }
  dumplits(size);
  dumpzero(size, dim);           /* only if dim > 0 */
  }

/*
** evaluate one initializer
*/
init(size, ident, dim) int size, ident, *dim; {
  int value;
  if(string(&value)) {
    if(ident == VARIABLE || size != 1)
      error("must assign to char pointer or char array");
    *dim -= (litptr - value);
    if(ident == POINTER) point();
    }
  else if(constexpr(&value)) {
    if(ident == POINTER) error("cannot assign to pointer");
    stowlit(value, size);
    *dim -= 1;
    }
  }

/*
** get required array size
*/
needsub()  {
  int val;
  if(match("]")) return 0; /* null size */
  if(constexpr(&val) == 0) val = 1;
  if(val < 0) {
    error("negative size illegal");
    val = -val;
    }
  need("]");               /* force single dimension */
  return val;              /* and return size */
  }

/*
** open an include file
*/
doinclude() {
  int i; char str[30];
  blanks();       /* skip over to name */
  if(*lptr == '"' || *lptr == '<') ++lptr;
  i = 0;
  while(lptr[i]
     && lptr[i] != '"'
     && lptr[i] != '>'
     && lptr[i] != '\n') {
    str[i] = lptr[i];
    ++i;
    }
  str[i] = NULL;
  if((input2 = fopen(str,"r")) == NULL) {
    input2 = EOF;
    error("open failure on include file");
    }
  kill();   /* make next read come from new file (if open) */
  }

/*
** define a macro symbol
*/
dodefine() {
  int k;
  if(symname(msname) == 0) {
    illname();
    kill();
    return;
    }
  k = 0;
  if(search(msname, macn, NAMESIZE+2, MACNEND, MACNBR, 0) == 0) {
    if(cptr2 = cptr)
      while(*cptr2++ = msname[k++]) ;
    else {
      error("macro name table full");
      return;
      }
    }
  putint(macptr, cptr+NAMESIZE, 2);
  while(white()) gch();
  while(putmac(gch()));
  if(macptr >= MACMAX) {
    error("macro string queue full");
    abort(ERRCODE);
    }
  }

putmac(c)  char c; {
  macq[macptr] = c;
  if(macptr < MACMAX) ++macptr;
  return c;
  }

/*
** begin a function
**
** called from "parse" and tries to make a function
** out of the following text
*/
dofunction()  {
  char *ptr;
  nogo   =                      /* enable goto statements */
  noloc  =                      /* enable block-local declarations */
  lastst =                      /* no statement yet */
  litptr = 0;                   /* clear lit pool */
  litlab = getlabel();          /* label next lit pool */
  locptr = STARTLOC;            /* clear local variables */
  if(match("void")) blanks();   /* skip "void" & locate header */
  if(monitor) lout(line, stderr);
  if(symname(ssname) == 0) {
    error("illegal function or declaration");
    errflag = 0;
    kill();                     /* invalidate line */
    return;
    }
  if(ptr = findglb(ssname)) {   /* already in symbol table? */
    if(ptr[CLASS] == AUTOEXT)
         ptr[CLASS] = STATIC;
    else multidef(ssname);
    }
  else addsym(ssname, FUNCTION, INT, 0, 0, &glbptr, STATIC);
  public(FUNCTION);
  argstk = 0;                  /* init arg count */
  if(match("(") == 0) error("no open paren");
  while(match(")") == 0) {     /* then count args */
    if(symname(ssname)) {
      if(findloc(ssname)) multidef(ssname);
      else {
        addsym(ssname, 0, 0, 0, argstk, &locptr, AUTOMATIC);
        argstk += BPW;
        }
      }
    else {
      error("illegal argument name");
      skip();
      }
    blanks();
    if(streq(lptr,")") == 0 && match(",") == 0)
      error("no comma");
    if(endst()) break;
    }
  csp = 0;                     /* preset stack ptr */
  argtop = argstk+BPW;         /* account for the pushed BP */
  while(argstk) {
    if     (amatch("char",     4)) {doargs(CHR);  ns();}
    else if(amatch("int",      3)) {doargs(INT);  ns();}
    else if(amatch("unsigned", 8)) {
      if   (amatch("char", 4))     {doargs(UCHR); ns();}
      else {amatch("int", 3);       doargs(UINT); ns();}
      }
    else {error("wrong number of arguments"); break;}
    }
  gen(ENTER, 0);
  statement();
  if(lastst != STRETURN && lastst != STGOTO)
    gen(RETURN, 0);
  if(litptr) {
    toseg(DATASEG);
    gen(REFm, litlab);
    dumplits(1);               /* dump literals */
    }
  }

/*
** declare argument types
*/
doargs(type) int type; {
  int id, sz;
  char c, *ptr;
  while(1) {
    if(argstk == 0) return;           /* no arguments */
    if(decl(type, POINTER, &id, &sz)) {
      if(ptr = findloc(ssname)) {
        ptr[IDENT] = id;
        ptr[TYPE]  = type;
        putint(sz, ptr+SIZE, 2);
        putint(argtop-getint(ptr+OFFSET, 2), ptr+OFFSET, 2);
        }
      else error("not an argument");
      }
    argstk = argstk - BPW;            /* cnt down */
    if(endst()) return;
    if(match(",") == 0) error("no comma");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一本二本av| 亚洲综合偷拍欧美一区色| 中文字幕一区二区三区av| 婷婷国产在线综合| 91老司机福利 在线| 欧美成人a视频| 亚洲色图一区二区| 国产精品69久久久久水密桃| 欧美在线播放高清精品| 国产精品污www在线观看| 麻豆视频观看网址久久| 欧美日韩一级黄| 国产精品久久久久久久久快鸭 | 99久久免费视频.com| 精品国产免费视频| 亚洲国产一区二区三区青草影视| 成人手机在线视频| 久久久91精品国产一区二区精品| 日本伊人午夜精品| 欧美剧在线免费观看网站| 一区二区三区精品视频在线| 成人免费视频播放| 午夜精品aaa| 91丨九色丨尤物| 国产精品成人一区二区艾草| 国产福利91精品| 亚洲精品一区二区三区香蕉| 免费在线成人网| 日韩欧美久久久| 免费观看日韩电影| 欧美一区二区三区免费在线看| 午夜在线成人av| 欧美男人的天堂一二区| 午夜欧美大尺度福利影院在线看| 欧美图区在线视频| 午夜日韩在线电影| 日韩视频免费观看高清完整版| 日韩 欧美一区二区三区| 欧美丰满嫩嫩电影| 美女精品自拍一二三四| 精品成人佐山爱一区二区| 国产中文字幕一区| 欧美国产禁国产网站cc| fc2成人免费人成在线观看播放| 国产精品每日更新| 色噜噜狠狠色综合中国| 午夜精品福利一区二区蜜股av| 欧美高清hd18日本| 国产麻豆精品久久一二三| 欧美韩日一区二区三区| 色综合久久久久网| 日本va欧美va精品| 国产嫩草影院久久久久| 91网站视频在线观看| 午夜精品福利一区二区蜜股av| 欧美一区三区四区| 国产精品一区一区| 一区二区三区高清在线| 欧美一区二区三区免费| 国产成人精品www牛牛影视| 一区二区三区在线视频观看| 欧美日韩精品一区二区三区四区 | 亚洲欧美一区二区在线观看| 欧美三级三级三级爽爽爽| 久久99国产精品麻豆| 国产精品美女www爽爽爽| 欧美日韩电影在线播放| 国产剧情一区二区| 亚洲第一二三四区| 久久久国际精品| 欧美性大战久久久久久久蜜臀| 麻豆成人91精品二区三区| 国产精品热久久久久夜色精品三区 | 7777精品伊人久久久大香线蕉超级流畅| 日本vs亚洲vs韩国一区三区 | 亚洲成人资源网| 久久久久久久久蜜桃| 在线观看www91| 国内精品国产成人| 亚洲成人激情社区| 国产精品人妖ts系列视频| 日韩三级伦理片妻子的秘密按摩| 99视频在线精品| 韩国v欧美v日本v亚洲v| 亚洲成av人片| 亚洲视频在线一区| 欧美激情在线观看视频免费| 欧美一区二区三区四区视频| 91丨porny丨户外露出| 国产一区999| 日本在线不卡一区| 香蕉久久夜色精品国产使用方法 | 日韩女优av电影| 欧美色图激情小说| 97精品超碰一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 亚洲一区二区三区三| 亚洲视频资源在线| 国产精品短视频| 亚洲国产精品t66y| 欧美激情综合在线| 久久久美女毛片| 亚洲精品在线三区| 精品国产一区二区三区av性色| 91精品综合久久久久久| 欧美日本不卡视频| 欧美日韩精品欧美日韩精品一| 色哟哟国产精品| 色噜噜久久综合| 色8久久精品久久久久久蜜 | 国产一区二区三区美女| 日韩av一区二区在线影视| 丝袜美腿亚洲综合| 日韩成人一区二区三区在线观看| 亚洲国产精品一区二区尤物区| 亚洲一区二区三区四区在线免费观看 | 夜夜精品浪潮av一区二区三区 | 久久久久国产精品麻豆ai换脸| 欧美α欧美αv大片| 日韩免费观看2025年上映的电影| 欧美一区二区三区视频在线| 欧美一区二区三区啪啪| 精品剧情v国产在线观看在线| 欧美tickling网站挠脚心| 久久综合久久久久88| 久久久综合激的五月天| 国产午夜精品一区二区三区视频| 久久婷婷国产综合精品青草| 中文字幕av资源一区| 亚洲色图一区二区三区| 亚洲mv在线观看| 免费看日韩精品| 国产成人一级电影| 91理论电影在线观看| 7777女厕盗摄久久久| 精品国产免费久久| 亚洲欧美一区二区三区久本道91 | 欧美三区在线视频| 制服.丝袜.亚洲.中文.综合| 欧美成人r级一区二区三区| 国产日本亚洲高清| 夜夜爽夜夜爽精品视频| 久久 天天综合| 99久久精品免费看国产| 欧美精品自拍偷拍| 国产女主播一区| 亚洲一区二区三区免费视频| 九九国产精品视频| 91香蕉视频mp4| 欧美一区二区女人| 一区在线播放视频| 色诱视频网站一区| 7777精品伊人久久久大香线蕉 | 国产成人免费av在线| 91女人视频在线观看| 91精品国产美女浴室洗澡无遮挡| 国产三级精品三级在线专区| 亚洲精品美国一| 国产在线精品一区二区| 欧美午夜精品久久久| 久久精品一级爱片| 偷窥少妇高潮呻吟av久久免费| 国产福利一区二区| 欧美精品久久一区| 日韩美女啊v在线免费观看| 美女网站色91| 欧美亚洲图片小说| 国产精品久久久久婷婷二区次| 日韩在线观看一区二区| 91猫先生在线| 日本一区二区三区电影| 人人爽香蕉精品| 欧洲精品在线观看| 国产精品不卡一区| 国产精品18久久久久| 欧美一区二区视频在线观看2022 | 亚洲成人一区在线| 不卡欧美aaaaa| 337p日本欧洲亚洲大胆精品| 亚洲一区二区三区视频在线播放| 成人综合激情网| 久久久影视传媒| 久久精品国产99国产| 欧美图区在线视频| 一区二区欧美视频| av在线播放不卡| 中文字幕国产一区二区| 国产一区二区三区| 日韩美女在线视频| 麻豆国产欧美一区二区三区| 欧美日韩免费电影| 亚洲成av人片在线| 欧美午夜宅男影院| 亚洲午夜电影网| 欧美欧美欧美欧美首页| 亚洲国产成人高清精品| 欧美三级中文字幕在线观看| 亚洲一区二区成人在线观看| 91福利资源站| 亚洲成人av免费|