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

📄 parser.h

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

#include "..\\lextest\\scanner.h"

//--------------------------------- 语法分析器类中的类型定义
typedef double (* func_ptr)(double);
typedef struct tree_node				// 语法树节点类型
{	enum token_type op_code;			// PLUS, FUNC, CONST_ID, ...
	union
	{	struct { tree_node *left, *right; } tag_op;
		struct { tree_node *child; func_ptr math_func_ptr; } tag_func;
		double tag_const;
		double * tag_parameter;
	} content;
} * tree_node_ptr;

//--------------------------------- 语法分析器类声明
class parser_class {

protected:
	double    parameter;		// 参数T的存储空间
	int       line_color;		// 线条颜色
	token_rec token;			// 记号
	tree_node_ptr start_ptr,	// 绘图起点表达式的语法树
				  end_ptr, 		// 绘图终点表达式的语法树
				  step_ptr,		// 步长表达式的语法树
				  x_ptr,		// 点的横坐标表达式的语法树
				  y_ptr,		// 点的横坐标表达式的语法树
				  angle_ptr;	// 旋转角度表达式的语法树
	scanner_class Scanner;		// 词法分析器对象

	// --------------- 辅助函数
	void fetch_token ();											// 获取记号
	void match_token (enum token_type the_token);					// 匹配记号
	void syntax_error (int case_of);								// 指出语法错误(调用error_msg)
	void print_syntax_tree(tree_node *root, int indent);			// 打印语法树
	tree_node_ptr make_tree_node(enum token_type opcode,...);		// 构造语法树
	virtual void error_msg(int line, char *descrip, char *string);	// 在Semantics中重置为窗口打印形式


	// ---------------非终结符的递归子程序
	void program();
	void statement();
	void color_statement();
	void colors();
	// 下述四个函数在Semantics_class中需重置,以实现语法制导翻译
	virtual void for_statement();	
	virtual void origin_statement();
	virtual void rot_statement();
	virtual void scale_statement();
	tree_node_ptr expression();
	tree_node_ptr term();
	tree_node_ptr factor();
	tree_node_ptr component();
	tree_node_ptr atom();

public:
	parser_class() 		// 对象声明时需置初值
	{
		parameter = 0;
		line_color= red_color;
		start_ptr = NULL;
		end_ptr   = NULL;
		step_ptr  = NULL;
		x_ptr	  = NULL;
		y_ptr	  = NULL;
	}
	~parser_class() {}
	void parser(char * file_name);		// 语法分析器接口

private:
	// 下述函数用于语法分析器的跟踪调试, 在Semantics_class中需重置为不起作用
	virtual void enter(char * x);
    virtual void back(char * x);
    virtual void call_match(char * x); 
    virtual void tree_trace(tree_node_ptr x);
};

⌨️ 快捷键说明

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