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

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

?? parse.cpp

?? c的簡化編譯器
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************/
/* File: parse.c                                    */
/* Main program for c- compiler                     */
/* Compiler Construction: Principles and Practice   */
/* Maker:Liukai                                     */
/****************************************************/
#include"globals.h"
#include"util.h"
#include"scan.h"
#include"parse.h"
static  TokenType token ;
static  TreeNode *  mulop(void);
static  TreeNode *  addop(void);
static  TreeNode *  empty(void);
static  TreeNode *  program(void);
static  TreeNode *  declaration_list(void);
static  TreeNode *  declaration(void);
static  TreeNode *  var_declaration(void);
static  TreeNode *  type_specifier(void);
static  TreeNode *  fun_declaration(void);
static  TreeNode *  params(void);
static  TreeNode *  para_list(void);
static  TreeNode *  param(void);
static  TreeNode *  compound_stmt(void);
static  TreeNode *  local_declaration(void);
static  TreeNode *  statement_list(void);
static  TreeNode *  statement(void);
static  TreeNode *  expression_stmt(void);
static  TreeNode *  iteration_stmt(void);
static  TreeNode *  return_stmt(void);
static  TreeNode *  expression(void);
static  TreeNode *  selection_stmt(void);
static  TreeNode *  var(void);
static  TreeNode *  simple_expression(void);
static  TreeNode *  relop(void);
static  TreeNode *  additive_expression(void);

static  TreeNode *  term(void);

static  TreeNode *  factor(void);
static  TreeNode *  call(void);
static  TreeNode *  args(void);
static  TreeNode *  arg_list(void);
static void syntaxError(char * );
static void match(TokenType);
/*1*/
TreeNode *program(void)
{
	TreeNode *t;
	t=declaration_list();
	return t;
}
/*2*/
TreeNode *declaration_list(void)
{
	TreeNode *t=declaration();
    TreeNode *p=t;
	while(token==INT||token==VOID)
	{
		TreeNode *q;
		q=declaration();
		if (q!=NULL)
		{
			if (t==NULL)
			{
				t=p=q;
			}
			else
			{
				p->sibling=q;
				p=q;
			}
		}
		
	}
	return t;
}
/*3*/
TreeNode *declaration(void)
{
	TreeNode *t=newExpNode(IdK);
	
	//加入IDK屬性;
	
	if (token==INT)
	{
		match(INT);
		//加入INT類型屬性;
		t->type=Int;//
	}
	else 
	{
		match(VOID);
		//加入VOID類型屬性;
		t->type=Void;
	}
	if (token==ID)
	{
		//加入TOKENSTRING屬性;
		t->attr.name=copyString(tokenString);
	}
	match(ID);
	if (token==LPAREN)
	{
		//加入FUN屬性;
		t->idtype1=FunK;
		match(LPAREN);
		t->child[0]=params();
		match(RPAREN);
		t->child[1]=compound_stmt();
	}
	else 
	{
		//添加VAR屬性;
		t->idtype1=VarK;
		if (token==SEMI)
		{
			//說明沒有數組屬性;
			t->is=no;
		}
		else 
		{
			match(ZLPAREN);
			if (token==NUM)
			{
				//說明有數組屬性;
				t->is=yes;
				//添加NUM屬性;數組中元素個數;
				t->arryno=atoi(tokenString);
			}
			match(NUM);
			match(ZRPAREN);
		}
		match(SEMI);
	}

	/*if()
		t=var_declaration();
	else
		t=fun_declaration();*/
	return t;
}
/*4*/
TreeNode *var_declaration(void)
{
	TreeNode *t=newExpNode(IdK);
	//添加ID屬性;

	//添加VAR屬性;
	t->idtype1=VarK;
	if (token==INT)
	{
		match(INT);
		//添加INT屬性;
		t->type=Int;
	}
	else
	{
		match(VOID);
		//添加VOID屬性;
		t->type=Void;
	}
	if (token==ID)
	{
		//添加TOKENSTRING屬性;
		t->attr.name=copyString(tokenString);
	}
	match(ID);
	if (token==SEMI)
	{
		//說明沒有數組屬性;
		t->is=no;
	}
	else
	{
		match(ZLPAREN);
		if (token==NUM)
		{	
			//說明有數組屬性;
			t->is=yes;
			//添加NUM屬性;
			t->arryno=atoi(tokenString);
		}
		match(NUM);
		match(ZRPAREN);
	}
	match(SEMI);
	return t;
}

