#include
using namespace std;
const int MAXN=1e3+10;
int n;///输入文本的行数
char buffer[MAXN][MAXN];///缓冲区
int len[MAXN];///输入文本每行的列数
struct out///输出格式
{
string id;
int val;
out(){}
out(string a,int b){id=a;val=b;}
}res[MAXN*MAXN];///输出表
int rescnt;///输出计数器
set
set
struct indent///标识符格式
{
string name;
int val;
indent(){}
indent(string a,int b){name=a;val=b;}
}iden[MAXN*MAXN];///标识符表
int idencnt;///标识符计数器
int num[MAXN*MAXN];///常数表
int numcnt;///常数计数器
void init()
{
string s[]={"begin", "end" ,"if" ,"then", "while", "do", "const", "var","call","procedure","+", "-", "*","/","odd","=","<>","<",">","<=",">=",":=", "(" , ")" ,"," , "." , ";"};
string t[]={"+", "-", "*","/","<",">",":","=", "(" , ")" ,"," , "." , ";"};
for(int i=0;i<27;i++) key.insert(s[i]);
for(int i=0;i<13;i++) cal.insert(t[i]);
for(int i=0;i
int dp(char x)
{
if((x>='A'&&x<='Z')||(x>='a'&&x<='z')) return 1;
if(x>='0'&&x<='9') return 2;
char c[]={x,'\0'};string s=c;
if(cal.count(s)) return 3;
return 0;
}
int to_int(string s)
{
int ans=0;
for(int i=0;i
return ans;
}
void solve()
{
for(int i=0;i
int index=0;
while(index
while(index
char t[]={buffer[i][index],'\0'}; string sss=t;
int indexdp=dp(buffer[i][index]);
index++;
if(indexdp==1||indexdp==2)
{
while(index
char tt[]={buffer[i][index],'\0'};
sss+=tt;
index++;
}
if(indexdp==1)
{
if(key.count(sss)) res[rescnt++]=out(sss,-1);
else
{
int j=0;
for(;j
res[rescnt++]=out("id",j);
}
}
else if(indexdp==2)
{
int j=0,x=to_int(sss);
for(;j
res[rescnt++]=out("int",j);
}
}
else if(indexdp==3)
{
if(index
char tt[]={buffer[i][index],'\0'};
string str=tt;
index++;
if(key.count(sss+str))
res[rescnt++]=out(sss+str,-1);
else
{
index--;
if(key.count(sss)) res[rescnt++]=out(sss,-1);
else ;///异常处理
}
}
else
{
if(key.count(sss)) res[rescnt++]=out(sss,-1);
else ;///异常处理
}
}
else {}///异常处理
}
}
}
void cifa()
{
init();
solve();
for(int i=0;i
cout<<"("<
else cout<
}
int main()
{
cout<<"请输入源程序,连按两个回车结束"<
{
cin.getline(buffer[n],MAXN);getchar();
n++;
}
cifa();
return 0;
}