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

📄 item.h

📁 lalr1编译器
💻 H
字号:
/***********************/
/*    CItem类的定义    */
/***********************/

const int END=1000;

class CItem
{
public:
	CItem(){string.MakeEmpty();}
	int operator == (CItem &right)					//重载"=="符号
	{
		int pos1=this->GetDotPos();
		int pos2=right.GetDotPos();
		if(this->vn==right.vn&&pos1==pos2)
			if(this->sentence[pos1+1]==right.sentence[pos2+1]
				&&this->sentence[pos1-1]==right.sentence[pos2-1])
				return 1;
		return 0;
	}
	CItem &operator = (CItem &right)				//重载"="符号
	{
		vn=right.vn;
		for(int i=0;right.sentence[i]!=END;i++);
		sentence=new int[i+1];
		sentence[i]=END;
		for(i=0;right.sentence[i]!=END;i++)
			sentence[i]=right.sentence[i];
		string.Add(right.string);
		return *this;
	}
	int IsForReduce()								//是否待约项目
	{
		int pos=GetDotPos();
		if(sentence[pos+1]<0)	return 1;
		return 0;
	}
	int IsAccept()									//是否接收项目
	{
		int pos=GetDotPos();
		if(vn==-5&&sentence[pos+1]==END)	return 1;
		return 0;
	}
	int IsShift()									//是否移进项目
	{
		int pos=GetDotPos();
		if(sentence[pos+1]>0)	return 1;
		return 0;
	}
	int IsReduce()									//是否归约项目
	{
		int pos=GetDotPos();
		if(pos==0) return 0;
		if(sentence[pos+1]==END)	return 1;
		return 0;
	}
	int GetDotPos()									//返回圆点位置
	{
		for(int i=0;sentence[i]!=END;i++)
			if(sentence[i]==1) break;
		return i;
	}
	int Merge(CItem &item)
	{
		int len1=string.Length();
		string.Add(item.string);
		int len2=string.Length();
		if(len2-len1>0) return 1;
		return 0;
	}
public:
	int vn;
	int *sentence;
	List<int> string;
};

⌨️ 快捷键说明

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