首页 > 代码库 > 词法分析实验报告
词法分析实验报告
格式说明:排版时注意按此模板的字体,字号和行距。 报告提交和打印输出时请去掉此框。 |
实验一、词法分析实验
专业 商业软件工程 姓名 李桂源 学号 201506110201
一、 实验目的
通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。
二、 实验内容和要求
设计一个程序,调试、编译,实现词法分析的功能,识别各单词或字符所属类别,并显示在屏幕上或保存在某个文件中。
要求:逐个读入源程序字符并按照构词规则切分成一系列单词。包括保留字、标识符、运算符、标点符号和常量。输入:所给C源程序字符串。输出:二元组构成的序列。
三、 实验方法、步骤及结果测试
- 1. 源程序名:压缩包文件(rar或zip)中源程序名:词法分析程序
可执行程序名:词法分析程序
- 2. 原理分析及流程图
原理分析:通过构词规则切分成一系列单词,判断是否为保留字、标识符、运算符、标点符号和常量,再按照二元组输出。
- 1. 主要程序段及其解释:
do{
ch=getchar();
total[n]=ch;
n++;
}while(ch!=‘#‘); //将输入的字符赋值给ch,再存放在数组total[n]中
if((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘))
{
while((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘)||(ch>=‘0‘&&ch<=‘9‘))
{
keyword2[m]=ch;
m++;
ch=total[n];
n++;
}
keyword2[m]=‘\0‘;
code=10;
for(i=0;i<6;i++)
if(strcmp(keyword2,keyword[i])==0)
code=i+1;
} //通过使用if语句,判断输入的字符串首字符是否为字母,是的话再判断其是关键词还是变量
else if(ch==‘:‘||ch==‘<‘||ch==‘>‘)
switch(ch)
{
case ‘:‘:code=17;m=0;keyword2[m]=ch;m++;ch=total[n];n++;
if(ch==‘=‘)
{
keyword2[m]=ch;m++;n++;code=18;keyword[m]=‘\0‘;
}
break;
case ‘<‘:code=20;keyword2[m]=ch;m++;ch=total[n];n++;
if(ch==‘=‘)
{
keyword2[m]=ch;m++;n++;code=21;keyword[m]=‘\0‘;
}
else if(ch==‘>‘)
{
keyword2[m]=ch;m++;n++;code=22;keyword[m]=‘\0‘;
}break;
case ‘>‘:code=23;keyword2[m]=ch;m++;ch=total[n];n++;
if(ch==‘=‘)
{
keyword2[m]=ch;m++;n++;code=24;keyword[m]=‘\0‘;
}break;
} //通过switch语句,判断是什么符号,并用if语句做进一步判断。
- 2. 运行结果及分析
分析:能够比较输出想要输出的语法语句,但每个语法都中间都得加空格,不然就会出现错误,这是程序的不足之处。
一、 实验总结
在完成程序的过程中,面对了许多问题,首先,是不知道怎么单独将字符串取出来分析,通过查阅书料才得知getchar()的功能,忘记了字符串的输出可以通过字符数组存储后加‘\0‘,就可以直接将字符串输出。在面对许多的各类词法时,起初不知道从何下手,在敲打程序时也易逻辑、语句混乱。
词法分析实验报告