📄 mydialog.cpp
字号:
return 1;
}
if(ch_in==';')
{
tokenstring[num_token].knum=50;
tokenstring[num_token].entry=-1;
num_token++;
return 1;
}
if(ch_in=='=')
{
tokenstring[num_token].knum=56;
tokenstring[num_token].entry=-1;
num_token++;
return 1;
}
return 0;
}
//识别标识符
int CMyDialog::recogGID(TCHAR ch_in)
{
TCHAR ch;
int result;
c_word+=ch_in;
lcount++;
ch=Getchar(lcount);
while(ISDIG(ch)||ISLETTER(ch))
{
c_ch=ch;
c_word+=c_ch;
lcount++;
ch=Getchar(lcount);
if(ch=='~')
goto LA1;
}
if(ISILLEGLE(ch))
{
lcount--;
goto LA1;
// etable[num_error].x=hcount;
// etable[num_error].y=lcount;
// etable[num_error].kerror="非法字符";
// num_error++;
}
if(ISEDGE(ch))
{
lcount--;
goto LA1;
}
//if word is the key word
LA1:
if((result=ISKEYWORD(c_word))>0)
{
// then token(关键字种别码,_)
tokenstring[num_token].knum=result+1;
tokenstring[num_token].entry=-1;
num_token++;
c_word="";
return 1;
}
else
{ //查添符号表
//token(表示符种别码,entry)
LookUp(c_word,34);
c_word="";
return 2;
}
}
//识别注解及界限符
int CMyDialog::handleCOM(TCHAR ch_in)
{
CString token;
c_ch=Getchar(lcount);
TCHAR ch,ch1;
lcount++;
if(c_ch!='*')
{
lcount--;
tokenstring[num_token].knum=48;
tokenstring[num_token].entry=-1;
num_token++;
return 1;
}
token="-1";
ch=Getchar(lcount);
lcount++;
while(lcount<h_buffer.GetLength())
{
ch1=ch;
ch=Getchar(lcount);
lcount++;
if(ch1=='*'&&ch=='/')
{
token="";
}
}
if(token!="")
{
etable[num_error].x=hcount;
etable[num_error].y=lcount;
etable[num_error].kerror="注解未完";
num_error++;
return 0;
}
return 1;
}
//识别字符常数
int CMyDialog::recogSTR(TCHAR ch_in)
{
lcount++;
c_ch=Getchar(lcount);
while(c_ch!='"')
{
lcount++;
c_word+=c_ch;
c_ch=Getchar(lcount);
}
if(c_ch=='"')
{
//查添符号表
//token(表示符种别码,entry)
LookUp(c_word,37);
c_word="";
return 1;
}
else
return 0;
}
//识别实数
int CMyDialog::recogDIG(TCHAR ch_in)
{
TCHAR ch;
int flag=0;
c_word+=ch_in;
lcount++;
ch=Getchar(lcount);
// lcount++;
if(!ISDIG(ch))
{
lcount--;
LookUp(c_word,35);
c_word="";
return 0;
}
else
{
c_ch=ch;
c_word+=c_ch;
int state=1;
while(1)
{
switch(state)
{
case 1:
{
c_ch=Getchar(lcount);
lcount++;
if(ISDIG(c_ch))
{
state=1;
c_word+=c_ch;
break;
}
else if(c_ch=='.')
{
flag=1;
state=2;
c_word+=c_ch;
break;
}
else
{
state=4;
}
}
case 2:
{
c_ch=Getchar(lcount);
lcount++;
if(c_ch=='~')
{
//查添符号表
//token(表示符种别码,entry)
if(flag==1)
{
LookUp(c_word,36);
}
else
LookUp(c_word,35);
c_word="";
return 1;
}
if(ISDIG(c_ch))
{
state=3;
c_word+=c_ch;
break;
}
else
{
etable[num_error].x=hcount;
etable[num_error].y=lcount;
etable[num_error].kerror="常数不合法";
return 0;
}
}
case 3:
{
c_ch=Getchar(lcount);
lcount;
if(c_ch=='~')
{
state=4;
}
if(ISDIG(c_ch))
{
state=3;
c_word+=c_ch;
break;
}
else
{
state=4;
}
}
case 4:
{
lcount--;
//查添符号表
//token(表示符种别码,entry)
if(flag==1)
{
LookUp(c_word,36);
}
else
{
LookUp(c_word,35);
}
c_word="";
return 1;
}
}
}
}
}
void CMyDialog::LookUp(CString str_in, int in)
{
int lflag=0;
CString lbuffer="";
if(in==34||in==37)
{
for(int i=0;i<200;i++)
{
for(int j=signtable.addname[i];j<signtable.addname[i]+signtable.lenname[i];j++)
{
int t=signtable.addname[2];
lbuffer+=signtable.signstring.GetAt(j);
}
if(str_in.Compare(lbuffer)==0)
{
lflag=1;
if(in==34)
{
tokenstring[num_token].knum=34;
tokenstring[num_token].entry=i;
num_token++;
break;
}
if(in==37)
{
tokenstring[num_token].knum=37;
tokenstring[num_token].entry=i;
num_token++;
break;
}
}
else
{
lbuffer="";
}
}
if(lflag==0) //符号表中没有
{
int t=str_in.GetLength();
signtable.lenname[num_sign]=t;
signtable.addname[num_sign]=signtable.tail;
signtable.signstring+=str_in;
if(in==37)
{
signtable.type[num_sign]=3;
tokenstring[num_token].knum=37;
tokenstring[num_token].entry=num_sign;
num_token++;
}
else
{
signtable.type[num_sign]=3;
tokenstring[num_token].knum=34;
tokenstring[num_token].entry=num_sign;
num_token++;
}
signtable.tail=signtable.tail+str_in.GetLength();
num_sign++;
}
}
else
{
for(int i=0;i<200;i++)
{
CString s;
s.Format("%d",signtable.val[i]);
if(!s.Compare(str_in))
{
lflag=1;
if(in==35)
{
tokenstring[num_token].knum=35;
tokenstring[num_token].entry=i;
num_token++;
break;
}
if(in==36)
{
tokenstring[num_token].knum=36;
tokenstring[num_token].entry=i;
num_token++;
break;
}
}
}
if(lflag==0)
{
if(in==35)
{
signtable.val[num_sign]=atoi(str_in);
signtable.type[num_sign]=3;
tokenstring[num_token].knum=36;
tokenstring[num_token].entry=num_sign;
num_sign++;
num_token++;
}
if(in==36)
{
signtable.val[num_sign]=atoi(str_in);
signtable.type[num_sign]=3;
tokenstring[num_token].knum=37;
tokenstring[num_token].entry=num_sign;
num_sign++;
num_token++;
}
}
}
}
void CMyDialog::WriteToToken()
{
CFile f;
CFileException e;
LPCTSTR Tname = "Ttable.txt";
CString str1[200],str2[200];
if( !f.Open( Tname, CFile::modeCreate | CFile::modeWrite, &e ) )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
}
for(int i=0;i<num_token;i++)
{
str1[i].Format("%d",tokenstring[i].knum);
str2[i].Format("%d",tokenstring[i].entry);
str1[i]+=" ";
str1[i]+=str2[i];
str1[i]+=" ";
f.Write(str1[i],str1[i].GetLength());
}
f.Close();
}
void CMyDialog::OnBsign()
{
// TODO: Add your control notification handler code here
CString str,str1,str2,str3,str4,str5,str6;
CString str0="\r\n";
str+=" SIGNTABLE";
str+=str0;
str+="ADDNAME LENNAME TYPE KIND VAL";
str+=str0;
for(int i=0;i<num_sign-1;i++)
{
str1.Format("%d",signtable.addname[i]);
str2.Format("%d",signtable.lenname[i]);
str3.Format("%d",signtable.type[i]);
str4.Format("%d",signtable.kind[i]);
str5.Format("%d",signtable.val[i]);
str6.Format("%d",signtable.addr[i]);
str+=str1;
str+=" ";
str+=str2;
str+=" ";
str+=str3;
str+=" ";
str+=str4;
str+=" ";
str+=str5;
str+=" ";
str+=str6;
str+=str0;
}
str+="signtable";
str+=str0;
int length=signtable.signstring.GetLength();
for(int j=0;j<length;j++)
{
str+=signtable.signstring.GetAt(j);
}
RAppendText(str);
}
void CMyDialog::OnBtoken()
{
// TODO: Add your control notification handler code here
CString str1[200],str2[200],str0="\r\n",str="",tstr;
str+=" The string of TOKEN";
str+=str0;
str+="knum entry";
str+=str0;
for(int i=0;i<num_token-1;i++)
{
str1[i].Format("%d",tokenstring[i].knum);
str2[i].Format("%d",tokenstring[i].entry);
str1[i]+=" ";
str1[i]+=str2[i];
str+=str1[i];
str+=str0;
}
RAppendText(str);
}
void CMyDialog::WriteToSign()
{
CFile f;
CFileException e;
LPCTSTR Sname = "Stable.txt";
CString str1[200],str2[200],str3[200],str4[200],str5[200],str6[200];
CString str0="\r\n";
if( !f.Open( Sname, CFile::modeCreate | CFile::modeWrite, &e ) )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
}
for(int i=0;i<num_token;i++)
{
str1[i].Format("%d",signtable.addname[i]);
str2[i].Format("%d",signtable.lenname[i]);
str3[i].Format("%d",signtable.type[i]);
str4[i].Format("%d",signtable.kind[i]);
str5[i].Format("%d",signtable.val[i]);
str6[i].Format("%d",signtable.addr[i]);
str1[i]+=" ";
str1[i]+=str2[i];
str1[i]+=" ";
str1[i]+=str3[i];
str1[i]+=" ";
str1[i]+=str4[i];
str1[i]+=" ";
str1[i]+=str5[i];
str1[i]+=" ";
str1[i]+=str6[i];
str1[i]+=" ";
f.Write(str1[i],str1[i].GetLength());
}
f.Close();
}
void CMyDialog::WriteToError()
{
CFile f;
CFileException e;
LPCTSTR Ename = "Etable.txt";
CString str1[200],str2[200];
CString str0="\r\n";
if( !f.Open( Ename, CFile::modeCreate | CFile::modeWrite, &e ) )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
}
for(int i=0;i<num_error;i++)
{
str1[i].Format("%d",etable[i].x);
str1[i]+=" ";
str2[i].Format("%d",etable[i].y);
str2[i]+=" ";
str1[i]+=str2[i];
str1[i]+=etable[i].kerror;
str1[i]+=" ";
f.Write(str1[i],str1[i].GetLength());
}
}
void CMyDialog::UAppendText(LPCSTR pText)
{
int nLen=m_Cerror.GetWindowTextLength();
m_Cerror.SetFocus();
// m_Cerror.SetSel(nLen,nLen);
m_Cerror.SetSel(0,-1);
m_Cerror.ReplaceSel(pText);
}
int CMyDialog::ISEMPTY(TCHAR ch_in)
{
if(ch_in==' ')
return 1;
else
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -