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

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

?? cgen.c

?? C語言高級實例解析的源代碼
?? C
字號:









#include "globals.h"
#include "symtab.h"
#include "code.h"
#include "cgen.h"


static int tmpOffset = 0;


static void cGen (TreeNode * tree);


static void genStmt( TreeNode * tree)
{ TreeNode * p1, * p2, * p3;
  int savedLoc1,savedLoc2,currentLoc;
  int loc;
  switch (tree->kind.stmt) {

      case IfK :
         if (TraceCode) emitComment("-> if") ;
         p1 = tree->child[0] ;
         p2 = tree->child[1] ;
         p3 = tree->child[2] ;
         
         cGen(p1);
         savedLoc1 = emitSkip(1) ;
         emitComment("if: jump to else belongs here");
         
         cGen(p2);
         savedLoc2 = emitSkip(1) ;
         emitComment("if: jump to end belongs here");
         currentLoc = emitSkip(0) ;
         emitBackup(savedLoc1) ;
         emitRM_Abs("JEQ",ac,currentLoc,"if: jmp to else");
         emitRestore() ;
         
         cGen(p3);
         currentLoc = emitSkip(0) ;
         emitBackup(savedLoc2) ;
         emitRM_Abs("LDA",pc,currentLoc,"jmp to end") ;
         emitRestore() ;
         if (TraceCode)  emitComment("<- if") ;
         break; 

      case RepeatK:
         if (TraceCode) emitComment("-> repeat") ;
         p1 = tree->child[0] ;
         p2 = tree->child[1] ;
         savedLoc1 = emitSkip(0);
         emitComment("repeat: jump after body comes back here");
         
         cGen(p1);
         
         cGen(p2);
         emitRM_Abs("JEQ",ac,savedLoc1,"repeat: jmp back to body");
         if (TraceCode)  emitComment("<- repeat") ;
         break; 

      case AssignK:
         if (TraceCode) emitComment("-> assign") ;
         
         cGen(tree->child[0]);
         
         loc = st_lookup(tree->attr.name);
         emitRM("ST",ac,loc,gp,"assign: store value");
         if (TraceCode)  emitComment("<- assign") ;
         break; 

      case ReadK:
         emitRO("IN",ac,0,0,"read integer value");
         loc = st_lookup(tree->attr.name);
         emitRM("ST",ac,loc,gp,"read: store value");
         break;
      case WriteK:
         
         cGen(tree->child[0]);
         
         emitRO("OUT",ac,0,0,"write ac");
         break;
      default:
         break;
    }
} 


static void genExp( TreeNode * tree)
{ int loc;
  TreeNode * p1, * p2;
  switch (tree->kind.exp) {

    case ConstK :
      if (TraceCode) emitComment("-> Const") ;
      
      emitRM("LDC",ac,tree->attr.val,0,"load const");
      if (TraceCode)  emitComment("<- Const") ;
      break; 
    
    case IdK :
      if (TraceCode) emitComment("-> Id") ;
      loc = st_lookup(tree->attr.name);
      emitRM("LD",ac,loc,gp,"load id value");
      if (TraceCode)  emitComment("<- Id") ;
      break; 

    case OpK :
         if (TraceCode) emitComment("-> Op") ;
         p1 = tree->child[0];
         p2 = tree->child[1];
         
         cGen(p1);
         
         emitRM("ST",ac,tmpOffset--,mp,"op: push left");
         
         cGen(p2);
         
         emitRM("LD",ac1,++tmpOffset,mp,"op: load left");
         switch (tree->attr.op) {
            case PLUS :
               emitRO("ADD",ac,ac1,ac,"op +");
               break;
            case MINUS :
               emitRO("SUB",ac,ac1,ac,"op -");
               break;
            case TIMES :
               emitRO("MUL",ac,ac1,ac,"op *");
               break;
            case OVER :
               emitRO("DIV",ac,ac1,ac,"op /");
               break;
            case LT :
               emitRO("SUB",ac,ac1,ac,"op <") ;
               emitRM("JLT",ac,2,pc,"br if true") ;
               emitRM("LDC",ac,0,ac,"false case") ;
               emitRM("LDA",pc,1,pc,"unconditional jmp") ;
               emitRM("LDC",ac,1,ac,"true case") ;
               break;
            case EQ :
               emitRO("SUB",ac,ac1,ac,"op ==") ;
               emitRM("JEQ",ac,2,pc,"br if true");
               emitRM("LDC",ac,0,ac,"false case") ;
               emitRM("LDA",pc,1,pc,"unconditional jmp") ;
               emitRM("LDC",ac,1,ac,"true case") ;
               break;
            default:
               emitComment("BUG: Unknown operator");
               break;
         } 
         if (TraceCode)  emitComment("<- Op") ;
         break; 

    default:
      break;
  }
} 


