📄 status.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 + -