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

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

?? analyze.c

?? 小的c編譯器包括詞法和語法分析
?? C
字號:
/****************************************************/
/* File: analyze.c                                  */
/* Semantic analyzer implementation                 */
/* for the TINY compiler                            */
/* Compiler Construction: Principles and Practice   */
/* Kenneth C. Louden                                */
/****************************************************/

#include "globals.h"
#include "symtab.h"
#include "analyze.h"

/* counter for variable memory locations */
static int location = 0;

/* Procedure traverse is a generic recursive 
 * syntax tree traversal routine:
 * it applies preProc in preorder and postProc 
 * in postorder to tree pointed to by t
 */
static void traverse( TreeNode * t,
               void (* preProc) (TreeNode *),
               void (* postProc) (TreeNode *) )
{ if (t != NULL)
  { preProc(t);
    { int i;
      for (i=0; i < MAXCHILDREN; i++)
        traverse(t->child[i],preProc,postProc);
    }
    postProc(t);
    traverse(t->sibling,preProc,postProc);
  }
}

/* nullProc is a do-nothing procedure to 
 * generate preorder-only or postorder-only
 * traversals from traverse
 */
static void nullProc(TreeNode * t)
{ if (t==NULL) return;
  else return;
}

/* Procedure insertNode inserts 
 * identifiers stored in t into 
 * the symbol table 
 */
static void insertNode( TreeNode * t)
{ switch (t->nodekind)
  { case StmtK:
      switch (t->kind.stmt)
      { case AssignK:
        case ReadK:
          if (st_lookup(t->attr.name) == -1)
          /* not yet in table, so treat as new definition */
            st_insert(t->attr.name,t->lineno,location++);
          else
          /* already in table, so ignore location, 
             add line number of use only */ 
            st_insert(t->attr.name,t->lineno,0);
          break;
        default:
          break;
      }
      break;
    case ExpK:
      switch (t->kind.exp)
      { case IdK:
          if (st_lookup(t->attr.name) == -1)
          /* not yet in table, so treat as new definition */
            st_insert(t->attr.name,t->lineno,location++);
          else
          /* already in table, so ignore location, 
             add line number of use only */ 
            st_insert(t->attr.name,t->lineno,0);
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }
}

/* Function buildSymtab constructs the symbol 
 * table by preorder traversal of the syntax tree
 */
void buildSymtab(TreeNode * syntaxTree)
{ traverse(syntaxTree,insertNode,nullProc);
  if (TraceAnalyze)
  { fprintf(listing,"\nSymbol table:\n\n");
    printSymTab(listing);
  }
}

static void typeError(TreeNode * t, char * message)
{ fprintf(listing,"Type error at line %d: %s\n",t->lineno,message);
  Error = TRUE;
}

/* Procedure checkNode performs
 * type checking at a single tree node
 */
static void checkNode(TreeNode * t)
{ switch (t->nodekind)
  { case ExpK:
      switch (t->kind.exp)
      { case OpK:
          if ((t->child[0]->type != Integer) ||
              (t->child[1]->type != Integer))
            typeError(t,"Op applied to non-integer");
          if ((t->attr.op == EQ) || (t->attr.op == LT))
            t->type = Boolean;
          else
            t->type = Integer;
          break;
        case ConstK:
        case IdK:
          t->type = Integer;
          break;
        default:
          break;
      }
      break;
    case StmtK:
      switch (t->kind.stmt)
      { case IfK:
          if (t->child[0]->type == Integer)
            typeError(t->child[0],"if test is not Boolean");
          break;
        case AssignK:
          if (t->child[0]->type != Integer)
            typeError(t->child[0],"assignment of non-integer value");
          break;
        case WriteK:
          if (t->child[0]->type != Integer)
            typeError(t->child[0],"write of non-integer value");
          break;
        case RepeatK:
          if (t->child[1]->type == Integer)
            typeError(t->child[1],"repeat test is not Boolean");
          break;
        default:
          break;
      }
      break;
    default:
      break;

  }
}

/* Procedure typeCheck performs type checking 
 * by a postorder syntax tree traversal
 */
void typeCheck(TreeNode * syntaxTree)
{ traverse(syntaxTree,nullProc,checkNode);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日精品一区视频| 亚洲国产精品传媒在线观看| 日本道精品一区二区三区| 91啪亚洲精品| 欧美另类久久久品| 国产午夜精品久久| 亚洲综合另类小说| 久久99久久久久| 亚洲成av人**亚洲成av**| 精品亚洲国内自在自线福利| 精品成人在线观看| 亚洲人成在线观看一区二区| 日韩精品乱码av一区二区| 成人免费三级在线| 欧美一区二区性放荡片| 亚洲视频一二三| 国产高清久久久| 欧美mv和日韩mv国产网站| 亚洲精品久久嫩草网站秘色| 成人黄色在线网站| 欧美大片国产精品| 天天影视涩香欲综合网| 色婷婷久久久久swag精品| 久久亚洲精品小早川怜子| 美日韩黄色大片| 欧美日韩国产精品成人| 亚洲精品精品亚洲| 日韩精品一区二区三区四区| 国产电影精品久久禁18| 亚洲在线视频免费观看| 日韩色视频在线观看| 日韩精品免费视频人成| 国产午夜精品在线观看| 欧美在线免费播放| 亚洲精品国久久99热| 精品久久久三级丝袜| 9l国产精品久久久久麻豆| 中文字幕免费不卡| 91精品婷婷国产综合久久性色| 亚洲成人在线免费| 久久精品人人做| 欧美视频自拍偷拍| 日本不卡中文字幕| 精品国产乱码久久久久久影片| www.日韩精品| 免费成人av资源网| 欧美mv和日韩mv国产网站| 99精品国产99久久久久久白柏| 国产精品久久一卡二卡| 成人免费视频视频在线观看免费| 午夜精品123| 国产精品久久看| 日韩免费在线观看| 色国产综合视频| 成人小视频免费在线观看| 日韩激情av在线| 亚洲免费av高清| 国产午夜精品在线观看| 日韩欧美www| 91精品综合久久久久久| 91成人在线精品| caoporen国产精品视频| 国产成人精品免费看| 日本麻豆一区二区三区视频| 一区二区三区视频在线观看| 欧美乱妇23p| 欧美午夜精品久久久久久孕妇| av色综合久久天堂av综合| 国内欧美视频一区二区| 亚洲天堂精品在线观看| 久久这里只有精品视频网| 91精品国产综合久久国产大片| 日本乱人伦一区| 97精品久久久久中文字幕 | voyeur盗摄精品| 国产一区二区视频在线| 国产精品久久久久桃色tv| 久久先锋影音av鲁色资源| 日韩小视频在线观看专区| 91精品国产综合久久福利软件 | 欧美日韩免费电影| 91久久线看在观草草青青| 91蜜桃免费观看视频| 97se亚洲国产综合自在线不卡| www.欧美色图| 色噜噜狠狠一区二区三区果冻| 91在线视频网址| 91麻豆精品一区二区三区| 91丨porny丨在线| 在线视频中文字幕一区二区| 欧美性猛交一区二区三区精品| 欧洲亚洲精品在线| 中文字幕av一区二区三区高| 2020日本不卡一区二区视频| 久久久国产精品不卡| 欧美系列在线观看| 欧美日韩精品电影| 日韩美女视频一区二区在线观看| 久久中文字幕电影| 国产精品免费丝袜| 久久先锋资源网| 欧美激情在线免费观看| 夜夜精品浪潮av一区二区三区| 亚洲亚洲精品在线观看| 亚洲婷婷综合久久一本伊一区| 亚洲久草在线视频| 视频一区国产视频| 精品亚洲aⅴ乱码一区二区三区| 国产精品自拍网站| 日韩不卡手机在线v区| 国产一区二区剧情av在线| 波多野结衣的一区二区三区| 欧美在线视频全部完| 5858s免费视频成人| 久久亚洲一级片| 亚洲精品免费播放| 久久国产精品无码网站| 99在线视频精品| 911精品国产一区二区在线| 久久久久国色av免费看影院| 亚洲人成网站影音先锋播放| 日韩精品高清不卡| 欧美一区二区在线免费播放 | 久久天天做天天爱综合色| 亚洲色欲色欲www| 免费在线观看精品| av午夜一区麻豆| 91精品国产综合久久精品麻豆 | 欧美一区二区三区色| 国产精品白丝在线| 青青草97国产精品免费观看无弹窗版 | 在线观看中文字幕不卡| 久久久久免费观看| 日本亚洲免费观看| 色菇凉天天综合网| 亚洲国产高清在线观看视频| 午夜欧美在线一二页| yourporn久久国产精品| 日韩欧美不卡在线观看视频| 亚洲综合在线免费观看| 成人精品一区二区三区中文字幕| 日韩一区二区三区三四区视频在线观看 | 91小视频免费观看| 精品精品欲导航| 一区二区三区欧美激情| 国产一区免费电影| 欧美亚洲动漫另类| 亚洲人成网站色在线观看| 久久国产精品色婷婷| 粉嫩av一区二区三区粉嫩| 蜜桃免费网站一区二区三区| 成人激情黄色小说| 日韩欧美一级精品久久| 亚洲精品成a人| 99久久国产综合精品色伊| 欧美成人精精品一区二区频| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲成人免费观看| 91免费看片在线观看| 久久久久久久久久久久久女国产乱| 亚洲国产婷婷综合在线精品| 成人h动漫精品一区二区| 久久久www免费人成精品| 午夜影院久久久| 99久久国产综合精品色伊| 久久久久久免费网| 久久99热99| 日韩亚洲欧美在线观看| 亚洲一区二区三区四区在线 | 亚洲另类一区二区| 不卡的电视剧免费网站有什么| 久久精品日产第一区二区三区高清版 | 欧美一级欧美三级在线观看| 亚洲一区二区精品视频| 欧美巨大另类极品videosbest| 中文字幕一区二区视频| 久久伊99综合婷婷久久伊| 丝袜国产日韩另类美女| 日本韩国欧美一区| 国产精品第13页| voyeur盗摄精品| 亚洲欧洲另类国产综合| 成人av资源在线观看| 国产精品素人一区二区| 国产精品一区二区视频| 精品国产乱码久久久久久久 | 性做久久久久久久久| 欧美日韩中文一区| 亚洲一线二线三线视频| 欧美日韩你懂得| 天堂va蜜桃一区二区三区漫画版| 欧美精品色一区二区三区| 亚洲第一综合色| 在线欧美日韩精品| 亚洲国产成人porn| 91在线视频网址| 亚洲mv在线观看| 日韩精品一区二区三区视频| 国产一区二区在线视频| 国产午夜精品理论片a级大结局 |