static void cGen( TreeNode * tree)
{ if (tree != NULL)
  { switch (tree->nodekind) {
      case StmtK:
        genStmt(tree);
        break;
      case ExpK:
        genExp(tree);
        break;
      default:
        break;
    }
    cGen(tree->sibling);
  }
}





void codeGen(TreeNode * syntaxTree, char * codefile)
{  char * s = malloc(strlen(codefile)+7);
   strcpy(s,"File: ");
   strcat(s,codefile);
   emitComment("TINY Compilation to TM Code");
   emitComment(s);
   
   emitComment("Standard prelude:");
   emitRM("LD",mp,0,ac,"load maxaddress from location 0");
   emitRM("ST",ac,0,ac,"clear location 0");
   emitComment("End of standard prelude.");
   
   cGen(syntaxTree);
   
   emitComment("End of execution.");
   emitRO("HALT",0,0,0,"");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
波多野结衣的一区二区三区| 日韩视频免费观看高清完整版在线观看 | 亚洲区小说区图片区qvod| 一区二区三区**美女毛片| 国产一区二区电影| 欧美精品丝袜中出| 中文字幕视频一区二区三区久| 五月天中文字幕一区二区| 国产精品12区| 在线电影欧美成精品| 亚洲私人黄色宅男| 国产精品一区二区三区乱码| 欧美日韩国产在线观看| 国产精品乱码一区二区三区软件 | 韩日av一区二区| 欧美日韩情趣电影| 亚洲免费观看高清完整 | 日韩中文字幕麻豆| 色婷婷av一区二区三区大白胸| 久久久久久久电影| 蜜臀av性久久久久蜜臀av麻豆| 欧洲色大大久久| 亚洲欧美日韩一区二区三区在线观看| 韩国一区二区在线观看| 日韩精品一区二区三区在线 | 91亚洲永久精品| 国产三级欧美三级| 国产精品一区二区在线观看不卡| 欧美一区二区三区免费大片| 亚洲国产精品久久一线不卡| 在线欧美一区二区| 亚洲国产一区二区三区| 欧美在线|欧美| 亚洲国产综合色| 精品视频一区三区九区| 亚洲丶国产丶欧美一区二区三区| 在线视频中文字幕一区二区| 亚洲欧美激情小说另类| 日本高清视频一区二区| 亚洲女同ⅹxx女同tv| 日本精品一区二区三区高清 | 精品国内二区三区| 久草精品在线观看| 国产日韩一级二级三级| 成人国产一区二区三区精品| 亚洲品质自拍视频| 欧美在线免费视屏| 日韩精品三区四区| 精品精品国产高清a毛片牛牛 | 激情综合色丁香一区二区| 精品处破学生在线二十三| 国产一区美女在线| 日韩伦理av电影| 欧美优质美女网站| 免费在线欧美视频| 久久九九国产精品| 99久久99久久综合| 午夜视频久久久久久| 欧美成人三级电影在线| 国产精品亚洲人在线观看| 亚洲视频在线一区| 欧美一区二区视频在线观看2022 | 91麻豆精品国产综合久久久久久| 美日韩一级片在线观看| 久久久久免费观看| 一本一本大道香蕉久在线精品| 亚洲一区在线播放| 久久青草欧美一区二区三区| 99麻豆久久久国产精品免费| 性做久久久久久久久| 精品美女一区二区三区| 97久久精品人人做人人爽| 日本伊人色综合网| 亚洲色图在线视频| 日韩欧美一二三| 91在线免费视频观看| 免费在线观看不卡| 日韩毛片在线免费观看| 日韩欧美在线综合网| 91亚洲男人天堂| 久久99国产精品免费| 一区二区三区成人在线视频| 日韩欧美区一区二| 在线观看www91| 国产激情偷乱视频一区二区三区| 亚洲免费av高清| 国产性色一区二区| 5858s免费视频成人| 91免费看视频| 国产激情视频一区二区三区欧美| 亚洲高清在线精品| 中文字幕中文字幕中文字幕亚洲无线| 91精品国产色综合久久ai换脸| 成人免费精品视频| 韩国欧美国产一区| 日本不卡在线视频| 亚洲国产美女搞黄色| 亚洲婷婷综合色高清在线| 久久久国产午夜精品 | 91福利在线导航| 国产不卡一区视频| 激情五月婷婷综合| 裸体歌舞表演一区二区| 天天综合天天做天天综合| 一区二区三区日韩欧美精品| 中文字幕一区二区三区四区不卡 | 欧美中文字幕亚洲一区二区va在线| 国产精品一品二品| 久久av资源网| 久久成人免费日本黄色| 日韩中文字幕一区二区三区| 亚洲成a人片在线观看中文| 亚洲免费电影在线| 亚洲美女视频在线| 中文字幕五月欧美| 亚洲三级在线免费观看| 亚洲精品日产精品乱码不卡| 一区视频在线播放| **欧美大码日韩| 亚洲精品久久久久久国产精华液| 国产精品久久久久久一区二区三区| 国产亚洲短视频| 国产丝袜在线精品| 中文字幕不卡的av| 亚洲欧美日韩精品久久久久| 亚洲精品高清视频在线观看| 日韩伦理免费电影| 亚洲电影一级黄| 美女mm1313爽爽久久久蜜臀| 蜜臀久久99精品久久久久宅男| 蜜臀av国产精品久久久久 | 日韩欧美一级精品久久| 精品国产乱码久久久久久浪潮| 色综合天天综合网国产成人综合天 | 67194成人在线观看| 欧美一区国产二区| 亚洲精品一区二区三区精华液 | 欧美久久一二三四区| 7777精品伊人久久久大香线蕉完整版| 337p亚洲精品色噜噜狠狠| 欧美电视剧在线观看完整版| 久久久99精品免费观看| 亚洲嫩草精品久久| 日韩精品一级二级| 国产成人亚洲综合a∨婷婷| 色天使久久综合网天天| 欧美高清www午色夜在线视频| 欧美一区二区啪啪| 国产精品超碰97尤物18| 丝袜美腿一区二区三区| 国产一区二区网址| 91成人免费网站| 久久五月婷婷丁香社区| 亚洲美女一区二区三区| 理论片日本一区| 91蜜桃网址入口| 欧美mv日韩mv亚洲| 亚洲欧美日韩在线| 狠狠色丁香久久婷婷综合丁香| 91麻豆123| 26uuu亚洲| 亚洲成人动漫在线观看| 国产99精品国产| 91精品一区二区三区在线观看| 日本一区二区三区免费乱视频 | 日本一区二区三区在线不卡| 亚洲午夜激情网站| 成人精品高清在线| 欧美一级一级性生活免费录像| 中文字幕五月欧美| 国产乱子轮精品视频| 欧美高清一级片在线| 亚洲免费在线视频一区 二区| 国产在线视频一区二区| 欧美日韩国产一二三| 成人免费在线视频观看| 免费人成黄页网站在线一区二区| 91一区二区三区在线播放| 国产亚洲人成网站| 久久国产精品色婷婷| 欧美另类久久久品| 亚洲综合色成人| 99久久精品免费看| 日本一区二区不卡视频| 久久99国产精品久久| 91精品国产麻豆国产自产在线 | 国模娜娜一区二区三区| 欧美电影在线免费观看| 夜夜嗨av一区二区三区网页| 成人午夜激情视频| 国产欧美日韩视频一区二区| 久久精品国产免费看久久精品| 欧美剧情电影在线观看完整版免费励志电影 | 欧美午夜片在线看| 亚洲欧美一区二区久久| 91蜜桃婷婷狠狠久久综合9色| 欧美高清在线视频| 成人综合激情网| 国产精品国产三级国产aⅴ入口| 国产成人综合亚洲91猫咪|