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

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

?? tm.cpp

?? 編譯原理學(xué)習(xí)使用的代碼 內(nèi)容有從詞法分析到中間代碼生成的代碼 并且含有注釋
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
  }
  return temp;
} /* getWord */


/************************************************************/
/* 函數(shù)名 skipCh											*/
/* 功  能 字符空過(guò)函數(shù)										*/
/* 說(shuō)  明 如果當(dāng)前位置上字符為函數(shù)指定的字符,則空過(guò)該字符,	*/
/*		  函數(shù)返回TRUE;否則函數(shù)返回FALSE					*/
/************************************************************/
int skipCh ( char c  )

{ int temp = FALSE;

  /* 當(dāng)前位置上字符為函數(shù)指定字符c */
  if ( nonBlank() && (ch == c) )

  { getCh();		/* 空過(guò)當(dāng)前字符c,取下一字符 */

    temp = TRUE;	/* 空過(guò)指定字符c,函數(shù)返回TRUE */
  }
  return temp;
} /* skipCh */


/************************************/
/* 函數(shù)名 atEOL						*/
/* 功  能 行結(jié)束判斷函數(shù)			*/
/* 說(shuō)  明 當(dāng)前行是否結(jié)束的判斷函數(shù)	*/
/************************************/	
int atEOL(void)

{ return ( ! nonBlank ());	/* 如果當(dāng)前行中沒(méi)有非空字符,則函數(shù)返回TRUE */
} /* atEOL */


/****************************************************/
/* 函數(shù)名 error										*/
/* 功  能 錯(cuò)誤處理函數(shù)								*/
/* 說(shuō)  明 函數(shù)輸出錯(cuò)誤行號(hào),指令地址標(biāo)號(hào)和錯(cuò)誤信息	*/
/****************************************************/
int error( char * msg, int lineNo, int instNo)

{ 
  /* 輸出錯(cuò)誤出現(xiàn)位置行號(hào)lineNo */
  printf("Line %d",lineNo);

  /* 輸出錯(cuò)誤指令地址標(biāo)號(hào)instNo */
  if (instNo >= 0) printf(" (Instruction %d)",instNo);

  /* 輸出錯(cuò)誤信息msg */
  printf("   %s\n",msg);

  return FALSE;
} /* error */


/********************************************************/
/* 函數(shù)名 readInstructions								*/
/* 功  能 指令文件讀入函數(shù)								*/
/* 說(shuō)  明 將指令文件中的指令逐條讀入到指令存儲(chǔ)區(qū)iMem	*/
/********************************************************/
int readInstructions (void)

{ 
  OPCODE op;				/* 當(dāng)前指令操作碼 */

  int arg1, arg2, arg3;		/* 當(dāng)前指令操作數(shù) */

  int loc, regNo, lineNo;

  /* 將8個(gè)寄存器內(nèi)容初始化為0 */
  for (regNo = 0 ; regNo < NO_REGS ; regNo++)
      reg[regNo] = 0 ;						

  /* dMem為數(shù)據(jù)存儲(chǔ)區(qū),0地址單元dMem[0]的值賦為數(shù)據(jù)存儲(chǔ)區(qū)高端地址1023	*
   * 此數(shù)值將在目標(biāo)程序運(yùn)行時(shí)由程序的先驅(qū)指令讀入到mp寄存器中			*/
  dMem[0] = DADDR_SIZE - 1 ;				

  /* 將數(shù)據(jù)存儲(chǔ)數(shù)區(qū)內(nèi)除0地址單元外的各單元初始化為0 */
  for (loc = 1 ; loc < DADDR_SIZE ; loc++)
      dMem[loc] = 0 ;

  /* 將指令存儲(chǔ)區(qū)中各單元初始化為指令;HALT 0,0,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 ;		/* lineNo用于記錄當(dāng)前代碼指令行號(hào) */

  /* 不是指定文件pgm的文件結(jié)尾 */
  while (! feof(pgm))				

  { 
    /* 從指定文件pgm中讀入119個(gè)字符到當(dāng)前代碼行in_Line */
	fgets( in_Line, LINESIZE-2, pgm  ) ;

    inCol = 0 ;		/* 當(dāng)前代碼行in_Line中當(dāng)前字符位置inCol初始為0 */

    lineNo++;		/* 當(dāng)前代碼行行號(hào)加1 */

	/* 當(dāng)前代碼行in_Line行結(jié)尾字符位置賦給lineLen */
    lineLen = strlen(in_Line)-1 ;

	/* 如果源行結(jié)束字符是'\n',則更換行結(jié)束字符為'\0' */
    if (in_Line[lineLen]=='\n') in_Line[lineLen] = '\0' ;

	/* 源行沒(méi)有行結(jié)束字符,加上結(jié)束字符'\0' */
    else in_Line[++lineLen] = '\0';

	/* 當(dāng)前字符不是"*",即不是注釋語(yǔ)句,應(yīng)該是指令語(yǔ)句 */
    if ( (nonBlank()) && (in_Line[inCol] != '*') )

    {
	  /* 當(dāng)前字符不是數(shù)字,報(bào)地址錯(cuò),并給出行號(hào)lineNo */
	  if (! getNum())

        return error("Bad location", lineNo,-1);

	  /* 將所得數(shù)值賦給當(dāng)前代碼地址標(biāo)號(hào)loc */
	  loc = num;

	  /* 代碼地址標(biāo)號(hào)loc超出指令存儲(chǔ)區(qū)地址IADDR_SIZE,報(bào)錯(cuò) */
      if (loc > IADDR_SIZE)
        return error("Location too large",lineNo,loc);

	  /* 代碼地址標(biāo)號(hào)loc后面缺少冒號(hào),報(bào)缺少冒號(hào)錯(cuò) */
      if (! skipCh(':'))
        return error("Missing colon", lineNo,loc);
 
	  /* 當(dāng)前位置不是單詞,報(bào)缺少指令操作碼錯(cuò) */
      if (! getWord ())
        return error("Missing opcode", lineNo,loc);

	  /* 初始查表指針op,op指向操作碼表表首,值為opHALT */
      op = opHALT ;

	  /* 查操作碼表opCodeTab,只比較當(dāng)前字word中的前四個(gè)字符	*
	   * 因?yàn)樗卸x的操作碼中,最長(zhǎng)操作碼HALT長(zhǎng)度只為四	*/
      while ((op < opRALim)
             && (strncmp(opCodeTab[op], word, 4) != 0) )
          op = (enum opcode)(op+1);

	  /* 當(dāng)前單詞word中指定的操作碼不在操作碼表opCodeTab中,報(bào)非法操作碼錯(cuò)誤 */
      if (strncmp(opCodeTab[op], word, 4) != 0)
          return error("Illegal opcode", lineNo,loc);

	  /* 對(duì)查表得到的操作碼值op的尋址模式,進(jìn)行分類處理 */
      switch ( opClass(op) )

      { case opclRR :			/* 寄存器尋址模式操作碼 */

	    /* 第一寄存器操作數(shù)錯(cuò),非0-7之間數(shù)字,		*
         * 輸出錯(cuò)誤信息,行號(hào)lineNo,代碼地址標(biāo)號(hào)loc	*/
        if ( (! getNum ()) || (num < 0) || (num >= NO_REGS) )
            return error("Bad first register", lineNo,loc);

		/* 將第一操作數(shù)arg1賦值為當(dāng)前數(shù)值num */
        arg1 = num;

		/* 第一操作數(shù)后漏掉","分隔符,報(bào)錯(cuò) */
        if ( ! skipCh(','))
            return error("Missing comma", lineNo, loc);

		/* 第二寄存器操作數(shù)錯(cuò),非0-7之間數(shù)字,		*
		 * 輸出錯(cuò)誤信息,行號(hào)lineNo,代碼地址標(biāo)號(hào)loc	*/
        if ( (! getNum ()) || (num < 0) || (num >= NO_REGS) )
            return error("Bad second register", lineNo, loc);

		/* 將第二個(gè)操作數(shù)arg2賦值為當(dāng)前數(shù)值num */
		arg2 = num;

		/* 第二操作數(shù)后漏掉","分隔符,報(bào)錯(cuò) */
        if ( ! skipCh(',')) 
            return error("Missing comma", lineNo,loc);

		/* 第三寄存器操作數(shù)錯(cuò),非0-7之間數(shù)字,報(bào)錯(cuò) */
        if ( (! getNum ()) || (num < 0) || (num >= NO_REGS) )
            return error("Bad third register", lineNo,loc);

		/* 將第三操作數(shù)arg3賦值為當(dāng)前數(shù)值num */
        arg3 = num;
        break;


		/* 寄存器-內(nèi)存尋址模式		*
		 * 寄存器-立即數(shù)尋址模式	*/
        case opclRM :						
        case opclRA :

		/* 第一寄存器操作數(shù)錯(cuò),非0-7之間數(shù)字,報(bào)錯(cuò) */
        if ( (! getNum ()) || (num < 0) || (num >= NO_REGS) )
            return error("Bad first register", lineNo,loc);

 		/* 將第一操作數(shù)arg1賦值為當(dāng)前數(shù)值num */
		arg1 = num;

		/* 第一操作數(shù)后面漏掉","分隔符,報(bào)錯(cuò) */
        if ( ! skipCh(','))
            return error("Missing comma", lineNo,loc);

		/* 第二偏移地址操作數(shù)錯(cuò)誤,非數(shù)字偏移地址,報(bào)錯(cuò) */
        if (! getNum ())
            return error("Bad displacement", lineNo,loc);

		/* 將第二偏移地址操作數(shù)arg2賦值為當(dāng)前地址num */
        arg2 = num;

		/* 第二偏移地址操作數(shù)后漏掉"(",或者是","分隔符,報(bào)錯(cuò) */
        if ( ! skipCh('(') && ! skipCh(',') )
            return error("Missing LParen", lineNo,loc);

		/* 第二寄存器操作數(shù)錯(cuò),非0-7之間數(shù)字,報(bào)錯(cuò) */
		if ( (! getNum ()) || (num < 0) || (num >= NO_REGS))
            return error("Bad second register", lineNo,loc);

		/* 將第三操作數(shù)arg3賦值為當(dāng)前數(shù)值num */
        arg3 = num;
        break;
        }

	  /* 按代碼地址標(biāo)號(hào)loc將指令存儲(chǔ)到指令存儲(chǔ)區(qū)iMem */
      iMem[loc].iop = op;
      iMem[loc].iarg1 = arg1;
      iMem[loc].iarg2 = arg2;
      iMem[loc].iarg3 = arg3;
    }
  }
  return TRUE;
} /* readInstructions */



