203-陈冠权-词法分析实验报告
实验一、词法分析实验
专业:商业软件工程3班 姓名:陈冠权 学号:201506110203
一、实验目的
通过设计编译程序完成一个词法分析器,加深对词法分析的理解。
二、实验内容和要求
输入一连串的字符,即保留字、标识符、常数、运算符和分隔符,通过词法
分析器来识别具有独立意义的字符,并输出各个字符的内部编码。
三、实验方法、步骤及结果测试
- 1. 源程序名:词法分析.c
可执行程序名:词法分析.exe
- 2. 原理分析及流程图
要求在主函数输入字符串,将字符串存入数组里面,调用函数来进行比较,
识别字符串并输出种别码,主要采用非递归的算法完成字符串的比较。
- 1. 主要程序段及其解释:
main() //主函数
{
printf("请输入字符串(以#结束):\n");
p=0;
do{
ch=getchar();
a[p++]=ch; //将输入的字符串存放到一个数组里面
}while(ch!='#');
p=0;
printf("\n词法分析结果为:\n");
do{
scaner();
switch(s){ //判断返回值
case 11:
printf("(%d,%d))\n",s,sum);
break;
case -1:
printf("\n 不存在!\n");
break;
default:
printf("(%d,%s)\n",s,b);
}
}while(s!=0);
getch();
}
利用一个switch来识别字符,并输出种别码
switch(ch)
{
case'<':
m=0;
b[m++]=ch;
ch=a[p++];
if(ch=='>')
{
s=21;
b[m++]=ch;
}
else if(ch=='=')
{
s=22;
b[m++]=ch;
}
else
{
s=20;
ch=a[p--];
}
break;
case'>':
m=0;
b[m++]=ch;
ch=p++;
if(ch=='=')
{
s=24;
b[m++]=ch;
}
else
{
s=23;
ch=a[p--];
}
break;
case':':
m=0;
b[m++]=ch;
ch=a[p++];
if(ch=='=')
{
s=18;
b[m++]=ch;
}
else
{
s=17;
ch=a[p--];
}
break;
case'+':
s=12;
b[0]=ch;
break;
case'-':
s=13;
b[0]=ch;
break;
case'*':
s=14;
b[0]=ch;
break;
case'/':
s=15;
b[0]=ch;
break;
case'=':
s=16;
b[0]=ch;
break;
case';':
s=17;
b[0]=ch;
break;
case'(':
s=18;
b[0]=ch;
break;
case')':
s=19;
b[0]=ch;
break;
case'#':
s=0;
b[0]=ch;
break;
default:
s=-1;
}
4. 运行结果及分析
四、实验总结
在编写该程序时,在输入字符串并且比较时,没有找到一个适合的方法来解
决这个问题,还有就是在识别字符时,没有把标识符等分开来比较,总是出现乱码。