}
else{
word[0]=ch;
if(word[0]=='+'||word[0]=='-'||word[0]=='>'||word[0]=='<'||
word[0]=='&'||word[0]=='|'){
if(s[j+1]==word[0]||s[j+1]=='='){
word[1]=s[++j];
cout<<(4,'<}
else
cout<<(4,'<}
elseif(word[0]=='='||word[0]=='*'||word[0]=='/'||
word[0]=='!
'||word[0]=='%'||word[0]=='^'){
if(s[j+1]=='='){
word[1]=s[++j];
cout<<(4,'<}
else
cout<<(4,'<}
elseif(word[0]=='\\'){
if(s[j+1]=='n'||s[j+1]=='t'||
s[j+1]=='\\'||s[j+1]=='0'){
word[1]=s[++j];
cout<<(4,'<}
else
cout<<(4,'<}
-8-
4(
else
'<}
}
cout<<\
;
}
intmain(){
inti;
charb=32,ch;
FILE*fp;
o{di=0;
chars[10000];
chara[10000]={'\0'};
e.txt,
b+);fp=fopen(cod
if(fp==NULL){
cout<exit(0);
}
fseek(fp,0,2);
e(endwithtwo'?
'):
<o{d
ch=getchar();
s[i++]=ch;
if(ch=='\n'||ch=='\t')
for(intj=0;j<4;j++)
fputc(b,fp);
fputc(ch,fp);
e(s[i-1]!
='?
'||s[i-2]!
='?
');}whil
s[i]='\0';
Scanner(s,a);
<词法分析如下:
e(a);Handl
ose(fp);fcl
e(true);}whil
return0;
}
、实验测试和截图)、测试一截图1
-9-
输入代码:
输出结果:
)测试二截图(2
-10-
输入代码:
输出结果:
-11-
四、实验小结(包括问题和解决方法、心得体会、意见与建议等)在本实验中,我进一步学习了如何运用输入输出流,对文件进行读写操作。
了解了什么是词法分析,熟悉了词法分析器的构造,更加深入了对词法分析原理的理解。
程序将字符分为五类:
保留字、标识符、整数、运算符、分隔符,对使用者输入的程序代码进行识别、分析和编码,简单分析了词法。
实验过程中开始时由于对换行符(\n)、制表符(\t)、和注释等处理不好导致实验失败,后来预处理时讲它们全部换成空格符和把注释去掉才成功。
五、指导教师评语
-12-
成绩
批阅人
日期
-13-