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

📄 analysewords.cpp

📁 our homework big project
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		{
			throw ErrorPos(ID_ERROR_CHARS,line);									//表名中含有非法字符
		}
		if(m_word[position].size() > namesize)
		{
			throw ErrorPos(ID_ERROR_OVERNAMESIZE,line);							//表名太长
		}

		if(GetToken(position+1) == ON &&
			GetToken(position+2) == _STRING &&
			GetToken(position+3) == LP    &&
			GetToken(position+4) == _STRING &&
			GetToken(position+5) == RP    &&
			GetToken(position+6) == END)
		{
			if(!AnIllegalChars(m_word[position])||
				!AnIllegalChars(m_word[position+2])||
				!AnIllegalChars(m_word[position+4]))
			{
				throw ErrorPos(ID_ERROR_CHARS,line);									//bpname名中含有非法字符
			}
		
			if(m_word[position].size() > namesize||
				m_word[position+2].size() > namesize||
				m_word[position+4].size() > namesize)
			{
				throw ErrorPos(ID_ERROR_OVERNAMESIZE,line);							//bpname名长度过长
			}

			m_indexName=m_word[position];
			m_tableName=m_word[position+2];
			m_attrName=m_word[position+4];
		}			

		else
		{
			throw ErrorPos(ID_ERROR_CREATEINDEX,line);
		}
	}
	else
	{
		throw ErrorPos(ID_ERROR_CREATEINDEX,line);
	}

}


/////////////////////////////////////////////////////////////////////
//              AnDropTable类的成员函数定义                         //
//////////////////////////////////////////////////////////////////////

void AnDropTable::AnalyseSQL(int position,int line)
{
	if(GetToken(position) == _STRING && 
		GetToken(position+1) == END)
	{
		if(!AnIllegalChars(m_word[position]))
		{
			throw ErrorPos(ID_ERROR_CHARS,line);									//表名中含有非法字符
		}
		if(m_word[position].size() > namesize)
		{
			throw ErrorPos(ID_ERROR_OVERNAMESIZE,line);							//表名太长
		}
		m_tableName=m_word[position];
	}
	else
	{
		throw ErrorPos(ID_ERROR_DROPTABLE,line);
	}
}

/////////////////////////////////////////////////////////////////////
//               AnDropIndex类的成员函数的定义                    //
/////////////////////////////////////////////////////////////////////

void AnDropIndex::AnalyseSQL(int position, int line)
{
	if(GetToken(position) == _STRING && 
		GetToken(position+1) == END)
	{
		if(!AnIllegalChars(m_word[position]))
		{
			throw ErrorPos(ID_ERROR_CHARS,line);									//表名中含有非法字符
		}
		if(m_word[position].size() > namesize)
		{
			throw ErrorPos(ID_ERROR_OVERNAMESIZE,line);							//表名太长
		}
		m_indexName=m_word[position];
	}
	else
	{
		throw ErrorPos(ID_ERROR_DROPINDEX,line);
	}
}

/////////////////////////////////////////////////////////////////
//              AnInsertValues类的成员函数定义				   //	
/////////////////////////////////////////////////////////////////

void AnInsertValues::AnalyseSQL(int position, int line)
{
	if(GetToken(position) == INTO &&
		GetToken(position+1) == _STRING &&
		GetToken(position+2) == VALUES &&
		GetToken(position+3) == LP)
	{
		m_tableName=m_word[position+1];
		for(int i=position+4; GetToken(i) != END; i++)
			;
		if(GetToken(i-1) != RP)
		{
			throw ErrorPos(ID_ERROR_RP,line);
		}
		else 
		{
			for(int j=position+4; j<i-2; j+=2)
			{
				if((GetToken(j) == _STRING||
					GetToken(j) == _CONSTSTRING)&&
					GetToken(j+1) == COMMA)
					
				{
					if(GetToken(j) == _STRING)
						for(int k=0; k<m_word[j].size(); k++)
							if((m_word[j][k]<'0' || m_word[j][k]>'9')&&m_word[j][k] != '.'&&m_word[j][k] != '-')
								throw ErrorPos(ID_ERROR_INSERTILLEGAL,line);
					
					/*if(GetToken(j) == _CONSTSTRING)
						for(int k=0; k<m_word[j].size(); k++)
							if(m_word[j][k] == '\n'||m_word[j][k] == '\r'||m_word[j][k] == '\t')
								throw ErrorPos(ID_ERROR_CONSTSTRING,line);*/
					
					m_values.push_back(m_word[j]);
				}	
				else
				{
					throw ErrorPos(ID_ERROR_INSERTVALUES,line);
				}
			}
			if(j==i-2 && GetToken(j)==_STRING||GetToken(j)== _CONSTSTRING)
			{
				if(GetToken(j) == _STRING)
						for(int k=0; k<m_word[j].size(); k++)
							if((m_word[j][k]<'0' || m_word[j][k]>'9')&&m_word[j][k] != '.'&&m_word[j][k] != '-')
								throw ErrorPos(ID_ERROR_INSERTILLEGAL,line);
				/*if(GetToken(j) == _CONSTSTRING)
					for(int k=0; k<m_word[j].size(); k++)
						if(m_word[j][k] == '\n'||m_word[j][k] == '\r'||m_word[j][k] == '\t')
							throw ErrorPos(ID_ERROR_CONSTSTRING,line);	*/
				m_values.push_back(m_word[j]);
			}
			else
			{
				throw ErrorPos(ID_ERROR_INSERTVALUES,line);
			}
		}
	}
	else
	{
		throw ErrorPos(ID_ERROR_INSERTVALUES,line);
	}
}

