实验一词法分析演示教学.docx
- 文档编号:11368429
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:11
- 大小:49.08KB
实验一词法分析演示教学.docx
《实验一词法分析演示教学.docx》由会员分享,可在线阅读,更多相关《实验一词法分析演示教学.docx(11页珍藏版)》请在冰豆网上搜索。
实验一词法分析演示教学
实验一-词法分析
实验一词法分析
一、实验目的:
通过本实验理解词法分析的整个过程,处理对象和处理的结果,了解词法分析在整个编译过程中的作用。
二、实验学时:
2学时。
三、实验内容
根据给出的简单语言的词法构成规则和单词集合,编制词法分析程序,要求能用给定的简单语言书写的源程序进行词法分析,同时建立相应的符号表文件存放正确的单词。
输出分析结果于文件中,包括:
(1)正确的单词符号及其单词种类的序对二元组。
具体输出形式为:
二元组:
(单词种类,单词内码值)
单词种类见五。
四、实验方法
构造识别单词集的自动机,编写程序实现。
五、实验的处理单词集
(注:
单词种类统一分类如下:
)
单词符号
单词种类
任意变量名(以字母开头由字母和数字组成的符号串)
0
(
1
)
2
{
3
}
4
;
5
=
6
+
7
*
8
>
9
<
10
,
11
‘
12
整型常数(由数字组成的符号串)
30
main
26
int
21
if
22
then
23
else
24
return
25
其它
100
六、处理程序例和处理结果例
例1:
源程序:
main()
{
y=x-1;
}
处理结果:
(26,"main")
(1,"(")
(2,")")
(3,"{")
(0,"y")
(6,"=")
(0,"x")
(100,"-")
(20,"1")
(5,";")
(4,")")
例2:
源程序
main()
{
inta,b;
b!
=a-1;
}
处理结果:
(26,"main")
(1,"(")
(2,")")
(3,"{"})
(21,”int”)
(0,"a")
(11,",")
(0,"b")
(5,”;”)
(0,"b")
(100,"!
")
(6,"=")
(0,"a")
(100,"-")
(30,"1")
(5,”;”)
(4,”}”)
七、实验报告要求
给出单词识别的状态转换图;带有注释(简单说明)的源程序。
程序运行截图,要求运行结果内有输出自己的名字和学号.
源程序:
#include
#include
usingnamespacestd;
chartoken[8];//关键字比较临时存储空间
charch;//每次输入字符存储
charprog[100]={0};//所有的输入存入
intp=0;//计数变量
intsyn;//关键字或其他代码的数字标号
intn,i;
char*keyword[6]={"int","if","then","else","return","main"};
voidscaner();
voidmain()
{
intselect=-1;//选择变量
p=0;
printf("输入需要分析的语句,以'#'结尾!
\n");
do//将所有字符存入prog数组中
{
ch=getchar();
prog[p++]=ch;
}while(ch!
='#');
p=0;
while(select!
=2)
{
printf("请输入1或2\n1.开始词法分析\n2.退出\n");
scanf("%d",&select);
if(select==1)
{
do
{
scaner();
switch(syn)
{
case-1:
printf("词法分析出错\n");break;
default:
{
if(syn==-2)
{
printf("语句结束!
\n");
break;
}
printf("<%d,%s>\n",syn,token);
break;
}
}
}while(syn!
=-2);
printf("词法分析成功\n");
}
else
continue;
}
}
voidscaner()
{
for(n=0;n<10;n++)
token[n]='\0';
n=0;
ch=prog[p++];
while((ch=='')||(ch==int(13))||(ch==int(10)))//排除空格和回车
ch=prog[p++];
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
do
{
token[n++]=ch;
ch=prog[p++];
}while((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9'));
syn=0;
for(n=0;n<6;n++)
{
if(strcmp(token,keyword[n])==0)//对输入字符和关键字进行比较
{
syn=n+21;//对关键字标号进行输出
}
}
p--;
}
else
if(ch>='0'&&ch<='9')
{
p--;
do
{
token[n++]=prog[p++];
ch=prog[p];
}while(ch>='0'&&ch<='9');
syn=20;
}
else
{
//ch=prog[p++];
switch(ch)
{
case'(':
syn=1;token[0]=ch;break;
case')':
syn=2;token[0]=ch;break;
case'{':
syn=3;token[0]=ch;break;
case'}':
syn=4;token[0]=ch;break;
case';':
syn=5;token[0]=ch;break;
case'=':
syn=6;token[0]=ch;break;
case'+':
syn=7;token[0]=ch;break;
case'-':
syn=100;token[0]=ch;break;
case'*':
syn=8;token[0]=ch;break;
case'>':
syn=9;token[0]=ch;
ch=prog[p];//退格操作
break;
case'<':
syn=10;token[0]=ch;
ch=prog[p];
break;
case',':
syn=11;token[0]=ch;break;
case'‘':
syn=12;token[0]=ch;break;
case'#':
syn=-2;token[0]=ch;break;
default:
printf("词法分析出错!
请检查是否输入非法字符\n");syn=-1;break;
}
}
}
截图:
状态转换图
0
2
1
3
7
5
6
8
9
10
11
4
17
空白
字母或数字
字母
非字母与数字字
数字
非数字字
数字
(
)
{
}
;
=
+
*
13
16
14
15
>
<
‘
12
其他
八、实验小结
通过本实验理解词法分析的整个过程,处理对象和处理的结果,了解词法分析在整个编译过程中的作用。
这个实验的大体思路根据状态转换图,根据词法分析原理,编写程序,主要用的是switch语句,凡是不符合语法的就报错,经过不断地改错,以及思路加深了课堂知识的了解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 词法 分析 演示 教学