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

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

?? tm.c

?? 一個(gè)簡化的編譯器
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/****************************************************//* File: tm.c                                       *//* The TM ("Tiny Machine") computer                 *//* Compiler Construction: Principles and Practice   *//* Kenneth C. Louden                                *//****************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#ifndef TRUE#define TRUE 1#endif#ifndef FALSE#define FALSE 0#endif/******* const *******/#define   IADDR_SIZE  1024 /* increase for large programs */#define   DADDR_SIZE  1024 /* increase for large programs */#define   NO_REGS 8#define   PC_REG  7#define   LINESIZE  121#define   WORDSIZE  20/******* type  *******/typedef enum {   opclRR,     /* reg operands r,s,t */   opclRM,     /* reg r, mem d+s */   opclRA      /* reg r, int d+s */   } OPCLASS;typedef enum {   /* RR instructions */   opHALT,    /* RR     halt, operands are ignored */   opIN,      /* RR     read into reg(r); s and t are ignored */   opOUT,     /* RR     write from reg(r), s and t are ignored */   opADD,    /* RR     reg(r) = reg(s)+reg(t) */   opSUB,    /* RR     reg(r) = reg(s)-reg(t) */   opMUL,    /* RR     reg(r) = reg(s)*reg(t) */   opDIV,    /* RR     reg(r) = reg(s)/reg(t) */   opRRLim,   /* limit of RR opcodes */   /* RM instructions */   opLD,      /* RM     reg(r) = mem(d+reg(s)) */   opST,      /* RM     mem(d+reg(s)) = reg(r) */   opRMLim,   /* Limit of RM opcodes */   /* RA instructions */   opLDA,     /* RA     reg(r) = d+reg(s) */   opLDC,     /* RA     reg(r) = d ; reg(s) is ignored */   opJLT,     /* RA     if reg(r)<0 then reg(7) = d+reg(s) */   opJLE,     /* RA     if reg(r)<=0 then reg(7) = d+reg(s) */   opJGT,     /* RA     if reg(r)>0 then reg(7) = d+reg(s) */   opJGE,     /* RA     if reg(r)>=0 then reg(7) = d+reg(s) */   opJEQ,     /* RA     if reg(r)==0 then reg(7) = d+reg(s) */   opJNE,     /* RA     if reg(r)!=0 then reg(7) = d+reg(s) */   opRALim    /* Limit of RA opcodes */   } OPCODE;typedef enum {   srOKAY,   srHALT,   srIMEM_ERR,   srDMEM_ERR,   srZERODIVIDE   } STEPRESULT;typedef struct {      int iop  ;      int iarg1  ;      int iarg2  ;      int iarg3  ;   } INSTRUCTION;/******** vars ********/int iloc = 0 ;int dloc = 0 ;int traceflag = FALSE;int icountflag = FALSE;INSTRUCTION iMem [IADDR_SIZE];int dMem [DADDR_SIZE];int reg [NO_REGS];char * opCodeTab[]        = {"HALT","IN","OUT","ADD","SUB","MUL","DIV","????",            /* RR opcodes */           "LD","ST","????", /* RM opcodes */           "LDA","LDC","JLT","JLE","JGT","JGE","JEQ","JNE","????"           /* RA opcodes */          };char * stepResultTab[]        = {"OK","Halted","Instruction Memory Fault",           "Data Memory Fault","Division by 0"          };char pgmName[20];FILE *pgm  ;char in_Line[LINESIZE] ;int lineLen ;int inCol  ;int num  ;char word[WORDSIZE] ;char ch  ;int done  ;/********************************************/int opClass( int c ){ if      ( c <= opRRLim) return ( opclRR );  else if ( c <= opRMLim) return ( opclRM );  else                    return ( opclRA );} /* opClass *//********************************************/void writeInstruction ( int loc ){ printf( "%5d: ", loc) ;  if ( (loc >= 0) && (loc < IADDR_SIZE) )  { printf("%6s%3d,", opCodeTab[iMem[loc].iop], iMem[loc].iarg1);    switch ( opClass(iMem[loc].iop) )    { case opclRR: printf("%1d,%1d", iMem[loc].iarg2, iMem[loc].iarg3);                   break;      case opclRM:      case opclRA: printf("%3d(%1d)", iMem[loc].iarg2, iMem[loc].iarg3);                   break;    }    printf ("\n") ;  }} /* writeInstruction *//********************************************/void getCh (void){ if (++inCol < lineLen)  ch = in_Line[inCol] ;  else ch = ' ' ;} /* getCh *//********************************************/int nonBlank (void){ while ((inCol < lineLen)         && (in_Line[inCol] == ' ') )    inCol++ ;  if (inCol < lineLen)  { ch = in_Line[inCol] ;    return TRUE ; }  else  { ch = ' ' ;    return FALSE ; }} /* nonBlank *//********************************************/int getNum (void){ int sign;  int term;  int temp = FALSE;  num = 0 ;  do  { sign = 1;    while ( nonBlank() && ((ch == '+') || (ch == '-')) )    { temp = FALSE ;      if (ch == '-')  sign = - sign ;      getCh();    }    term = 0 ;    nonBlank();    while (isdigit(ch))    { temp = TRUE ;      term = term * 10 + ( ch - '0' ) ;      getCh();    }    num = num + (term * sign) ;  } while ( (nonBlank()) && ((ch == '+') || (ch == '-')) ) ;  return temp;} /* getNum *//********************************************/int getWord (void){ int temp = FALSE;  int length = 0;  if (nonBlank ())  { while (isalnum(ch))    { if (length < WORDSIZE-1) word [length++] =  ch ;      getCh() ;    }    word[length] = '\0';    temp = (length != 0);  }  return temp;} /* getWord *//********************************************/int skipCh ( char c  ){ int temp = FALSE;  if ( nonBlank() && (ch == c) )  { getCh();    temp = TRUE;  }  return temp;} /* skipCh *//********************************************/int atEOL(void){ return ( ! nonBlank ());} /* atEOL *//********************************************/int error( char * msg, int lineNo, int instNo){ printf("Line %d",lineNo);  if (instNo >= 0) printf(" (Instruction %d)",instNo);  printf("   %s\n",msg);  return FALSE;} /* error *//********************************************/int readInstructions (void){ OPCODE op;  int arg1, arg2, arg3;  int loc, regNo, lineNo;  for (regNo = 0 ; regNo < NO_REGS ; regNo++)      reg[regNo] = 0 ;  dMem[0] = DADDR_SIZE - 1 ;  for (loc = 1 ; loc < DADDR_SIZE ; loc++)      dMem[loc] = 0 ;  for (loc = 0 ; loc < IADDR_SIZE ; loc++)  { iMem[loc].iop = opHALT ;    iMem[loc].iarg1 = 0 ;    iMem[loc].iarg2 = 0 ;    iMem[loc].iarg3 = 0 ;  }  lineNo = 0 ;  while (! feof(pgm))  { fgets( in_Line, LINESIZE-2, pgm  ) ;    inCol = 0 ;     lineNo++;    lineLen = strlen(in_Line)-1 ;    if (in_Line[lineLen]=='\n') in_Line[lineLen] = '\0' ;    else in_Line[++lineLen] = '\0';    if ( (nonBlank()) && (in_Line[inCol] != '*') )    { if (! getNum())        return error("Bad location", lineNo,-1);      loc = num;      if (loc > IADDR_SIZE)        return error("Location too large",lineNo,loc);      if (! skipCh(':'))        return error("Missing colon", lineNo,loc);      if (! getWord ())        return error("Missing opcode", lineNo,loc);      op = opHALT ;      while ((op < opRALim)             && (strncmp(opCodeTab[op], word, 4) != 0) )          op++ ;      if (strncmp(opCodeTab[op], word, 4) != 0)          return error("Illegal opcode", lineNo,loc);      switch ( opClass(op) )      { case opclRR :        /***********************************/        if ( (! getNum ()) || (num < 0) || (num >= NO_REGS) )            return error("Bad first register", lineNo,loc);        arg1 = num;        if ( ! skipCh(','))            return error("Missing comma", lineNo, loc);        if ( (! getNum ()) || (num < 0) || (num >= NO_REGS) )            return error("Bad second register", lineNo, loc);        arg2 = num;        if ( ! skipCh(','))             return error("Missing comma", lineNo,loc);        if ( (! getNum ()) || (num < 0) || (num >= NO_REGS) )            return error("Bad third register", lineNo,loc);        arg3 = num;        break;        case opclRM :        case opclRA :        /***********************************/        if ( (! getNum ()) || (num < 0) || (num >= NO_REGS) )            return error("Bad first register", lineNo,loc);        arg1 = num;        if ( ! skipCh(','))            return error("Missing comma", lineNo,loc);        if (! getNum ())            return error("Bad displacement", lineNo,loc);        arg2 = num;        if ( ! skipCh('(') && ! skipCh(',') )            return error("Missing LParen", lineNo,loc);        if ( (! getNum ()) || (num < 0) || (num >= NO_REGS))            return error("Bad second register", lineNo,loc);        arg3 = num;        break;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美影院一区二区三区| 日av在线不卡| 久久久久99精品国产片| 日韩视频一区在线观看| 777午夜精品视频在线播放| 欧美在线免费观看视频| 欧美日韩午夜在线视频| 欧美三级韩国三级日本三斤 | 免费欧美高清视频| 美女性感视频久久| 国产精品性做久久久久久| 国产精品自产自拍| www.66久久| 欧美性淫爽ww久久久久无| 在线不卡的av| 日韩精品一区二区三区蜜臀| 精品乱码亚洲一区二区不卡| 久久精品综合网| 中文字幕亚洲欧美在线不卡| 亚洲影院久久精品| 美女精品自拍一二三四| 国产精品亚洲第一区在线暖暖韩国| 粉嫩aⅴ一区二区三区四区| 成人av在线播放网站| 欧美色涩在线第一页| 欧美成人女星排名| 国产精品美女视频| 亚洲一二三四区| 亚洲成人先锋电影| 国产中文字幕精品| 99热99精品| 欧美一区二区视频免费观看| 久久久国产精华| 亚洲综合成人在线视频| 国产美女在线精品| 在线观看www91| 国产色91在线| 午夜精品在线看| 豆国产96在线|亚洲| 欧美日韩精品一区二区天天拍小说 | 欧美精品 日韩| 国产日本亚洲高清| 石原莉奈在线亚洲二区| 成人av在线网站| 精品国产免费人成电影在线观看四季 | 久久综合久久综合亚洲| 亚洲一区二区三区视频在线| 国产精品一区二区果冻传媒| 欧美精品一卡二卡| 亚洲私人黄色宅男| 极品美女销魂一区二区三区免费| 在线视频中文字幕一区二区| 久久久久国产精品人| 丝袜美腿亚洲色图| 在线观看欧美黄色| 中文字幕一区二区三区不卡| 久草这里只有精品视频| 欧美日韩和欧美的一区二区| 国产精品久久福利| 国产一区二区三区黄视频| 不卡的电影网站| 日韩亚洲电影在线| 美腿丝袜一区二区三区| 69堂亚洲精品首页| 午夜精品久久久久久久久久| 色噜噜狠狠成人中文综合| 国产精品国产馆在线真实露脸 | 高清shemale亚洲人妖| 欧美白人最猛性xxxxx69交| 日韩av电影免费观看高清完整版| 欧美丝袜丝交足nylons| 亚洲一区二区在线免费看| 91免费国产在线| 亚洲日本乱码在线观看| 99精品视频一区二区三区| 国产精品视频第一区| 不卡av电影在线播放| 中文av一区特黄| 91影视在线播放| 亚洲一区二区三区中文字幕| 91黄色免费版| 天天影视涩香欲综合网| 日韩午夜激情视频| 国内欧美视频一区二区| 久久一区二区三区国产精品| 国产成人亚洲综合a∨猫咪| 久久精品夜夜夜夜久久| 国产精品一区一区| 中文字幕日本不卡| 在线免费亚洲电影| 日本三级亚洲精品| 国产午夜亚洲精品午夜鲁丝片| 国产精品1024久久| 亚洲美女在线国产| 日韩丝袜美女视频| 国产高清在线精品| 亚洲婷婷综合久久一本伊一区| 欧美中文字幕亚洲一区二区va在线| 丝袜美腿亚洲一区二区图片| 2欧美一区二区三区在线观看视频| 国产成人av福利| 国产清纯白嫩初高生在线观看91 | 久久久www成人免费毛片麻豆| 国v精品久久久网| 一区二区三区不卡在线观看| 欧美精品 国产精品| 国产乱码一区二区三区| 亚洲欧美日韩精品久久久久| 精品视频在线视频| 懂色av一区二区三区免费看| 亚洲午夜精品久久久久久久久| 日韩欧美电影一区| 91无套直看片红桃| 久久99国产乱子伦精品免费| 中文字幕欧美一| 欧美电影免费观看高清完整版在线观看| 国产成人av影院| 奇米影视7777精品一区二区| 国产精品久久久久久久久免费樱桃| 欧美日韩国产精品成人| 夫妻av一区二区| 久久99精品久久久久久国产越南| 亚洲视频狠狠干| 久久久久99精品一区| 欧美一区二区三区四区视频| 成人免费视频视频| 久草这里只有精品视频| 亚洲国产另类av| 亚洲免费视频中文字幕| 久久精品免费在线观看| 337p亚洲精品色噜噜| 在线中文字幕一区| 国产成人av在线影院| 激情综合色综合久久| 免费一级欧美片在线观看| 亚洲国产精品一区二区久久恐怖片| 欧美激情一区在线观看| 精品成人佐山爱一区二区| 欧美精品乱人伦久久久久久| 日本精品一级二级| a级高清视频欧美日韩| 国产成人av福利| 国产一区二区三区久久久| 美女高潮久久久| 日韩av一区二区在线影视| 亚洲午夜视频在线| 亚洲激情一二三区| 尤物视频一区二区| 亚洲免费观看高清完整版在线观看熊| 久久久久成人黄色影片| 久久综合中文字幕| 久久久精品免费观看| 欧美精品一区视频| 日韩欧美国产系列| 欧美mv和日韩mv的网站| 96av麻豆蜜桃一区二区| 91浏览器打开| 色婷婷综合视频在线观看| 一本久道中文字幕精品亚洲嫩| 99精品欧美一区二区蜜桃免费| 丁香网亚洲国际| av在线播放一区二区三区| 9人人澡人人爽人人精品| 99re在线精品| 欧美日韩美少妇| 日韩三级精品电影久久久| 精品欧美一区二区三区精品久久| 欧美成人一级视频| 欧美经典三级视频一区二区三区| 欧美韩国日本综合| 亚洲女人小视频在线观看| 亚洲妇女屁股眼交7| 免费成人小视频| 国产成人精品一区二区三区网站观看| 懂色一区二区三区免费观看| 91麻豆高清视频| 欧美高清视频一二三区| 久久久一区二区| 一区二区三区日韩在线观看| 美脚の诱脚舐め脚责91 | 日韩专区欧美专区| 国产乱子伦一区二区三区国色天香| 成人av在线网| 91.成人天堂一区| 国产日韩欧美不卡在线| 亚洲欧美激情一区二区| 老司机精品视频在线| www.成人网.com| 日韩手机在线导航| 国产欧美精品在线观看| 亚洲一区二区三区不卡国产欧美| 日本大胆欧美人术艺术动态| 粗大黑人巨茎大战欧美成人| 欧美日韩精品三区| 国产嫩草影院久久久久| 亚洲一区视频在线| 国产美女一区二区三区| 欧美色综合天天久久综合精品| 精品入口麻豆88视频| 亚洲天堂a在线|