///////////////////////////////////////////////////////////////////////
//             AnDeleteValues类的成员函数的定义                      //
///////////////////////////////////////////////////////////////////////

void AnDeleteValues::AnalyseSQL(int position, int line)
{
	if(	GetToken(position) == FROM &&
		GetToken(position+1) == _STRING )
	{
		if(GetToken(position+2) == END)
		{
			m_tableName=m_word[position+1];
		}
		else if(GetToken(position+2) == WHERE)
		{
			m_tableName=m_word[position+1];
			AnDeleteCondition(position+3,line);	
		}	
		else
		{
			throw ErrorPos(ID_ERROR_DELETEVALUES,line);
		}
	}
	
	else
	{
		throw ErrorPos(ID_ERROR_DELETEVALUES,line);
	}
		
}

void AnDeleteValues::AnDeleteCondition(int position, int line)
{
	if(GetToken(position) == END)
	{
		throw ErrorPos(ID_ERROR_DELETECONDITION,line);
	}
	for(int i=position; ; i+=4)
	{
		if(GetToken(i) == _STRING &&
			(((GetToken(i+1) == EQ ||
			GetToken(i+1) == NE ||
			GetToken(i+1) == LE ||
			GetToken(i+1) == ME ||
			GetToken(i+1) == LS ||
			GetToken(i+1) == MR) &&
			GetToken(i+2) == _STRING) ||
			(GetToken(i+1) == EQ&&
			GetToken(i+2) == _CONSTSTRING))&&
			(GetToken(i+3) == AND ||
			GetToken(i+3) == END))
		{
			if(GetToken(i+2) == _STRING)
						for(int k=0; k<m_word[i+2].size(); k++)
							if((m_word[i+2][k]<'0' || m_word[i+2][k]>'9')&&m_word[i+2][k] != '.'&&m_word[i+2][k] != '-')
								throw ErrorPos(ID_ERROR_INSERTILLEGAL,line);
		/*	if(GetToken(i+2) == _CONSTSTRING)
				for(int k=0; k<m_word[i+2].size(); k++)
					if(m_word[i+2][k] == '\n'||m_word[i+2][k] == '\r'||m_word[i+2][k] == '\t')
						throw ErrorPos(ID_ERROR_CONSTSTRING,line);*/
			m_attr.push_back(m_word[i]);
			m_opcode.push_back(m_word[i+1]);
			m_attrvalue.push_back(m_word[i+2]);
			if(GetToken(i+3) == END)
			{
				break;
			}
		}
		else
		{
			throw ErrorPos(ID_ERROR_DELETECONDITION,line);
		}
	}

}

/////////////////////////////////////////////////////////////////////
//              AnSelectTable类的成员函数的定义                    //
/////////////////////////////////////////////////////////////////////

void AnSelectTable::AnalyseSQL(int position, int line)
{
	if(GetToken(position) == ASTERISK &&
		GetToken(position+1) == FROM  &&
		GetToken(position+2) == _STRING )
	{
		if(GetToken(position+3) == END)
		{
			m_tableName=m_word[position+2];
		}
		else if(GetToken(position+3) == WHERE)
		{
			m_tableName=m_word[position+2];
			AnSelectCondition(position+4,line);
		}
		else
		{
			throw ErrorPos(ID_ERROR_SELECTTABLE,line);
		}
	}
	
	else
	{
		throw ErrorPos(ID_ERROR_SELECTTABLE,line);
	}
}


void AnSelectTable::AnSelectCondition(int position, int line)
{	
	if(GetToken(position) == END)
	{
		throw ErrorPos(ID_ERROR_SELECTCONDITION,line);
	}
	for(int i=position; ; i+=4)
	{
		if(GetToken(i) == _STRING &&
			(((GetToken(i+1) == EQ ||
			GetToken(i+1) == NE ||
			GetToken(i+1) == LE ||
			GetToken(i+1) == ME ||
			GetToken(i+1) == LS ||
			GetToken(i+1) == MR) &&
			GetToken(i+2) == _STRING) ||
			(GetToken(i+1) == EQ&&
			GetToken(i+2) == _CONSTSTRING))&&
			(GetToken(i+3) == AND ||
			GetToken(i+3) == END))
		{
			if(GetToken(i+2) == _STRING)
						for(int k=0; k<m_word[i+2].size(); k++)
							if((m_word[i+2][k]<'0' || m_word[i+2][k]>'9')&&m_word[i+2][k] != '.'&&m_word[i+2][k] != '-')
								throw ErrorPos(ID_ERROR_INSERTILLEGAL,line);
			/*if(GetToken(i+2) == _CONSTSTRING)
				for(int k=0; k<m_word[i+2].size(); k++)
					if(m_word[i+2][k] == '\n'||m_word[i+2][k] == '\r'||m_word[i+2][k] == '\t')
						throw ErrorPos(ID_ERROR_CONSTSTRING,line);*/
			m_attr.push_back(m_word[i]);
			m_opcode.push_back(m_word[i+1]);
			m_attrvalue.push_back(m_word[i+2]);
			if(GetToken(i+3) == END)
			{
				break;
			}
		}
		else
		{
			throw ErrorPos(ID_ERROR_SELECTCONDITION,line);
		}
	}
}


			
			
	
	




		





⌨️ 快捷键说明

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