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

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

?? semantics.cpp

?? 編譯原理的三個子模塊,包括詞法分析,語法分析和語義分析,是繪圖語言解釋器
?? CPP
字號:
// ----------------------------- semantics.cpp ---------------------------------
// 函數(shù)繪圖類的定義

#include "semantics.h"

// ------------------------ 出錯處理
void semantics_class::Errmsg (char *string) { exit (1); }
void semantics_class::error_msg(int line, char * descrip, char * string)
{
	const int buf_len=256;
	char msg[buf_len];

	memset(msg, 0, buf_len);
	sprintf(msg, "Line No %3d:  %s %s !", Scanner.line_no, descrip, string);
	MessageBox(NULL, msg, "error!", MB_OK);
	Scanner.close_scanner();
	exit(1);
}

// ------------------------ 計算被繪制點的坐標(biāo)
void semantics_class::cal_coord(tree_node_ptr x_ptr,
								tree_node_ptr y_ptr,
								double &x_ret,
								double &y_ret)
{	
	double x_val, x_temp, y_val;

	// 計算表達(dá)式的值,得到點的原始坐標(biāo)
	x_val = get_tree_value(x_ptr);
	y_val = get_tree_value(y_ptr);

	// 比例變換
	x_val *= Scale_x ;
	y_val *= Scale_y ;

	// 旋轉(zhuǎn)變換
	x_temp = x_val*cos(rot_angle) + y_val*sin(rot_angle);
	y_val  = y_val*cos(rot_angle) - x_val*sin(rot_angle);
	x_val  = x_temp;
	
	// 平移變換
	x_val += Origin_x;
	y_val += Origin_y;

	// 返回變換后點的坐標(biāo)
	x_ret = x_val;
	y_ret = y_val;
}

// ------------------------ 循環(huán)繪制點坐標(biāo)
void semantics_class::draw_loop
			(	double start_val,
				double end_val,
				double step_val,
				tree_node_ptr x_ptr,
				tree_node_ptr y_ptr)
{
	double x_val, y_val;
	for(parameter = start_val; parameter <= end_val; parameter += step_val)
	{	cal_coord(x_ptr, y_ptr, x_val, y_val);
//		y_val = 460-y_val;			// 修改顯示屏的直角坐標(biāo)系
		draw_pixel((unsigned long)x_val, (unsigned long)y_val);
	}
}

// ------------------------ 計算表達(dá)式的值
double semantics_class::get_tree_value(tree_node_ptr root)
{	
	if (root == NULL) return 0.0;
	switch (root -> op_code)
	{	case PLUS  :
			return get_tree_value(root->content.tag_op.left ) +
						get_tree_value(root->content.tag_op.right) ;
		case MINUS :
			return get_tree_value(root->content.tag_op.left ) -
						get_tree_value(root->content.tag_op.right) ;
		case MUL   :
			return get_tree_value(root->content.tag_op.left ) *
						get_tree_value(root->content.tag_op.right) ;
		case DIV   :
			return get_tree_value(root->content.tag_op.left ) /
						get_tree_value(root->content.tag_op.right) ;
		case POWER :
			return pow(get_tree_value(root->content.tag_op.left ),
						get_tree_value(root->content.tag_op.right) );
		case FUNC  :
			return (* root->content.tag_func.math_func_ptr)
						(get_tree_value(root->content.tag_func.child) );
		case CONST_ID :
			return root->content.tag_const ;
		case T  :
			return *(root->content.tag_parameter);
		default    :
			return 0.0 ;
	}
}

// ------------------------ 刪除一棵語法樹
void semantics_class::delete_tree(tree_node_ptr root)
{	
	if (root == NULL) return;
	switch (root -> op_code)
	{   case PLUS  :			// 兩個孩子的內(nèi)部節(jié)點
	    case MINUS :
	    case MUL   :
	    case DIV   :
	    case POWER :
			delete_tree (root->content.tag_op.left ) ;
			delete_tree (root->content.tag_op.right) ;
			break ;
	    case FUNC  : 			// 一個孩子的內(nèi)部節(jié)點
			delete_tree (root->content.tag_func.child) ;
			break ;
	    default    : 			// 葉子節(jié)點
			break ;
	}
	delete(root) ;				// 刪除節(jié)點
}

// ------------------------ 繪制一個點
void semantics_class::draw_pixel(unsigned long x, unsigned long y)
{
	if (line_color==red_color) {
		SetPixel(hDC, x, y, red());
		SetPixel(hDC, x+1, y, red());
		SetPixel(hDC, x, y+1, red());
		SetPixel(hDC, x+1, y+1, red());
	}
	else {
		SetPixel(hDC, x, y, black());
		SetPixel(hDC, x+1, y, black());
		SetPixel(hDC, x, y+1, black());
		SetPixel(hDC, x+1, y+1, black());
	}
}

