📄 词法分析.cpp
字号:
/*该词法分析是用c语言实现的,首先需在该程序的目录下存放需要词法分析的源程序和关键字表,
然后运行该程序时,它会自动调用需词法分析的程序,然后显示分析后的结果*/
#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
char c,t[15],h[15],s[80];
int n=1,k,i=0,j=0;
FILE *fp,*fp1,*fp2;
fp=fopen("source.txt","r");
for(;c!='}';i++) //读入源程序
{
fscanf(fp,"%c",&c);
s[i]=c;
}
s[i]='\0';
printf("%s\n\n",s); //输出源程序
for(i=0;s[i]!='\0';i++)
{
k=1;
if(s[i]>=97 && s[i]<=122) //判断是关键字还是标字符
{
for(j=0;(s[i]>=97 && s[i]<=122) || s[i]=='.';i++,j++)
t[j]=s[i];
t[j]='\0';
fp1=fopen("Keyword.txt","r");
while(fscanf(fp1,"%s",h)!= EOF)
if(strcmp(t,h)==0)
{
printf("%d. %s\t(关键字)\n",n,t);
break;
}
fp2=fopen("header_file.txt","r");
while(fscanf(fp2,"%s",h)!= EOF)
if(strcmp(t,h)==0)
{
printf("%d. %s\t(关键字)\n",n,t);
k=0;
break;
}
if(fscanf(fp1,"%s",h)==EOF && k!=0)
printf("%d. %s\t\t(标字符)\n",n,t);
for(j=0;j<15;j++)
t[j]='\0';
n++;i--;
}
else if(s[i]>=65 && s[i]<=90) //判断简单情况下的标字符
{
for(j=0;s[i]>=65 && s[i]<=122;i++,j++)
t[j]=s[i];
printf("%d. %s\t\t(标字符)\n",n,t);
for(j=0;j<15;j++)
t[j]='\0';
n++;i--;
}
else if(s[i]>=48 && s[i]<=57) //判断常数
{
for(j=0;s[i]>=48 && s[i]<=57;i++,j++)
t[j]=s[i];
printf("%d. %s\t\t(常数)\n",n,t);
n++;i--;
}
else if(s[i]=='-' || s[i]=='+' || s[i]=='*' || s[i]=='/' || s[i]=='=') //判断运算符
{
printf("%d. %c\t\t(运算符)\n",n,s[i]);
n++;
}
else if((s[i]>=33 && s[i]<=42) || (s[i]>=58 && s[i]<=59) || (s[i]>=123 && s[i]<=126) || s[i]==44 || s[i]==60 || s[i]==62) //判断边界符
{
printf("%d. %c\t\t(边界符)\n",n,s[i]);
n++;
}
}
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -