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

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

?? analyze.cpp

?? 完成一個簡化的C語言編譯程序
?? CPP
字號:
#include "globals.h"
#include "symtab.h"
#include "analyze.h"

static int location=0;
static int flocation=0;

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);
	  }
}

static void nullProc(TreeNode * t)
{
    if(t==NULL) return ;
	else return;
}

static void insertNode(TreeNode *t,tableRec* p)
{
	int result=0;
       switch(t->nodekind)
	   {	   
	    case DeclK:
			switch(t->kind.decl)
			{
			case SingleVarK:
				result=st_lookup(t->attr.name,p);
				if(result==-1)
				   st_insert(t->attr.name,t->type,false,t->lineno,location++,p);
				else if(result==0)
				   fprintf(listing,"redefinetion error at line %d : %s ",t->lineno,t->attr.name);
			    else
                   st_insert(t->attr.name,t->type,false,t->lineno,location++,p);
				break;
			case ArrayVarK:
				result=st_lookup(t->attr.name,p);
				if(result==-1)
				{
                       location+=t->array_size-1;
			           st_insert(t->attr.name,t->type,false,t->lineno,location,p);
				       location++;
				}
			    else if(result==0)
				{
				       fprintf(listing,"redefinetion error at line %d : %s ",t->lineno,t->attr.name);
				}
				else
				{
				       location+=t->array_size-1;
			           st_insert(t->attr.name,t->type,false,t->lineno,location,p);
				       location++;
				}
				break;	
			case FuncVarK:
				result=st_lookup(t->attr.name,p);
				if(result==-1)
				  st_insert(t->attr.name,t->type,true,t->lineno,flocation++,p);
				else if(result==0)
				{
    				fprintf(listing,"redefinetion error at line %d : %s ",t->lineno,t->attr.name);
				}
				else
				{
				    st_insert(t->attr.name,t->type,true,t->lineno,flocation++,p);
				}
				break;
			}
	   }
       
}

void buildSymtab(TreeNode* t,tableRec* parent)
{
   
   if(t!=NULL)
   {
	   tableRec* nextParent=parent;
	   insertNode(t,parent);
	   if(t->nodekind==StmtK&&t->kind.stmt==CompoundK)
	   {
		  tableRec* newchild=new tableRec;
		  for(int i=0;i<BUCKETSIZE;i++)
			  newchild->table[i]=NULL;
		  newchild->sibling=NULL;
		  newchild->parent=NULL;
		  newchild->child=NULL;

	      tableRec* lastchild=parent->child;
		  if(lastchild==NULL)
		  {
		     parent->child=newchild;
			 newchild->parent=parent;
		  }
		  else
		  {
		         while(lastchild->sibling!=NULL)
					 lastchild=lastchild->sibling;
				 lastchild->sibling=newchild;
				 newchild->parent=parent;

		  }
		  nextParent=newchild;
		  t->tablep=nextParent;
	   }//if t is compoundK
	   else
	   {
	     t->tablep=parent;
	   }
      for(int i=0;i<MAXCHILDREN;i++)
		  buildSymtab(t->child[i],nextParent);
	  buildSymtab(t->sibling,parent); 
   }
}

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