// ------------------------ origin_statement的遞歸子程序
void semantics_class::origin_statement()
{
	parser_class::origin_statement();		// 語法分析獲取語法樹(由parser中的屬性保存)

	Origin_x = get_tree_value(x_ptr);		// 根據(jù)語法樹計算橫坐標(biāo)的平移距離
	delete_tree(x_ptr);

	Origin_y = get_tree_value(y_ptr);		// 根據(jù)語法樹計算縱坐標(biāo)的平移距離
	delete_tree(y_ptr);
}

// ------------------------ scale_statement的遞歸子程序
void semantics_class::scale_statement () 
{
	parser_class::scale_statement();		// 語法分析獲取語法樹(由parser中的屬性保存)

	Scale_x = get_tree_value(x_ptr);		// 根據(jù)語法樹計算橫坐標(biāo)的比例因子
	delete_tree(x_ptr);

	Scale_y = get_tree_value(y_ptr);		// 根據(jù)語法樹計算縱坐標(biāo)的比例因子
	delete_tree(y_ptr);
}

// ------------------------ rot_statement的遞歸子程序
void semantics_class::rot_statement () 
{	
	parser_class::rot_statement();			// 語法分析獲取語法樹(由parser中的屬性保存)
	rot_angle = get_tree_value(angle_ptr);	// 根據(jù)語法樹計算旋轉(zhuǎn)角度
	delete_tree(angle_ptr);
}

// ------------------------ for_statement 的遞歸子程序
void semantics_class::for_statement () 
{	
	double start_val, end_val, step_val;	// 繪圖起點、終點、步長

	parser_class::for_statement();			// 語法分析獲取各表達(dá)式的語法樹(由parser中的屬性保存)
	
	start_val = get_tree_value(start_ptr);	// 計算起點表達(dá)式的值
	end_val = get_tree_value(end_ptr);		// 計算終點表達(dá)式的值
	step_val = get_tree_value(step_ptr);	// 計算步長表達(dá)式的值

	draw_loop (start_val, end_val, step_val, x_ptr, y_ptr); // 繪圖

	delete_tree(start_ptr);					// 釋放空間
	delete_tree(end_ptr);
	delete_tree(step_ptr);
	delete_tree(x_ptr);	
	delete_tree(y_ptr);	
}

