📄 compile.cpp.bak
字号:
#include <cstdio>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <iostream>
using namespace std;
int allnum(char *str)
{
int count;
int max;
max=strlen(str);
for (count=0;count<max;++count)
{
if (*(str+count)<'0'||*(str+count)>'9')
{
return 0;
}
}
return 1;
}
int main(int argc, char *argv[])
{
fstream infile;
infile.open(argv[1],ios::in);
char buffer[10]={" "};
char var[25][10];
char resve[36][10]={"","","","program","var","procedure","begin","end","if","then","else","while","do","call","integer","real","+","-","*","/","~","^","&","<","<=",">",">=","=","<>",":=",";",".",",","(",")",":"};
char *ch1 = new char [80];
char *vartemp = new char[9];
char *chbuffer = new char [3];
int ch1count,buffercount,rescount,errflag=0,charflag=0,pointcount=0,varcount=0,clearcount=0,clearstart=0,clearend=0,clearflag=0,copycount=0,showflag=1;
for (varcount=0;varcount<25;++varcount)
{
strcpy(var[varcount],buffer);
}
while(infile.getline(ch1,80))
{
errflag=0;
ch1count=0;
while (ch1[ch1count]!='\0')
{
for (clearcount=0;clearcount<80;++clearcount)
{
if (ch1[clearcount]=='/'&&ch1[clearcount+1]=='*')
{
clearstart=clearcount;
clearflag=1;
showflag=0;
break;
}
}
for (clearcount=0;clearcount<80;++clearcount)
{
if (clearflag==0&&ch1[clearcount]=='*'&&ch1[clearcount+1]=='/')
{
cout<<"**error(1)** ";
break;
}
if (ch1[clearcount]=='*'&&ch1[clearcount+1]=='/')
{
clearend=clearcount+2;
showflag=1;
break;
}
}
for (;clearstart<clearend;++clearstart)
{
if (clearflag==1)
ch1[clearstart]=' ';
}
clearflag=0;
char buffer[10]={" "};
errflag=0;
for (;ch1[ch1count]==' ';++ch1count)
{}
for (buffercount=0,charflag=0;ch1[ch1count]!=' ';++ch1count,++buffercount)
{
buffer[buffercount]=ch1[ch1count];
if (ch1[ch1count]=='+'||ch1[ch1count]=='-'||ch1[ch1count]=='*'||ch1[ch1count]=='/'||ch1[ch1count]==':'||ch1[ch1count]=='='||ch1[ch1count]=='>'||ch1[ch1count]=='<'||ch1[ch1count]==';'||ch1[ch1count]==','||ch1[ch1count]=='.')
{
if (ch1[ch1count+1]=='='||ch1[ch1count+1]=='>')
{
charflag=1;
chbuffer[0]=ch1[ch1count];
chbuffer[1]=ch1[ch1count+1];
chbuffer[2]='\0';
ch1count+=2;
break;
}
else
{
charflag=1;
chbuffer[0]=ch1[ch1count];
chbuffer[1]='\0';
++ch1count;
break;
}
}
if (ch1[ch1count]==' '||ch1[ch1count]=='\0')
{
break;
}
}
buffer[buffercount]='\0';
if (buffer[0]>='0'&&buffer[0]<='9'&&allnum(buffer))
{
if(showflag)cout<<"(2,"<<buffer<<")"<<buffer<<" ";
}
if (buffer[0]>='0'&&buffer[0]<='0'&&allnum(buffer)==0)
{
if(showflag)cout<<"**error(1)** ";
}
for (rescount=3;rescount<36;++rescount)
{
errflag=1;
if ((buffer[0]>='a'&&buffer[0]<='z')||(buffer[0]>='A'&&buffer[0]<='Z'))
{
if (strcmp(buffer,resve[rescount])==0)
{
errflag=1;
if(showflag)cout<<"("<<rescount<<",0)"<<buffer<<" ";
break;
}
if (rescount>34)
{
for (copycount=0;copycount<8;++copycount)
{
vartemp[copycount]=buffer[copycount];
}
vartemp[copycount]='\0';
for (varcount=1;varcount<25;++varcount)
{
if (strcmp(vartemp,var[varcount])==0)
{
if(showflag)cout<<"(1,"<<varcount<<")"<<vartemp<<" ";
break;
}
}
if (varcount>24)
{
for (varcount=1;varcount<25;++varcount)
{
if (var[varcount][0]==' ')
{
pointcount=varcount;
break;
}
}
if(showflag)
{
strcpy(var[pointcount],vartemp);
cout<<"(1,"<<pointcount<<")"<<var[pointcount]<<" ";
}
}
}
}
}
if (charflag==1)
{
for (int chcount=0;chcount<36;++chcount)
{
if (strcmp(chbuffer,resve[chcount])==0)
{
if(showflag)cout<<"("<<chcount<<",0)"<<chbuffer<<" ";
}
}
}
if (buffer[0]=='?'||buffer[0]=='!'||buffer[0]=='@'||buffer[0]=='#'||buffer[0]=='%'||buffer[0]=='$'||buffer[0]=='_'||buffer[0]=='{'||buffer[0]=='}'||buffer[0]=='['||buffer[0]==']')
{
errflag=0;
}
if (errflag==0)
{
if(showflag)cout<<"**error(1)** ";
}
}
}
cout<<'\n';
varcount=1;
while (var[varcount][0]!=' ')
{
cout<<varcount<<" "<<var[varcount]<<" 0"<<endl;
++varcount;
}
infile.close();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -