词法分析程序的构造Word文档下载推荐.docx
- 文档编号:7173924
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:20
- 大小:164.56KB
词法分析程序的构造Word文档下载推荐.docx
《词法分析程序的构造Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《词法分析程序的构造Word文档下载推荐.docx(20页珍藏版)》请在冰点文库上搜索。
编写对简单语言进行词法分析的词法分析程序。
1、识别子集中的关键字、标识符、常数、运算符和分界符等。
2、对子集中的字符类型进行归类
三、概要设计
(1)状态转换图:
(2)核心代码:
1)定义:
charcbuffer;
char*keyword[14]={"
if"
"
else"
for"
while"
do"
float"
return"
break"
continue"
int"
void"
main"
const"
printf"
};
//关键字
char*border[8]={"
"
;
"
{"
}"
("
)"
"
:
="
."
//分隔符
char*arithmetic[6]={"
+"
-"
*"
/"
++"
--"
//运算符
char*relation[7]={"
<
>
=="
!
//关系运算符
char*lableconst[80];
//标识符
2)函数调用:
search(charsearchchar[],intwordtype)//查找类型
alphaprocess(charbuffer)//字符处理过程
digitprocess(charbuffer)//数字处理过程
otherprocess(charbuffer)//分隔符、运算符、逻辑运算符等
main()//主函数
3)状态类型:
状态转换图的形式:
■每个状态对应一个带标号的case语句
■转向边对应goto语句
switch(wordtype)
{
case1:
{for(i=0;
i<
=13;
i++)//关键字
if(strcmp(keyword[i],searchchar)==0)
return(i+1);
}
return(0);
}
case2:
for(i=0;
=7;
i++)//分隔符
if(strcmp(border[i],searchchar)==0)
}
case3:
=5;
i++)//运算符
if(strcmp(arithmetic[i],searchchar)==0)
case4:
=6;
i++)//关系运算符
if(strcmp(relation[i],searchchar)==0)
case5:
for(t=40;
t<
=constnum;
t++)//常数
if(strcmp(searchchar,lableconst[t])==0)//判断该常数是否已出现过
return(t+1);
lableconst[t-1]=(char*)malloc(sizeof(searchchar));
//为新的元素分配内存空间
strcpy(lableconst[t-1],searchchar);
//为数组赋值lableconst指针数组名
constnum++;
//常数个数自加
return(t);
case6:
=lableconstnum;
i++)
if(strcmp(searchchar,lableconst[i])==0)//判断标识符是否已出现过
lableconst[i-1]=(char*)malloc(sizeof(searchchar));
strcpy(lableconst[i-1],searchchar);
lableconstnum++;
//标识符个数自加
return(i);
5)单字符判断
if(otypetp=search(othertp,3))//判断该运算符是否是由连续的两个字符组成的
cout<
row:
"
row<
String="
othertp<
\t\t\t"
运算符"
endl;
fp.get(buffer);
gotoout;
else//单字符逻辑运算符
othertp[1]='
\0'
逻辑运算符"
四、详细设计
实验环境:
visualC++6.0win7系统
源程序代码:
#include<
iostream>
ctype.h>
fstream>
string.h>
malloc.h>
usingnamespacestd;
ifstreamfp("
09002801.txt"
ios:
in);
char*keyword[14]={"
intconstnum=40;
intlableconstnum=0;
//统计常数和标识符数量
introw=1;
intsearch(charsearchchar[],intwordtype)
{
inti=0,t=0;
switch(wordtype)
case3:
case5:
default:
cout<
错误!
charalphaprocess(charbuffer)//字符处理过程
{
intatype;
inti=-1;
charalphatp[20];
while((isalpha(buffer))||(isdigit(buffer)))
//这两个函数分别是判字符和判数字函数位于ctype.h中
alphatp[++i]=buffer;
alphatp[i+1]='
//在末尾添加字符串结束标志
if(atype=search(alphatp,1))
alphatp<
关键字"
else
atype=search(alphatp,6);
标识符"
return(buffer);
chardigitprocess(charbuffer)//数字处理过程
chardigittp[20];
intdtype;
while((isdigit(buffer)))
digittp[++i]=buffer;
digittp[i+1]='
dtype=search(digittp,5);
digittp<
数字"
charotherprocess(charbuffer)//分隔符、运算符、逻辑运算符等
charothertp[20];
intotype,otypetp;
othertp[0]=buffer;
if(otype=search(othertp,3))
othertp[1]=buffer;
othertp[2]='
if(otype=search(othertp,4))//关系运算符
if(otypetp=search(othertp,4))//判断该关系运算符是否是由连续的两个字符组成的
关系运算符"
if(buffer=='
'
)//"
的判断
='
)
//cout<
=(2,2)\n"
if(otype=search(othertp,2))//分界符
分隔符"
if((buffer!
\n'
)&
&
(buffer!
'
))
非法字符为:
buffer<
out:
return(buffer);
voidmain()
printf("
=========================词法分析器==========================\n"
);
inti;
=50;
lableconst[i]="
//用于保存标识符
if(!
fp)
源文件无法打开,请检查!
{
fp.get(cbuffer);
while(!
fp.eof())
if(cbuffer=='
row++;
fp.get(cbuffer);
elseif(isalpha(cbuffer))
cbuffer=alphaprocess(cbuffer);
elseif(isdigit(cbuffer))
cbuffer=digitprocess(cbuffer);
else
cbuffer=otherprocess(cbuffer);
标识符个数是:
lableconstnum<
分别是"
i=0;
while(i<
lableconstnum)
lableconst[i++]<
词法分析结束!
\n"
getchar();
(3)程序流程图:
五、测试数据及其结果分析
若源程序中没有09002801.txt文档,则会出现如下提示:
若文档中包含09002801.txt文档,文档代码为:
运行后结果如下:
六、调试过程中的问题
在代码调试过程中,由于代码编写时将主函数main和文件打开的顺序颠倒,导致未写入源文档也会提示词法分析结束,实际上并未进行词法分析过程,应该提示文件打开错,返回检查。
在重新修改之后能够达到理想要求编译运行。
七、专业课程设计总结
通过这次实验,我对编译原理关于词法分析有了进一步的了解,能够把《编译原理》中有穷自动机的理论知识应用于实验中。
通过这次语义分析的实验,我对高级语言的学习有了更深的认识,了解得更透彻我了解了高级语言转化为目标代码或汇编指令的过程。
对今后的学习将起很大的作用,对以后的编程有很大的帮助。
本次实验通过查找书本和网上搜索了解了大致地实验思路,虽然只是完成了一个简单的程序,但在组织程序结构中学到了很多,加深了对编译原理词法编译器的理解,掌握了编译程序的实现方法和技术,巩固了前面所学的相关理论知识。
虽然完成了本次课程设计,但代码还有一些优化的地方,因为可能出现的符号均是事先例举出来,并不能包含所有可能的符号,有一定的局限性,今后会多多锻炼语句的优化方面。
参考资料:
[1]王汝传.编译技术原理及其实现方法.成都:
成都科技大学出版社,1998.
[2]吕映芝等编著.编译原理.北京:
清华大学出版社,1998.
[3]陈火旺等编著.程序设计语言编译原理.北京:
国防工业出版社,2000.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法 分析 程序 构造