// ---------------------- 用于語法分析器中的跟蹤調(diào)試, 此處不再起作用
void semantics_class::enter() {}
void semantics_class::back() {}
void semantics_class::call_match() {} 
void semantics_class::tree_trace() {}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产偷v国产偷v亚洲高清| 欧美日韩国产一区二区三区地区| 91精品国产色综合久久不卡电影 | 成人性生交大片免费| 国产午夜精品一区二区三区视频 | 欧洲av一区二区嗯嗯嗯啊| 亚洲欧美激情在线| 欧洲亚洲精品在线| 视频一区国产视频| 2020日本不卡一区二区视频| 国产99久久精品| 一级中文字幕一区二区| 欧美一区二区在线观看| 国产成人精品综合在线观看| 亚洲欧美国产毛片在线| 91麻豆精品国产自产在线| 国内精品伊人久久久久影院对白| 久久网站最新地址| 91丨九色丨蝌蚪丨老版| 水蜜桃久久夜色精品一区的特点| 精品久久久久久久久久久久包黑料| 国产成人精品一区二| 一区二区三区91| 久久理论电影网| 色狠狠av一区二区三区| 麻豆精品久久精品色综合| 亚洲欧美自拍偷拍色图| 欧美一二三四区在线| 99久久精品一区二区| 日本午夜精品一区二区三区电影| 中文字幕+乱码+中文字幕一区| 欧美视频一区二区三区在线观看| 精品一区二区三区视频在线观看| 亚洲欧美日韩国产手机在线 | 国产成人精品综合在线观看| 亚洲一区视频在线观看视频| 久久久一区二区三区| 欧美日韩一区二区三区四区五区| 国产一区二区在线免费观看| 亚洲成人在线网站| 国产精品久久久久久久久免费樱桃| 欧美日韩精品一区二区三区 | 欧美一区二区三区四区五区| 不卡一区二区三区四区| 久久成人羞羞网站| 亚洲18色成人| 亚洲精品乱码久久久久久| 国产午夜精品一区二区三区嫩草| 制服丝袜国产精品| 欧美午夜电影一区| 91亚洲精品乱码久久久久久蜜桃| 国产曰批免费观看久久久| 亚洲成av人片一区二区| 亚洲人成精品久久久久| 国产嫩草影院久久久久| 日韩精品一区二区三区视频 | 精品一区二区三区日韩| 丝袜国产日韩另类美女| 亚洲一区自拍偷拍| 亚洲男人的天堂网| 1024亚洲合集| 亚洲国产高清aⅴ视频| 久久嫩草精品久久久久| 精品国产乱码久久| 日韩欧美卡一卡二| 日韩一区二区精品在线观看| 欧美妇女性影城| 欧美日韩www| 欧美高清激情brazzers| 在线不卡一区二区| 欧美日韩大陆在线| 欧美精品777| 91麻豆精品国产91久久久久久 | 日韩免费高清av| 欧美色图一区二区三区| 欧美日韩午夜在线视频| 欧美日本乱大交xxxxx| 欧美日韩在线播放三区| 欧美日本韩国一区二区三区视频 | 色呦呦网站一区| 91浏览器在线视频| 在线精品视频免费播放| 欧美日韩色一区| 91精品欧美福利在线观看| 欧美一区二区免费观在线| 欧美一区二区精品久久911| 日韩美女视频一区二区在线观看| 欧美大片拔萝卜| 久久久久国产成人精品亚洲午夜 | 欧美日韩在线三级| 欧美精品久久久久久久久老牛影院| 91精品综合久久久久久| 精品国偷自产国产一区| 国产精品久久久久久久午夜片| ㊣最新国产の精品bt伙计久久| 最新不卡av在线| 一级特黄大欧美久久久| 另类调教123区 | 日韩毛片一二三区| 亚洲一区二区三区四区在线| 蜜桃视频一区二区| 国产白丝精品91爽爽久久| 色综合天天在线| 欧美久久久久久久久| 久久久久亚洲综合| 亚洲欧美日韩系列| 麻豆视频观看网址久久| 成人黄色av网站在线| 欧美区视频在线观看| 久久免费视频一区| 一片黄亚洲嫩模| 国产美女精品一区二区三区| av网站一区二区三区| 欧美久久久一区| 中文字幕第一区第二区| 午夜在线电影亚洲一区| 国产成人精品免费视频网站| 欧美视频一区二| 亚洲国产精品精华液2区45| 亚洲国产精品麻豆| 国产乱子伦视频一区二区三区| 色老汉av一区二区三区| 精品电影一区二区三区| 亚洲激情男女视频| 国产在线精品一区在线观看麻豆| 色综合色综合色综合| 精品国产伦一区二区三区观看方式 | 精品一区二区三区香蕉蜜桃 | 欧美亚洲动漫另类| 高清在线成人网| 在线欧美一区二区| 国产亚洲一本大道中文在线| 亚洲国产一区二区在线播放| 成人一区二区在线观看| 日韩亚洲欧美综合| 亚洲国产精品久久久久秋霞影院| 国产毛片精品国产一区二区三区| 欧美精品亚洲二区| 亚洲裸体xxx| 国产成人免费视频一区| 日韩视频在线永久播放| 亚洲第一福利一区| 91在线视频18| 国产农村妇女精品| 久草热8精品视频在线观看| 久久色在线视频| 日韩福利电影在线| 欧美色综合天天久久综合精品| 国产精品久久久久永久免费观看| 久久精品久久久精品美女| 精品视频全国免费看| 亚洲欧美国产高清| 91丨porny丨在线| 欧美极品aⅴ影院| 精品中文字幕一区二区小辣椒| 欧美性猛交xxxx黑人交| 一区二区久久久| 色综合天天综合网国产成人综合天| 国产性天天综合网| 国产二区国产一区在线观看| 久久品道一品道久久精品| 久久99国产乱子伦精品免费| 91精品国产黑色紧身裤美女| 三级久久三级久久| 欧美人动与zoxxxx乱| 视频一区国产视频| 欧美一区在线视频| 久久99在线观看| 精品sm捆绑视频| 国产真实乱子伦精品视频| 欧美tickling网站挠脚心| 精品一区二区av| 欧美精品一区二区精品网| 精品亚洲国产成人av制服丝袜| 精品国产三级电影在线观看| 国产一区二区视频在线播放| 国产午夜亚洲精品午夜鲁丝片 | 午夜精品久久久久影视| 欧美日韩综合在线| 日韩高清不卡在线| 精品欧美久久久| 国产乱子伦视频一区二区三区| 国产欧美精品国产国产专区| 成人aa视频在线观看| 亚洲精品日韩综合观看成人91| 欧美午夜一区二区三区免费大片| 亚洲午夜电影在线| 欧美本精品男人aⅴ天堂| 国产精品一区二区三区四区| 中文字幕亚洲区| 欧美在线观看18| 久久97超碰色| 国产精品久久久久久福利一牛影视 | 久久久久久久久久久久久夜| 91在线porny国产在线看| 日产国产高清一区二区三区| 久久久99久久| 欧美色图激情小说| 国内精品久久久久影院薰衣草 | 国产欧美一区二区精品久导航|