pl0词法分析器.doc
文本预览下载声明
#include stdio.h
#include stdlib.h
#include string.h
char ch;
FILE *fp;
char Getchar2()
{
ch=fgetc(fp);
if(ch== ||ch==10||ch==9)
ch=fgetc(fp);
return ch;
}
char Getchar()
{
ch=fgetc(fp);
return ch;
}
bool IsLetter()//判断ch是否为字母
{
if(ch=zch=a || ch=Zch=A)
return true;
else
return false;
}
bool IsDigit()//判断ch是否为数字
{
if(ch=9 ch=0)
return true;
else
return false;
}
void Concat(char strToken[30])//将ch中的字符加入strToken中
{
int i=0;
while(strToken[i]!=\0)
i++;
strToken[i]=ch;
strToken[i+1]=\0;
}
int Reserve(char str[])
{
if(strcmp(str,begin)==0)
return 1;
else if(strcmp(str,call)==0)
return 2;
else if(strcmp(str,const)==0)
return 3;
else if(strcmp(str,do)==0)
return 4;
else if(strcmp(str,end)==0)
return 5;
else if(strcmp(str,if)==0)
return 6;
else if(strcmp(str,odd)==0)
return 7;
else if(strcmp(str,procedure)==0)
return 8;
else if(strcmp(str,read)==0)
return 9;
else if(strcmp(str,program)==0)
return 10;
else if(strcmp(str,var)==0)
return 11;
else if(strcmp(str,while)==0)
return 12;
else if(strcmp(str,write)==0)
return 13;
else if(strcmp(str,than)==0)
return 14;
else return 0;
}
int InsertConst(char str[])
{
int i,value=0;
for(i=0;str[i]!=\0;i++)
{
value=10*value+str[i]-0;
}
return value;
}
void main()
{
int code , value;
char id[30]={};
char strToken[30];
if((fp=fopen(1.txt,r))==NULL)
{
printf(文件打开失败!\n);
exit(0);
}
ch=Getchar2(); //读取一个非空字符
while(ch!=EOF)
{
strcpy(strToken,id);
if(IsLetter())
{
while( IsLetter() || IsDigit() )
{
Concat(strToken);
ch=Getchar();
}
code=Reserve(strToken);//保留字返回它代码,否则返回0值
if(code==0)
printf(%s -\n,strToken);
else
{
switch(code)
{
case 1:
printf(begin -\n); break;
case 2:
printf(call -\n); break;
case 3:
printf(const -\n); break;
case 4:
printf(do -\n); break;
case 5:
printf(end -\n); break;
case 6:
printf(if -\n); b
显示全部