/*5*/
TreeNode *fun_declaration(void)
{
	TreeNode *t=newExpNode(IdK);
	//添加ID屬性;


	//添加FUM屬性;
	t->idtype1=FunK;
	if(token==INT)
	{
		match(INT);
		t->type=Int;
	}
	else
	{
		match(VOID);
		t->type=Void;
	}
	if (token==ID)
	{
		// 添加TOKENSTRING屬性;
		t->attr.name=copyString(tokenString);//
	}
	match(ID);
	match(LPAREN);
	t->child[0]=params();
	match(RPAREN);
	t->child[1]=compound_stmt();
	return t;
}
/*6*/
TreeNode *params(void)
{
	TreeNode *t;
	if(token==VOID)
	{
		t=NULL;
		match(token);

	}
	else
		t=para_list();
	return t;
}
/*7*/
TreeNode *para_list(void)
{
	TreeNode *t=param();
	TreeNode *p=t;
	while(token==DOUHAO)
	{
		TreeNode *q;
		match(DOUHAO);
		q=param();
		if (q!=NULL)
		{
			if (t==NULL)
			{
				t=p=q;
			}
			else
			{
				p->sibling=q;
				p=q;
			}
		}
		
	}
	return t;
}
/*8*/
TreeNode *param(void)
{
	TreeNode *t=newExpNode(IdK);
	//添加ID屬性;


	match(INT);
	t->type=Int;//
	t->attr.name=copyString(tokenString);//
	match(ID);
	if(token==ZLPAREN)
	{
		match(ZLPAREN);
		match(ZRPAREN);
		//說明是數組類型;
		t->is=yes;

	}
	return t;
}
/*9*/
TreeNode *compound_stmt(void)
{
	TreeNode *t=newStmtNode(CompoundK);
	//添加COMPOUND類型;COMPOUND類型為一個STMT;

	match(DLPAREN);
	t->child[0]=local_declaration();
	t->child[1]=statement_list();
	match(DRPAREN);
	return t;
}
/*10*/
TreeNode *local_declaration(void)
{
	TreeNode *t=empty();
	TreeNode *p=t;
	while(token==INT||token==VOID)
	{
		TreeNode *q;
		q=var_declaration();
		if (q!=NULL)
		{
			if (t==NULL)
			{
				t=p=q;
			}
			else 
			{
				p->sibling=q;
				p=q;
			}
		}
		

	}
	return t;
}
/*11*/
TreeNode *statement_list(void)
{
	TreeNode *t=empty();
	TreeNode *p=t;
	while(token==ID||token==DLPAREN||token==IF||token==WHILE||token==RETURN||token==LPAREN||token==NUM)
	{
		TreeNode *q;
		q=statement();
		if (q!=NULL)
		{
			if (t==NULL)
			{
				t=p=q;
			}
			else 
			{
				p->sibling=q;
				p=q;
			}
		}
		

	}
	return t;
}
/*TreeNode *statement_list(void)
{
	TreeNode *t;
	t=empty();
	TreeNode *p;
	p=t;
	while()//
	{
		TreeNode *q;
		q=statement();
		p->sibling=q;
		p=q;
	}
	return t;
}*/
/*12*/
TreeNode *statement(void)
{
	TreeNode *t;
	switch (token)
	{
	case ID:t=expression_stmt();break;
	case SEMI:t=expression_stmt();break;
	case LPAREN:t=expression_stmt();break;
	case NUM:t=expression_stmt();break;
	case DLPAREN:t=compound_stmt();break;
	case IF:t=selection_stmt();break;
	case WHILE:t=iteration_stmt();break;
	case RETURN:t=return_stmt();break;
	default:
		syntaxError("unexpected error at ->>");break;
	}
	return t;
	
	
}
/*14*/
TreeNode *expression_stmt(void)
{
	TreeNode *t;
	
	if(token!=SEMI)
	{
		t=expression();
	}
	else 
	{
		t=NULL;
	}
	match(SEMI);
	return t;

}
/*17*/
TreeNode *return_stmt(void)
{
	TreeNode *t=newStmtNode(ReturnK);
	//添加RETURN屬性;

	match(RETURN);
	if(token==SEMI)
	{
		match(token);

	}
	else
	{
		t->child[0]=expression();
		match(SEMI);
	}
	return t;
}
/*15*/
TreeNode *selection_stmt(void)
{
	TreeNode *t=newStmtNode(IfK);
	//添加IF屬性;

	match(IF);
	match(LPAREN);
	t->child[0]=expression();
	match(RPAREN);
	t->child[1]=statement();
	if(token==ELSE)
	{
		match(ELSE);
		t->child[2]=statement();
	}
	return t;
}
/*16*/
TreeNode *iteration_stmt(void)
{
	TreeNode *t=newStmtNode(WhileK);
	//添加WHILE屬性;

	match(WHILE);
	match(LPAREN);
	t->child[0]=expression();
	match(RPAREN);
	t->child[1]=statement();
	return t;
}
/*18*/
TreeNode *expression(void)
{
	TreeNode *t;
	TreeNode *a=NULL;
	TreeNode *q=NULL;
loop:	switch (token)
	{
	case ID:
		t=newExpNode(IdK);
		//添加ID屬性;并添加TOKENSTRING;

		t->attr.name=copyString(tokenString);//
		match(ID);
		if (token==LPAREN)
		{
			t->idtype1=FunK;
			match(LPAREN);
			t->child[0]=args();
			match(RPAREN);
		}
		else
		{
			t->idtype1=VarK;
			if (token==ZLPAREN)
			{
				match(ZLPAREN);
				t->is=yes;
				t->child[0]=expression();
				match(ZRPAREN);	
			}

			if (token==ASSIGN)
			{
				TreeNode *p=newStmtNode(AssignK);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久午夜电影| 欧美日韩一区二区三区在线看 | 国产精品视频免费看| 欧美一区二区播放| 欧美成人一级视频| 久久久久久久久蜜桃| 中国色在线观看另类| 亚洲色图20p| 亚洲第一福利视频在线| 欧美aaa在线| 国产成人午夜精品影院观看视频 | 久久99精品久久久久久国产越南| 青娱乐精品视频| 狠狠久久亚洲欧美| 国产成人在线视频免费播放| bt欧美亚洲午夜电影天堂| fc2成人免费人成在线观看播放| 99精品久久99久久久久| 色婷婷综合久久| 欧美一区二区三区视频在线观看| 欧美xxxxx牲另类人与| 国产精品美女一区二区三区| 亚洲一区二区av电影| 一区二区三区中文字幕电影| 天天综合网天天综合色| 国产一区美女在线| 日本韩国精品在线| 精品精品欲导航| 亚洲欧美激情小说另类| 免费久久99精品国产| 国产福利一区二区三区| 在线亚洲高清视频| 久久你懂得1024| 一区二区三区在线视频观看58 | 一级做a爱片久久| 捆绑调教美女网站视频一区| 成人网男人的天堂| 日韩无一区二区| 亚洲免费在线视频| 国产一区二区三区免费在线观看| 在线精品视频免费播放| 久久久不卡网国产精品一区| 一区二区三区国产精华| 国产真实乱子伦精品视频| 在线观看成人小视频| 国产无一区二区| 麻豆精品国产91久久久久久| 色老综合老女人久久久| 国产亚洲综合性久久久影院| 日日噜噜夜夜狠狠视频欧美人| 成人动漫一区二区在线| 欧美成人a在线| 日精品一区二区三区| 91网站在线播放| 久久精品在线免费观看| 视频一区国产视频| 91久久精品国产91性色tv| 国产精品每日更新| 国产剧情av麻豆香蕉精品| 欧美久久久影院| 亚洲成人自拍网| 欧美色国产精品| 一区二区三区中文在线| 成人深夜视频在线观看| 久久麻豆一区二区| 国产麻豆精品视频| 国产亚洲欧洲一区高清在线观看| 日韩av电影免费观看高清完整版| 欧美日韩三级在线| 亚洲超碰精品一区二区| 欧美揉bbbbb揉bbbbb| 偷拍亚洲欧洲综合| 欧美在线999| 国产一区二区三区在线观看免费 | 日本sm残虐另类| 91精品国产色综合久久不卡电影 | 欧美久久久久免费| 视频在线在亚洲| 欧美一级理论片| 久久精品国产亚洲a| 精品久久久久久久人人人人传媒| 久久精品72免费观看| 精品美女被调教视频大全网站| 免费成人美女在线观看.| 欧美成人精品福利| 国产盗摄精品一区二区三区在线| 国产亚洲精品福利| 成人黄色综合网站| 亚洲一区二区三区小说| 欧美一区二区三区在线观看| 精油按摩中文字幕久久| 国产精品拍天天在线| 在线亚洲一区二区| 五月天久久比比资源色| 日韩欧美国产一区二区在线播放 | 成人国产精品免费网站| 亚洲欧美日韩一区| 欧美日韩一区二区在线观看| 久久精品99久久久| 中文字幕一区在线| 欧美剧在线免费观看网站 | 国产精品久线在线观看| 在线观看日韩高清av| 秋霞影院一区二区| 中文字幕av一区二区三区高| 欧美日韩一区三区| 高清不卡在线观看| 视频一区二区中文字幕| 国产日韩欧美在线一区| 在线欧美小视频| 国产精品1区二区.| 亚洲福利一区二区三区| 国产三级精品三级在线专区| 在线看日本不卡| 国产成人av一区二区| 亚洲二区在线观看| 欧美激情一区三区| 日韩亚洲电影在线| 在线免费av一区| 成人高清视频在线观看| 精油按摩中文字幕久久| 亚洲一线二线三线视频| 国产女主播视频一区二区| 欧美日韩久久久| 色综合一区二区| 国产麻豆成人传媒免费观看| 亚洲高清在线精品| 18涩涩午夜精品.www| www国产精品av| 欧美一区二区三区不卡| 99在线热播精品免费| 国产成人av一区二区三区在线 | 91视频www| 国产成人福利片| 久久av中文字幕片| 美洲天堂一区二卡三卡四卡视频 | 日韩一区精品字幕| 自拍偷拍亚洲欧美日韩| 欧美激情一区二区三区在线| 精品国产凹凸成av人网站| 欧美一激情一区二区三区| 欧美色图免费看| 91国产精品成人| 欧美羞羞免费网站| 色哦色哦哦色天天综合| 91在线小视频| 91麻豆国产精品久久| 91在线精品秘密一区二区| www.亚洲激情.com| 99久久99久久精品免费看蜜桃| 成人av资源在线| 色av一区二区| 欧美日韩亚洲丝袜制服| 91理论电影在线观看| 97se亚洲国产综合在线| 91无套直看片红桃| 日本电影欧美片| 欧美嫩在线观看| 日韩一区二区视频| 欧美成人一区二区三区片免费| 日韩视频一区二区在线观看| 精品福利一二区| 中文一区一区三区高中清不卡| 国产精品白丝在线| 亚洲综合丝袜美腿| 免费一区二区视频| 国产在线一区二区综合免费视频| 高清国产一区二区| 色噜噜狠狠色综合欧洲selulu| 欧美午夜不卡视频| 亚洲精品一区二区三区福利| 欧美激情中文字幕| 亚洲综合在线视频| 久久激情综合网| 成人免费视频app| 欧美日韩国产成人在线91| 精品国产91亚洲一区二区三区婷婷 | 国产一区91精品张津瑜| 成人av网站在线观看免费| 91极品美女在线| 精品国产一区二区三区av性色| 国产精品污www在线观看| 亚洲综合色区另类av| 久久精品国产999大香线蕉| 成人18视频日本| 日韩欧美一级精品久久| 国产精品水嫩水嫩| 麻豆国产欧美一区二区三区| 99国产精品一区| 日韩欧美国产电影| 一区二区三区在线观看国产| 毛片基地黄久久久久久天堂| 成人美女在线观看| 日韩一级完整毛片| 悠悠色在线精品| 成人在线综合网站| 日韩欧美高清在线| 亚洲自拍偷拍综合| 99精品热视频| 国产欧美日韩亚州综合|