📄 analysewords.cpp
字号:
{
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 + -