编译原理 词法分析器 实验报告Word格式.docx
《编译原理 词法分析器 实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《编译原理 词法分析器 实验报告Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
end
then
procedure
=
运算符
2
<
>
*
+
/
:
ident
标识符
3
number
常数
4
(
分隔符
5
)
;
.
状态转换图:
①标识符及保留字:
②number:
③关系操作符:
④分隔符:
⑤算术运算符:
使用环境:
Windowsxp下的visualc++6.0
程序测试:
input1:
inta,b;
a=b+2;
input2:
while(a>
=0)
7x=x+6.7E+23;
end;
input3:
begin:
x:
=9
ifx>
0thenx:
=x+1;
whilea:
=0do
b:
=2*x/3,c:
=a;
output1:
3,int
3,a
5,,
3,b
5,;
2,=
2,+
4,2
output2:
1,while
5,(
2,>
4,0
5,)
1,do
errorline3
3,x
4,6.7E+23
1,end
output3:
1,begin
errorline1
2,:
4,9
1,if
1,then
4,1
2,*
2,/
4,3
3,c
测试结果与预期结果一致
源程序代码:
#include<
stdio.h>
string.h>
voidmain()
{
inti=0,j,k=0,state=1,f=0,linenum=1;
chara[11][10]={"
const"
"
var"
call"
begin"
if"
while"
do"
odd"
end"
then"
procedure"
};
charb,d[40]={"
\0"
freopen("
input.txt"
r"
stdin);
output.txt"
w"
stdout);
b=getchar();
while(b!
=EOF)/*判断所输入字符是否为结束符*/
{
if(b=='
'
||b=='
\n'
\t'
)/*滤过空格、换行等分隔符号*/
{if(b='
)linenum++;
b=getchar();
}
elseif((b>
='
a'
&
b<
z'
)||(b>
A'
Z'
))/*识别标识符以及保留字*/
{
d[i++]=b;
while((b>
0'
9'
))
{
d[i++]=b;
b=getchar();
}
for(j=0;
j<
11;
j++)/*查询保留字表确定该单词是否是保留字*/
{if(strcmp(d,a[j])==0)
{printf("
1,%s\n"
d);
k=1;
break;
if(k==0)/*在保留字表中没有查到该单词,是标识符*/
printf("
3,%s\n"
=i;
j++)
d[j]='
\0'
i=0;
k=0;
elseif(b>
)/*识别常数*/
{d[i++]=b;
while(f!
=1){
switch(state){
case1:
if(b>
){
state=1;
d[i++]=b;
b=getchar();
}
elseif(b=='
.'
){state=2;
d[i++]=b;
b=getchar();
E'
){state=4;
elsestate=7;
break;
case2:
state=3;
elsestate=8;
break;
case3:
case4:
if(b=='
+'
-'
){state=5;
elseif(b>
){state=6;
case5:
case6:
case7:
f=1;
break;
case8:
}
if(state==7&
(b<
'
||b>
)&
printf("
4,%s\n"
elseif(state==7&
(b>
))/*数字后接字母的出错控制*/
{
while((b>
b=getchar();
errorline%d\n"
linenum);
elseprintf("
for(j=0;
i=0;
f=0;
elseif(b=='
)/*识别'
、'
和'
*/
printf("
2,%s\n"
i=0;
else
{printf("
{d[i++]=b;
elseprintf("
for(j=0;
d[j]='
*'
/'
)/*识别运算符*/
{printf("
2,%c\n"
b);
('
)'
'
)/*识别分隔符*/
5,%c\n"
else
实验心得:
此次实验让我了解了如何设计、编制并调试词法分析程序,并加深了我对词法分析器原理的理解;
熟悉了直接构造词法分析器的方法和相关原理,并学会使用c语言直接编写词法分析器;
同时更熟练的掌握用c语言编写程序,实现一定的实际功能。