/************************************************/
/* 函數(shù)名 stepTM								*/
/* 功  能 TM機(jī)單步執(zhí)行函數(shù)						*/
/* 說(shuō)  明 函數(shù)為一條指令解釋執(zhí)行,完成指令動(dòng)作.	*/
/************************************************/
STEPRESULT stepTM (void)

{ 
  /* currentinstruction 用于存儲(chǔ)當(dāng)前將執(zhí)行的指令 */
  INSTRUCTION currentinstruction  ;		

  int pc  ;			/* 程序計(jì)數(shù)器 */

  int r,s,t,m  ;	/* 指令操作數(shù) */
  
  int ok ;			

  /* pc設(shè)置為第7個(gè)寄存器reg[7]的值,為程序計(jì)數(shù)器 */
  pc = reg[PC_REG] ;						

  if ( (pc < 0) || (pc > IADDR_SIZE)  )
  /* pc的值不是指令存儲(chǔ)區(qū)的有效地址,報(bào)指令存儲(chǔ)錯(cuò),函數(shù)返回srIMEM_ERR */
      return srIMEM_ERR ;

  /* pc的值為有效指令地址,將程序計(jì)數(shù)器reg[PC_REG]的值加1 */
  reg[PC_REG] = pc + 1 ;

  /* 從指令存儲(chǔ)區(qū)iMem之中取出當(dāng)前指令 */
  currentinstruction = iMem[ pc ] ;

  /* 對(duì)取出的指令的尋址模式分類處理,初始化各個(gè)指令操作數(shù)變量 */
  switch (opClass(currentinstruction.iop) )

  { case opclRR :		/* 寄存器尋址模式 */

	  r = currentinstruction.iarg1 ;
      s = currentinstruction.iarg2 ;
      t = currentinstruction.iarg3 ;
      break;

    case opclRM :		/* 寄存器-內(nèi)存尋址模式 */

	  r = currentinstruction.iarg1 ;
      s = currentinstruction.iarg3 ;
      m = currentinstruction.iarg2 + reg[s] ;
      
	  /* 操作數(shù)m非數(shù)據(jù)存儲(chǔ)區(qū)有效地址,報(bào)數(shù)據(jù)存儲(chǔ)錯(cuò),函數(shù)返回srDMEM_ERR */
	  if ( (m < 0) || (m > DADDR_SIZE))
         return srDMEM_ERR ;
      break;

    case opclRA :		/* 寄存器-立即數(shù)尋址模式 */

      r = currentinstruction.iarg1 ;
      s = currentinstruction.iarg3 ;
      m = currentinstruction.iarg2 + reg[s] ;
      break;
  } /* case */

  /* 對(duì)將執(zhí)行指令的操作碼值進(jìn)行分類處理,輸出指令信息,	*
   * 完成指令動(dòng)作,返回相應(yīng)結(jié)果狀態(tài)						*/
  switch ( currentinstruction.iop)

  {
	/******************** RR指令 ******************/

    /* 格式化屏幕顯示HALT(停止)指令,返回狀態(tài)srHALT(停止) */
    case opHALT :
      printf("HALT: %1d,%1d,%1d\n",r,s,t);
      return srHALT ;
    /**********************************************/
	  
    case opIN :
      do
      { 
		/* 屏幕顯示用戶提示信息,提示用戶為指令輸入數(shù)值 */
		printf("Enter value for IN instruction: ") ;

		/* 刷新標(biāo)準(zhǔn)輸入stdin流和標(biāo)準(zhǔn)輸出stdout流 */
        fflush (stdin);
        fflush (stdout);

		/* 從標(biāo)準(zhǔn)輸入流stdin取得用戶輸入的數(shù)值,送入緩沖器in_Line */
        gets(in_Line);

		/* 取得用戶輸入數(shù)值的實(shí)際長(zhǎng)度lineLen */
        lineLen = strlen(in_Line) ;

        inCol = 0;

		/* 如從緩沖器in_Line中成功取得數(shù)字,則ok為TRUE */
        ok = getNum();

		/* 用戶輸入的不是數(shù)字,報(bào)非法IN指令輸入錯(cuò)誤 */
        if ( ! ok ) printf ("Illegal value\n");

		/* 將輸入的數(shù)值num送入IN指令操作數(shù)r指定的寄存器reg[r] */
        else reg[r] = num;
      }

	  /* 如果用戶輸入不合法,重復(fù)要求用戶輸入,直到輸入合法數(shù)值 */
      while (! ok);
      break;
    /**********************************************/

	/* 屏幕顯示OUT指令執(zhí)行的結(jié)果信息 */
    case opOUT :  
      printf ("OUT instruction prints: %d\n", reg[r] ) ;
      break;
    /**********************************************/

	/* 完成ADD指令操作 */
    case opADD :  reg[r] = reg[s] + reg[t] ;  break;
    /**********************************************/

	/* 完成SUB指令操作 */
    case opSUB :  reg[r] = reg[s] - reg[t] ;  break;
    /**********************************************/

	/* 完成MUL指令操作 */
    case opMUL :  reg[r] = reg[s] * reg[t] ;  break;
    /**********************************************/

    case opDIV :

	  /* 對(duì)于除法指令,若除數(shù)為0,則報(bào)除零錯(cuò)誤, *
	   * 并返回srZERODIVIDE;否則,完成除法操作 */
	  if ( reg[t] != 0 ) reg[r] = reg[s] / reg[t];
      else return srZERODIVIDE ;
      break;

    /***************** RM 指令 ********************/

	/* 將數(shù)據(jù)存儲(chǔ)區(qū)dMem中的數(shù)據(jù)載入到寄存器reg[r] */
    case opLD :    reg[r] = dMem[m] ;  break;

    /**********************************************/

	/* 將寄存器reg[r]中的數(shù)據(jù)寫(xiě)入到數(shù)據(jù)存儲(chǔ)區(qū)dMem */
    case opST :    dMem[m] = reg[r] ;  break;
		

    /***************** RA 指令 ********************/

	/* 將寄存器reg[r]賦值為操作數(shù)m的值 */
    case opLDA :    reg[r] = m ; break;
    /**********************************************/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产日韩av| 日本欧美一区二区| 日韩欧美一级片| 一本到不卡免费一区二区| 日本伊人色综合网| 日本一区二区三级电影在线观看| 在线国产亚洲欧美| 波多野结衣中文字幕一区 | 日产欧产美韩系列久久99| 欧美不卡在线视频| 免费成人av资源网| 久久久另类综合| 亚洲精品福利视频网站| 欧美视频一区在线观看| 国产精品一区二区果冻传媒| 国产精品私人影院| 粉嫩aⅴ一区二区三区四区| 中文无字幕一区二区三区| 国产精品视频线看| 国产色婷婷亚洲99精品小说| 91精品一区二区三区久久久久久 | 欧美日韩精品欧美日韩精品一| 一区二区成人在线| 亚洲福利视频导航| 色爱区综合激月婷婷| 日韩av在线发布| 欧美日韩中文字幕一区| 日韩欧美国产小视频| 粉嫩一区二区三区在线看| 一区二区三区视频在线看| 亚洲成人精品在线观看| 免费日韩伦理电影| 成人一道本在线| 欧美少妇性性性| 久久综合九色综合欧美亚洲| 国产精品久久国产精麻豆99网站| 樱花草国产18久久久久| 精品无人区卡一卡二卡三乱码免费卡| 国产麻豆精品95视频| 一本久道久久综合中文字幕| 5月丁香婷婷综合| 国产精品欧美经典| 天天色综合成人网| 成人午夜视频网站| 日韩限制级电影在线观看| 国产精品美女久久久久久| 亚洲h精品动漫在线观看| 精品在线观看免费| 91视频在线观看免费| 日韩精品自拍偷拍| 亚洲女同ⅹxx女同tv| 久99久精品视频免费观看| 不卡的电视剧免费网站有什么| 欧美日韩免费电影| 日本一区二区三区国色天香| 国产精品综合网| 日韩亚洲欧美综合| 天堂av在线一区| 国产成人一区在线| 欧美日韩在线播放三区| 久久美女高清视频| 热久久一区二区| 99国产欧美另类久久久精品| 精品福利av导航| 婷婷综合久久一区二区三区| 国产成人av电影免费在线观看| 在线观看视频91| 国产精品国产三级国产普通话99 | 国产精品卡一卡二卡三| 美国欧美日韩国产在线播放| 色综合久久久久综合| 久久精品男人的天堂| 蜜乳av一区二区| 色欧美日韩亚洲| 国产日韩欧美综合在线| 蜜桃一区二区三区在线观看| 日本高清免费不卡视频| 国产女主播在线一区二区| 久久精品国产网站| 日韩免费观看高清完整版| 亚洲老司机在线| 成人激情文学综合网| 国产亚洲欧美中文| 国产一区二区网址| 日韩精品资源二区在线| 欧美aⅴ一区二区三区视频| 欧美在线高清视频| 亚洲理论在线观看| 色婷婷久久久亚洲一区二区三区| 中文字幕va一区二区三区| 国产乱子伦视频一区二区三区| 欧美成人猛片aaaaaaa| 欧美aaaaaa午夜精品| 91精品国产黑色紧身裤美女| 图片区日韩欧美亚洲| 欧美日韩亚洲高清一区二区| 亚洲在线视频网站| 欧美日韩免费高清一区色橹橹| 一区二区三区在线观看动漫| 色美美综合视频| 亚洲精品免费电影| 欧美怡红院视频| 午夜影院久久久| 91精品国产欧美一区二区18| 免费成人在线影院| 欧美va亚洲va| 国产一区二区三区在线观看免费视频 | 国产亚洲欧美色| 国产69精品久久99不卡| 国产欧美一区二区三区沐欲 | 精品日韩99亚洲| 激情欧美一区二区| 精品对白一区国产伦| 国产毛片精品视频| 国产精品污污网站在线观看| av一二三不卡影片| 亚洲综合一区二区精品导航| 欧美色窝79yyyycom| 日韩制服丝袜av| 久久这里只有精品视频网| 高清视频一区二区| 亚洲色图在线播放| 欧美日韩亚洲综合在线| 久久精品国产99国产精品| 久久久综合网站| 97se狠狠狠综合亚洲狠狠| 亚洲已满18点击进入久久| 制服.丝袜.亚洲.中文.综合| 久久成人18免费观看| 欧美激情一区二区三区| 91丨九色porny丨蝌蚪| 五月婷婷久久丁香| 久久久久国产免费免费| 91亚洲精华国产精华精华液| 午夜精品久久久久久不卡8050| 精品精品欲导航| 9色porny自拍视频一区二区| 视频一区二区中文字幕| 久久久亚洲精品一区二区三区| 91麻豆免费观看| 蜜臀av在线播放一区二区三区| 国产日产欧美一区二区视频| 日本电影欧美片| 狠狠久久亚洲欧美| 亚洲精品成a人| 2023国产精品| 在线亚洲+欧美+日本专区| 精品一区二区三区在线观看 | 国产suv精品一区二区三区 | 欧美亚洲国产怡红院影院| 另类小说综合欧美亚洲| 亚洲男女毛片无遮挡| 日韩午夜在线播放| 色综合久久88色综合天天| 激情图片小说一区| 亚洲综合久久久| 国产午夜亚洲精品羞羞网站| 欧美日韩电影在线| 99视频一区二区| 久久黄色级2电影| 亚洲综合久久久久| 中文字幕av一区二区三区高| 51午夜精品国产| 91猫先生在线| 国产精品99久久久| 青青草伊人久久| 一区二区三区不卡视频| 亚洲国产电影在线观看| 欧美一区二区美女| 欧美伊人久久久久久久久影院| 国产丶欧美丶日本不卡视频| 日日摸夜夜添夜夜添国产精品| 国产精品美女久久久久高潮| 26uuu亚洲| 91精品国产一区二区人妖| 91视频免费看| 成人午夜av在线| 国产精品99久久久久久有的能看| 日本欧美一区二区在线观看| 一区二区三区欧美久久| 国产精品麻豆一区二区| 国产午夜精品美女毛片视频| 日韩午夜激情av| 欧美伦理电影网| 欧美日韩中文字幕一区| 一本一本大道香蕉久在线精品| 国产福利91精品一区二区三区| 蜜臀久久99精品久久久画质超高清 | 成人免费一区二区三区在线观看| 欧美精品一区二区三区高清aⅴ| 在线播放国产精品二区一二区四区| 色哟哟日韩精品| k8久久久一区二区三区| 成人精品高清在线| 成人禁用看黄a在线| 成人一道本在线| av在线播放成人| 91在线视频播放| 色婷婷综合久久久中文字幕| 91在线观看美女|