#include <bits/stdc++.h>
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<string> cal;///运算符
set<string> key;///关键字+标识符
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<n;i++) len[i]=strlen(buffer[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<s.size();i++)
ans=ans*10+s[i]-'0';
return ans;
}
void solve()
{
for(int i=0;i<n;i++)
{
int index=0;
while(index<len[i])
{
while(index<len[i]&&(buffer[i][index]==' '||buffer[i][index]=='\t')) index++;
if(index>=len[i]) break;
char t[]={buffer[i][index],'\0'}; string sss=t;
int indexdp=dp(buffer[i][index]);
index++;
if(indexdp==1||indexdp==2)
{
while(index<len[i]&&dp(buffer[i][index])==indexdp)
{
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<idencnt;j++) if(sss==iden[j].name) break;
if(j==idencnt) iden[idencnt++]=indent(sss,0);
res[rescnt++]=out("id",j);
}
}
else if(indexdp==2)
{
int j=0,x=to_int(sss);
for(;j<numcnt;j++) if(x==num[j]) break;
if(j==numcnt) num[numcnt++]=x;
res[rescnt++]=out("int",j);
}
}
else if(indexdp==3)
{
if(index<len[i]&&dp(buffer[i][index])==indexdp)
{
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<rescnt;i++)
{
cout<<"("<<res[i].id<<",";
if(res[i].val==-1) cout<<" ";
else cout<<res[i].val;
cout<<")"<<endl;
}
}
int main()
{
cout<<"请输入源程序,连按两个回车结束"<<endl;
while(cin.peek()!='\n')
{
cin.getline(buffer[n],MAXN);getchar();
n++;
}
cifa();
return 0;
}