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

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

?? analyze.c

?? C語言高級編程及實例部析 by Johnzhang0921
?? C
字號:
/****************************************************/
/* 文件: analyze.c                                  */
/* 語義分析代碼實現					                 */
/****************************************************/

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

/* 變量內存位置計數器counter for variable memory locations */
static int location = 0;

/* 函數traverse是一個通用的遞歸訪問語法樹函數
 * 他通過調用preProc函數來實現前序遍歷;
 * 調用函數postProc實現后序遍歷 
 */
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是一個什么都不做的函數,
 * 目的是產生單前敘或者單后序遍歷的遍歷過程
 */
static void nullProc(TreeNode * t)
{ if (t==NULL) return;
  else return;
}

/* 函數insertNode把在t(語法樹)中存儲的節點插入符號表
 */
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)
          /* 沒有在符號表中找到,把這個表標識符按照的新的定義處理 */
            st_insert(t->attr.name,t->lineno,location++);
          else
          /* 已經在符號表中找到,所以忽略位置信息,插入使用這個變量的行號 */ 
            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)
           /* 沒有在符號表中找到,把這個表標識符按照的新的定義處理 */
            st_insert(t->attr.name,t->lineno,location++);
          else
          /* 已經在符號表中找到,所以忽略位置信息,插入使用這個變量的行號 */ 
			st_insert(t->attr.name,t->lineno,0);
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }
}

/* 函數buildSymtab通過前敘遍歷語法樹構建符號表
 */
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;
}

/* 函數checkNode在語法樹的一個節點執行類型檢查
 */
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)
      { 
		/* IF語句,類型是布爾型 */
	    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;

  }
}

/* 函數typeCheck通過后序遍歷語法樹來執行類型檢查
 */