static void checkNode(TreeNode* t)
{
	int memloc=0;
     switch(t->nodekind)
	 {
	 case ExpK:
		 switch(t->kind.exp)
		 {
		 case OpK:
			 if((t->child[0]->type!=t->child[1]->type))
				 typeError(t,"Op applied to different type");
			 else
			 {
				 if((t->attr.op==EQ)||(t->attr.op==NE)||(t->attr.op==GT)||
					 (t->attr.op==GE)||(t->attr.op==LT)||(t->attr.op==LE)||(t->attr.op==NOT))
					 t->type=Boolean;
				 else
				 {
			     switch(t->child[0]->type)
				 {
				 case Integer:
					 t->type=Integer;
					 break;
				 case Void:
					 t->type=Void;
					 break;
				 case Float:
					 t->type=Float;
					 break;
				 case Char:
					 t->type=Char;
					 break;
				 default:
					 break;
				 }
				 }
			 }
			 break;
	
		 case IdK:
			 if(st_lookup(t->attr.name,t->tablep,t->type,memloc)==-1)
				 typeError(t,"Undeclarared Identifier!");
			 break;
		 case ArrayK:
			 if(st_lookup(t->attr.name,t->tablep,t->type,memloc)==-1)
				 typeError(t,"Undeclarared Identifier!");
			 break;
		 case CallK:
			 if(st_lookup(t->attr.name,t->tablep,t->type,memloc)==-1)
				 typeError(t,"undeclared function call!");
			 break;
		 default:
			 break;

		 }
		 break;
	case StmtK:
		  switch(t->kind.stmt)
		  {
		  case IfK:
			  if(t->child[0]->type!=Boolean)
				  typeError(t->child[0],"if test is not Boolean");
			  break;
		  case AssignK:
			  if(t->child[0]->type!=t->child[1]->type)
				  typeError(t->child[0],"assignment of diffent type");
			  break;
		  case WhileK:
			  if(t->child[0]->type!=Boolean)
				  typeError(t->child[0],"while test is not Boolean");
			  break;
		  default:
			  break;
		  }
		  break;
    default:
		break;


	 }
}

