《编译原理》
实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
实验名称:词法分析
词法分析器的设计
一、 实验目的
通过完成词法分析程序,了解词法分析的过程。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。
二、 实验环境
操作系统:window xp
编写环境:visual c++ 、c-free、turbo c
编写语言:c语言
分析语言:c语言
三、 实验内容
(2,”main”)
(5,”(“)
(5,”)“)
(5,”{“)
(1,”int”)
(2,”a”)
(5,”,”)
(2,”b”)
(5,”;”)
(2,”a”)
(4,”=”)
(3,”10”)
(5,”;”)
(2,”b”)
(4,”=”)
(2,”a”)
(4,”+”)
(3,”20”)
(5,”;”)
(5,”}“)
程序输入/输出示例:
对c语言进行词法分析,把输入的字符串形式的源程序分割成一个个单词符号,其词法描述如下:
1识别保留字:if、int、for、while、do、return、break、continue
2其他的都识别为标识符;
3常数为无符号整形数;
4运算符包括:+、-、*、/、=、>、<、>=、<=、!=
5分隔符包括:,、;、{、}、(、)
如源程序为C语言。输入如下一段:
main()
{
int a,b;
a = 10;
b = a + 20;
}
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
输出如右图。
四、 实验代码
#include
#include "string.h"
#define al 30 /*符号的最大长度*/
FILE *fin;
FILE *fout;
int cc,ll,cx,linecount,num;
char line[81];
char ch;
char fname[al],fwname[al],a[al+1];
void main()
{
int getsym();
printf("请输入要分析的文件名:");
scanf("%s",fname);
fin=fopen(fname,"r");
printf("请输入要保存的文件名:");
scanf("%s",fwname);
fout=fopen(fwname,"w");
cc=ll=0;
ch=' ';
if(fin)
{
while( getsym()!=-1 )
{
}
}
}
int getch()
{
if(cc==ll)
{//缓冲是否被读取完毕
if(feof(fin))
{
return -1;
}
ll=0;
cc=0;
ch=' ';
while(ch!=10)
{
if(EOF==fscanf(fin,"%c",&ch))
{
line[ll]=0;
break;
}
line[ll]=ch;
ll++;
}
}
ch=line[cc];
cc++;
return 0;
}
int getsym()
{
int k;
while(ch==' ' || ch==10 || ch==9 )/*判断字符是否为空,空跳过取下一个字符*/
{
if(-1==getch())
{return -1;}
}
if(ch>='a' && ch<='z')
{//如果是字符或以字符开头
int b=0;
k=0;
do
{
if(k='a' && ch<='z' || ch>='0' && ch<='9');
a[k]='\0';
if(strcmp("if",a)==0||strcmp("int",a)==0||strcmp("for",a)==0||strcmp("while",a)==0||
strcmp("do",a)==0||strcmp("return",a)==0||strcmp("break",a)==0||strcmp("continue",a)==0)
{
printf("(1, \"%s\")\n",a);
fprintf(fout,"(1, \"%s\")\n",a);
}
else
{
printf("(2, \"%s\")\n",a);
fprintf(fout,"(2, \"%s\")\n",a);
}
}
else if(ch>='0'&&ch<='9')
{
k=0;
num=0;
do
{
a[k]=ch;
num=10*num+ch-'0';
k++;
if(-1==getch())
{
a[k]=0;return -1;
}
}while(ch>='0'&&ch<='9');
printf("(3, \"%d\")\n",num);
fprintf(fout,"(3, \"%d\")\n",num);
}
else if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='=')
{
printf("(4, \"%c\")\n",ch);
fprintf(fout,"(4, \"%c\")\n",ch);
if(-1==getch())
return -1;
}
else if(ch==','||ch==';'||ch=='{'||ch=='}'||ch=='('||ch==')')
{
printf("(5, \"%c\")\n",ch);
fprintf(fout,"(5, \"%c\")\n",ch);
if(-1==getch())
return -1;
}
return 0;
}
五、 实验小结(心得体会)
1、 开始拿到程序要求的时候,一定要搞清楚设计要求是什么
2、 在写程序的时候,需要适当的添加注释,一方面方便别人阅读,也可以便于修改
3、有些语句语法忘了需要翻开课本去好好巩固