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

📄 status.h

📁 (1) 给定一段符合Pascal子集语法的语言
💻 H
字号:
#pragma once

#define STATUS_MAX_NUM 500	//最大状态数
/*-----------------------------*/
/*用于求一个状态中的活前缀的栈
/*-----------------------------*/
class mystack
{
public:
	mystack(void);
public:	
	void PopIn(LRPrefix *src);											//进栈
	void PushOut(LRPrefix *dst);										//出栈
	int IsEmpty();														//栈空检测
	LRPrefix* GetStackTop();											//得到栈顶元素
private:
	class LRPrefix *content;											//栈顶指针
};
/*-----------------------------*/
/*LR1分析表的状态
/*-----------------------------*/
class status
{
public:
	status(void);
public:
	int PrefixExist(LRPrefix *src);										//检测这个LR1活前缀是否已存在
	LRPrefix * addPrefix(LRPrefix *src);								//将输入的活前缀加入状态并返回
	
	void FindClosure();													//求该状态的LR1活前缀闭包
	void AddPossiblePrefix(status *father, int symbol);					//表示从father状态中移进symbol符号之后得到的LR1活前缀
	void output();														//输出
public:
	int number;															//代表状态编号
	vector<LRPrefix> _prefix;											//LR1活前缀容器针
	int prefix_num;														//LR1活前缀个数
};
/*-----------------------------*/
/*求状态迁移的任务队列
/*-----------------------------*/
class convert_queue
{
public:
	convert_queue(void);
public:
	void PopIn(LRPrefix *);												//进队列
	void PushOut(LRPrefix *);											//出队列
	void AddStatus(status *);											//将状态中的LR1活前缀全部进栈
	int IsEmpty();														//队列空检测
	void update(LRPrefix *);
private:
	LRPrefix *first;													//队列头指针
	LRPrefix *last;														//队列尾指针
};

⌨️ 快捷键说明

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