void typeCheck(TreeNode * syntaxTree)
{ traverse(syntaxTree,nullProc,checkNode);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合一区二区| 欧美亚洲国产一区二区三区| 国产成人av电影在线| 色综合色狠狠天天综合色| 欧美日韩卡一卡二| 久久综合色综合88| 亚洲嫩草精品久久| 精品一区二区国语对白| 成人高清视频免费观看| 欧美精品色一区二区三区| 久久久精品天堂| 日韩主播视频在线| 99久久er热在这里只有精品15| 91精品国产一区二区| ...xxx性欧美| 国产在线精品国自产拍免费| 欧美影视一区在线| 中文欧美字幕免费| 精品影院一区二区久久久| 91老师国产黑色丝袜在线| 欧美精品一区视频| 日韩精品乱码免费| 欧洲生活片亚洲生活在线观看| 久久久久久久综合日本| 亚洲在线视频免费观看| 韩国v欧美v亚洲v日本v| 99久久久精品免费观看国产蜜| 欧美一区中文字幕| 国产欧美日韩麻豆91| 亚洲成a天堂v人片| 成人精品gif动图一区| 欧美一区二区三区视频在线| 中文字幕日韩av资源站| 日本午夜一区二区| 成人97人人超碰人人99| 欧美一区二区三区小说| 亚洲欧洲av一区二区三区久久| 美女在线一区二区| 日本黄色一区二区| 国产亚洲美州欧州综合国| 婷婷久久综合九色国产成人| 欧美精品一卡二卡| 亚洲欧洲日产国码二区| 国产一区二区美女| 337p亚洲精品色噜噜噜| 国产精品剧情在线亚洲| 精品一区二区三区香蕉蜜桃 | 欧美不卡123| 亚洲乱码国产乱码精品精小说 | 欧美一区二区三区思思人| 亚洲欧洲无码一区二区三区| 免费欧美在线视频| 欧洲激情一区二区| 亚洲麻豆国产自偷在线| 成人免费视频一区| 久久久久国色av免费看影院| 男女男精品视频| 91 com成人网| 婷婷丁香激情综合| 在线观看免费视频综合| 国产精品白丝在线| 成人小视频免费在线观看| 久久免费国产精品| 国内精品自线一区二区三区视频| 日韩一区二区免费高清| 国产精品久久久久久久久久久免费看 | 日韩欧美高清在线| 婷婷夜色潮精品综合在线| 99精品视频免费在线观看| 精品久久人人做人人爽| 韩国成人在线视频| 国产日产精品1区| 国产精品1024久久| 国产人妖乱国产精品人妖| 国产乱淫av一区二区三区| 国产午夜亚洲精品理论片色戒| 国产露脸91国语对白| 国产区在线观看成人精品| 国产成人aaa| 中文字幕一区不卡| 色老汉av一区二区三区| 依依成人精品视频| 欧美日韩国产成人在线91 | 亚洲欧洲日产国码二区| 色欧美片视频在线观看| 亚洲福中文字幕伊人影院| 欧美日韩精品欧美日韩精品一综合| 一区二区三区小说| 色成人在线视频| 日韩激情视频在线观看| 欧美大黄免费观看| 国产精品一区二区免费不卡| 欧美精品一区二区三区在线| 国产·精品毛片| 亚洲精品高清视频在线观看| 欧美日韩成人综合天天影院| 精品一二线国产| 亚洲婷婷在线视频| 欧美久久一区二区| 日韩精品久久理论片| 久久久久九九视频| 99久久精品一区| 日日夜夜免费精品视频| 26uuu精品一区二区三区四区在线| 美女视频黄久久| 国产精品久久久爽爽爽麻豆色哟哟 | 麻豆91精品91久久久的内涵| 精品久久久久久综合日本欧美| 高清在线观看日韩| 亚洲国产中文字幕| 久久嫩草精品久久久精品| 91蝌蚪porny| 美女视频黄 久久| 国产精品久久久久国产精品日日| 欧美喷水一区二区| 成人精品视频一区二区三区| 日韩影院免费视频| 久久人人超碰精品| 91香蕉视频在线| 国产一区二区网址| 17c精品麻豆一区二区免费| 欧美一区二区三区系列电影| 色先锋资源久久综合| 国产99久久久久| 日本欧美大码aⅴ在线播放| 国产精品丝袜一区| 在线观看一区二区精品视频| 国产精品 欧美精品| 日本欧美加勒比视频| 亚洲免费色视频| 国产三级精品在线| 欧美一区二区三区白人 | 国产99久久久国产精品免费看| 偷拍日韩校园综合在线| 亚洲视频免费看| 国产女人18毛片水真多成人如厕 | 亚洲一区av在线| 综合久久一区二区三区| 久久精品水蜜桃av综合天堂| 7777精品伊人久久久大香线蕉完整版 | 精品少妇一区二区三区免费观看| 在线免费观看视频一区| 成人爽a毛片一区二区免费| 黑人巨大精品欧美黑白配亚洲 | 欧美xxxx老人做受| 欧美在线三级电影| 成人av电影观看| 国产成人精品三级麻豆| 老司机精品视频线观看86| 亚洲电影一区二区三区| 国产精品传媒入口麻豆| 国产欧美综合在线| 国产偷国产偷亚洲高清人白洁| 精品国产sm最大网站免费看| 欧美精品1区2区3区| 欧美日韩精品免费| av中文字幕一区| 老司机午夜精品| 蜜臀久久99精品久久久久久9| 日韩高清不卡一区二区三区| 亚洲高清视频中文字幕| 夜夜精品视频一区二区| 一区二区三区中文字幕电影| 亚洲欧美精品午睡沙发| 亚洲少妇30p| 亚洲天堂网中文字| 一区二区三区四区中文字幕| 亚洲精品乱码久久久久久日本蜜臀| 久久久久国色av免费看影院| 国产喷白浆一区二区三区| 国产亚洲一区二区三区| 国产农村妇女精品| 国产精品久久久久久久久久免费看| 国产精品久久国产精麻豆99网站 | 99riav久久精品riav| 99久久精品一区二区| 色综合久久久久综合体桃花网| 色噜噜狠狠一区二区三区果冻| 欧美三级韩国三级日本三斤| 欧美三级资源在线| 欧美视频日韩视频| 欧美天堂一区二区三区| 91精品黄色片免费大全| 欧美xingq一区二区| 国产偷国产偷亚洲高清人白洁| 国产精品福利在线播放| 夜色激情一区二区| 男男gaygay亚洲| 国产99久久久久| 日本福利一区二区| 8x8x8国产精品| 日韩欧美一级精品久久| 日本一区二区电影| 一区二区三区中文在线观看| 奇米综合一区二区三区精品视频| 国产成人综合在线观看| 色999日韩国产欧美一区二区| 欧美一级高清片在线观看| 欧美激情一区二区三区四区| 亚洲激情自拍偷拍|