void typeCheck(TreeNode* syntaxTree)
{
	traverse(syntaxTree,nullProc,checkNode);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美偷拍一区二区| 天天操天天干天天综合网| 精品国产露脸精彩对白| 日韩一卡二卡三卡四卡| 91精品综合久久久久久| 91精品国产麻豆| 日韩一区二区免费高清| 久久久一区二区三区捆绑**| 国产视频一区二区在线观看| 中文字幕不卡三区| 亚洲精品精品亚洲| 久久精品国产77777蜜臀| 国产中文一区二区三区| 日本精品一区二区三区高清| 欧美欧美欧美欧美| 久久综合精品国产一区二区三区| 国产精品美女久久福利网站 | 中文字幕日本乱码精品影院| 亚洲视频一区二区在线| 日本在线不卡视频| 欧美日韩一卡二卡三卡| 久久久久国色av免费看影院| 亚洲第一激情av| 92国产精品观看| 国产午夜精品一区二区| 日韩国产高清影视| 欧美午夜视频网站| 欧美极品美女视频| 国产精品一区二区果冻传媒| 欧美日本韩国一区| 亚洲成人免费在线| 91电影在线观看| 亚洲乱码一区二区三区在线观看| 国产一区二区久久| 欧美videos大乳护士334| 偷拍日韩校园综合在线| 欧美午夜精品久久久久久孕妇| 一区在线观看免费| 成人动漫一区二区三区| 中文字幕亚洲在| 99久免费精品视频在线观看 | 三级不卡在线观看| 欧美精品在线一区二区三区| 亚洲国产成人91porn| 欧美三级韩国三级日本三斤| 亚洲一区二区av电影| 欧美性一二三区| 美女视频免费一区| 国产午夜精品久久久久久久| 91亚洲午夜精品久久久久久| 亚洲动漫第一页| 精品久久久久一区二区国产| 国产成人啪午夜精品网站男同| 国产精品久久久久国产精品日日| 91污在线观看| 日韩精品免费视频人成| 2欧美一区二区三区在线观看视频| 国产毛片一区二区| 亚洲成国产人片在线观看| 欧美成人性战久久| 色综合久久六月婷婷中文字幕| 日韩av在线发布| 日韩欧美一卡二卡| 91天堂素人约啪| 蜜桃视频一区二区| 欧美高清视频一二三区| 一区二区三区日韩| 欧美性色aⅴ视频一区日韩精品| 中文字幕亚洲欧美在线不卡| 欧美日韩高清在线| 亚洲国产日韩在线一区模特| 一区二区三区.www| voyeur盗摄精品| 亚洲国产精品二十页| 国产伦精一区二区三区| 日韩精品一区二区三区在线播放| 中文字幕高清一区| 国产区在线观看成人精品| 91在线porny国产在线看| 亚洲精品高清在线| 91日韩精品一区| 日韩精品免费视频人成| 日韩精品一区二区三区swag | 日韩西西人体444www| 日本成人中文字幕在线视频| 日韩精品在线一区二区| 91传媒视频在线播放| 国产精品中文字幕欧美| 亚洲精品日日夜夜| 一区二区三区欧美在线观看| 久久久久久久久久久久电影 | 精品久久久久久久一区二区蜜臀| 一本色道综合亚洲| 日本高清不卡aⅴ免费网站| 欧洲色大大久久| 精品欧美一区二区三区精品久久 | 麻豆精品新av中文字幕| 久久99九九99精品| 国产精品一级二级三级| eeuss国产一区二区三区| 欧美日韩电影一区| 国产偷国产偷亚洲高清人白洁| 中文字幕av一区二区三区免费看| 美女一区二区视频| 日韩一区二区在线观看| 日韩中文字幕区一区有砖一区| av成人老司机| 香蕉久久夜色精品国产使用方法| 亚洲国产精品精华液ab| 日本视频一区二区| 91网站黄www| 国产欧美日韩不卡免费| 五月婷婷综合网| 91在线视频观看| 精品国产免费人成电影在线观看四季| 久久综合99re88久久爱| 亚洲第一搞黄网站| 91国产丝袜在线播放| 国产人成一区二区三区影院| 日本欧美一区二区| 91精品国产手机| 亚洲高清免费视频| 欧美日韩成人高清| 樱桃国产成人精品视频| 色噜噜狠狠色综合中国| 亚洲色图欧美偷拍| 91麻豆swag| 夜夜操天天操亚洲| 欧洲激情一区二区| 五月综合激情婷婷六月色窝| 日本久久电影网| 亚洲第一精品在线| 日韩视频免费观看高清在线视频| 亚洲专区一二三| 欧美老肥妇做.爰bbww视频| 亚洲图片欧美视频| 日韩欧美专区在线| 国内精品不卡在线| 精品国产乱子伦一区| 狠狠狠色丁香婷婷综合激情| 26uuu久久综合| 99精品视频一区二区| 亚洲综合色网站| 欧美成人伊人久久综合网| 高清国产一区二区| 亚洲地区一二三色| 久久精品视频免费观看| 91啪亚洲精品| 精品一区二区三区在线观看国产| 久久综合狠狠综合| 欧洲另类一二三四区| 精品亚洲porn| 亚洲尤物在线视频观看| 国产色产综合色产在线视频| 91免费视频大全| 精品在线免费观看| 一区二区三区中文字幕在线观看| 欧美一卡二卡在线| 99re视频精品| 国产精品一区二区你懂的| 亚洲国产美国国产综合一区二区 | 久久久精品免费观看| 在线观看免费视频综合| 国产 日韩 欧美大片| 琪琪久久久久日韩精品| 亚洲一区二区精品视频| 日韩毛片视频在线看| 国产欧美综合在线| 久久婷婷色综合| 精品日韩99亚洲| 欧美大片一区二区三区| 欧美精品精品一区| 777奇米成人网| 欧美精品在线观看一区二区| 色噜噜久久综合| 色狠狠一区二区| 欧美亚州韩日在线看免费版国语版| 99精品视频一区| 日本丰满少妇一区二区三区| 色视频一区二区| 91精品国产一区二区| 精品日产卡一卡二卡麻豆| 久久中文娱乐网| 中文字幕日韩av资源站| 亚洲精品国产第一综合99久久| 一区二区三区免费网站| 午夜av区久久| 国产风韵犹存在线视精品| av电影天堂一区二区在线| 欧美性色综合网| 久久伊99综合婷婷久久伊| 国产亲近乱来精品视频| 亚洲欧美偷拍三级| 日韩影院在线观看| 成人激情动漫在线观看| 欧美视频一区二区三区| 久久亚洲综合av| 性做久久久久久免费观看欧美| 国产成人在线观看| 欧美一卡2卡三卡4卡5免费|