- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《编译技术》实验报告:词法分析程序
《编译技术》实验报告
实验名称:词法分析程序
姓名:和春辰
学号:U200818016
班级:软件工程0801班
指导老师:胡福林
2010年10月21日
目录
一、 实验题目 3
二、 实验目的 3
三、 实验要求 4
四、 实验步骤 4
基本设计思路 4
流程框图 5
算法设计 6
函数相关说明 6
输入与输出 8
程序运行结果 9
五、 实验方案设计实现 9
六、 实验程序亮点描述 10
七、 实验程序使用说明 10
八、 实验心得体会 10
九、 源程序清单 10
实验题目
设计、编制、调试一个识别一简单语言单词的词法分析程序。程序能够识别基本字、标识符、无符号整数、浮点数、运算符和界符)。单词符号及种别表如下:
单词符号 种别编码 begin 1 if 2 then 3 while 4 do 5 end 6 l(l|d)* 10 dd* 11 + 13 - 14 * 15 / 16 : 17 := 18 20 21 = 22 23 = 24 = 25 ; 26 ( 27 ) 28 # 0
实验目的
设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
实验要求
词法分析程序需具备词法分析的功能:
输入:所给文法的源程序字符串。(字符串以“#”号结束)
输出:二元组(syn,token或sum)构成的序列。
其中:syn为单词种别码;
token为存放的单词自身字符串;
sum为整型常数。
例如:对源程序begin x:=9: if x9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下序列:
(1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)……
实验步骤
基本设计思路
基本字作为一类特殊的标识符来处理:识别出标识符,差基本字表,给出相应种别码。基本字表置初值:char *rwtab[6]={begin,if,then,while,do,end};(字符指针的数组)
识别无符号整数是将数字串转换为无符号整数。我们在getchar()的时候是把数字当做字符从外部输出读取的。将数字串345#转换为整数:
(3*10+4)*10+5=345送到sum中
程序主要由2个函数组成,主函数main()和扫描子函数scanner()。扫描程序每次读取1个独立意义的单词符号,并判断单词类型。主程序做相应处理后做控制台输出。
流程框图
图 1主程序
图 2扫描子程序
算法设计
词法分析程序所用的较为重要的全局变量和需调用的函数如下:
ch字符变量,存放当前读进的源程序字符。
token[8]字符数组,存放构成单词符号的字符串。
prog[80]字符数组,存放所有用户输入的字符。
syn整数,存放当前单词的种别码。
sum双精度浮点型变量,存放无符号整数,或者浮点数。
isDecimal整数,是否为浮点数。isDecimal为1,则为浮点数。
decimal双精度浮点型变量(double),浮点数的小数部分。
isExp整数,是否为指数形式表示的浮点数(即是否存在符号E或者e)。isExp为1,则为指数形式。
index整数,指数形式的幂。
isNegative整数,是否为负数幂。isNegative为1,则为负数幂,如123E-2。
scanner()扫描子程序。
getchar()从控制台读取一个字符数据。
double pow(double x,double y),计算x的y次幂。
int strcmp(char *str1,char #str2),字符串比较。
函数相关说明
接收用户输入:getchar()和do…while循环的组合
do{
ch=getchar();
prog[p++]=ch;
}while(ch!=#); //输入以#号键结束
输出到控制台:do…while循环中,扫描出单词后(扫描程序还会判断种别码syn)输出。
do{
scanner(); //扫描,单词
switch(syn)
{
case 11:
if(isDecimal==0)
{
printf((%2d,%8d)\n,syn,(int)sum);
break;
}
else if(isExp==1)
{
printf((%2d,%10.5e)\n,syn,sum);
isExp=0;
isDecimal=0;
break;
}
else if(isDecimal==1)
{
printf((%2d,%8.4f)\n,syn,sum);
您可能关注的文档
最近下载
- GB 50689-2011 通信局(站)防雷与接地工程设计规范.docx VIP
- 麻醉科PDCA提高术中主动保温率.pptx VIP
- 日本留考(EJU)日本语真题平成22年第2回听力原文.pdf VIP
- 2026届高考语文复习:“沉默的智者与无脑的喷子”漫画作文训练与指导.docx
- 山洪灾害预警预报技术_任波 李卫平 黄立志 著_2018_5.pdf
- 澄清函、中标成交通知书(优质模板).docx VIP
- 电信变更操作人员考试题.docx
- 《抗菌药物临床合理应用》知识培训试题及答案.docx VIP
- 颞下颌关节第八版讲义.ppt VIP
- 2024年山东省巨野县人民医院公开招聘护理工作人员试题带答案详解.docx VIP
文档评论(0)