⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 semantics.h

📁 编译原理的三个子模块,包括词法分析,语法分析和语义分析,是绘图语言解释器
💻 H
字号:
// ----------------------------- semantics.h ---------------------------------

//#include <windows.h>
#include <windows.h>
#include <wingdi.h>
#include "..\\parsertest\\parser.h"

extern HDC hDC;

//---------------- 函数绘图类的声明, 它是parser_class的派生类
class semantics_class : public parser_class {	
protected:
	double Origin_x, Origin_y,			// 横、纵平移距离
		   Scale_x,  Scale_y, 			// 横、纵比例因子
		   rot_angle;					// 旋转角度
public:
	semantics_class()					// 声明对象时置下述初值
	{	Origin_x  = 0;	Origin_y = 0;	// 原点是(0, 0)
		Scale_x   = 1;	Scale_y  = 1;	// 横、纵坐标比例是1:1
		rot_angle = 0;					// 旋转角度是0
	};
	~semantics_class() {};

private:
	// 线条色彩设定
	const red()   { return RGB(255, 0, 0);};	// 红色
	const black() { return RGB(0, 0, 0);};		// 黑色

	// 重置基类parser_class中的方法,以在语法分析的基础上实现语法制导翻译
	void Errmsg (char *string);								// 出错处理
	void error_msg (int line, char *descrip, char *string);	// 出错处理
	void for_statement ();
	void origin_statement();
	void rot_statement();
	void scale_statement();
	void colors();
	// 下述函数在semantics_class中被重置为不起作用,以屏蔽语法分析时的跟踪测试
	void enter();
    void back();
    void call_match(); 
    void tree_trace();

	// semantics_class中的方法,它们是语法制导翻译中所需的语义函数
    double get_tree_value(tree_node_ptr root);			// 获得表达式的值
	void cal_coord(	tree_node_ptr hor_ptr,				// 计算点的坐标
					tree_node_ptr ver_ptr,
					double &hor_val,
					double &ver_val);
	void draw_pixel(unsigned long x, unsigned long y);	// 绘制一个点
	void draw_loop(	double start_val,					// 图形绘制
					double end_val,
					double step_val,
					tree_node_ptr x_ptr,
					tree_node_ptr y_ptr);
	void delete_tree(tree_node_ptr root);				// 删除一棵树
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -