实验一词法分析实验报告Word格式文档下载.doc
- 文档编号:14179448
- 上传时间:2022-10-19
- 格式:DOC
- 页数:6
- 大小:136.50KB
实验一词法分析实验报告Word格式文档下载.doc
《实验一词法分析实验报告Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《实验一词法分析实验报告Word格式文档下载.doc(6页珍藏版)》请在冰豆网上搜索。
begin
if
then
while
do
end
(2)
运算符和界符:
:
=
+
–
*
/
<
>
>
=
;
(
)
#
(3)
其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:
ID=letter(letter|digit)*
NUM=digitdigit*
(4)
空格由空白、制表符和换行符组成。
空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。
2、
各种单词符号对应的种别码
图1
程序结构描述:
变量初始化
忽略空格
是否输入结束?
返回
是否
是调用scanner()
字母
拼字符串
数其他
运算符、符号
界符等符号
是否关键字?
拼数
否
对不同符号给出相应的syn值
报错
syn=10
是
syn=1111
syn为对应关键字的单词种别码
图2
四、实验结果
输入beginx:
=9:
ifx>
9thenx:
=2*x+1/3;
end#后经词法分析输出如下序列:
(begin1)(x10)(:
17)(=18)(911)(;
26)(if2)……如图3所示:
图3
输入privatex:
=9;
ifx>
0thenx:
end#后经词法分析输出如下序列:
(private10)(x10)(:
26)(if2)……如图4所示:
图4
显然,private是关键字,却被识别成了标示符,这是因为图1中没有定义private关键字的种别码,所以把private当成了标示符。
@end#后经词法分析输出如下序列:
26)(if2)……如图5所示
图5
显然,@没有在图一中定义种别,所以输出了“Errorinrow1!
”的报错信息。
五、词法分析程序的C语言程序源代码
voidscaner()
{
/*
共分为三大块,分别是标示符、数字、符号,对应下面的ifelseif和else
*/
if((ch>
='
a'
&
ch<
z'
)||(ch>
A'
Z'
))//可能是标示符或者变量名
{
m=0;
while((ch>
0'
9'
))
{
token[m++]=ch;
ch=prog[p++];
}
token[m++]='
\0'
;
p--;
syn=10;
for(n=0;
n<
6;
n++)//将识别出来的字符和已定义的标示符作比较,
if(strcmp(token,rwtab[n])==0)
{
syn=n+1;
break;
}
}
elseif((ch>
))//数字
sum=0;
while((ch>
sum=sum*10+ch-'
ch=prog[p++];
syn=11;
if(sum>
32767)
syn=-1;
elseswitch(ch)//其他字符
case'
<
'
m=0;
token[m++]=ch;
if(ch=='
)
syn=21;
token[m++]=ch;
elseif(ch=='
syn=22;
else
syn=23;
p--;
break;
syn=24;
syn=20;
syn=18;
syn=17;
*'
syn=13;
token[0]=ch;
break;
/'
syn=14;
+'
syn=15;
-'
syn=16;
syn=25;
syn=26;
('
syn=27;
)'
syn=28;
#'
syn=0;
\n'
syn=-2;
default:
syn=-1;
}
六、实验总结
这个实验花费了一节课的时间,通过本次试验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;
熟悉了构造词法分析程序的相关原理,。
这个程序只能识别特定的几个关键字,假如想要识别另外的关键字还要再一次修改源程序,程序的扩展性不高,还需要改进!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 词法 分析 报告