词法分析编译原理实验报告_昆明理工大学
昆明理工大学信息工程与自动化学院学生实验报告
( 2012 —2013 学年 第 上 学期 )
课程名称:编译原理 开课实验室: 444 2012年 11 月 23 日
一、 实验目的及内容
实验目的: 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 实验内容: 输入:源程序文件
输出:二元组(syn,token或sum)构成的序列(文件),其中:syn为单词种别码,token为存放的单词自身字符串,sum为整型常量。
1.关键字:main if else int while char 均为小写。 2.专用符号:= + - * / < <= > >= == != ; , { } ( ) 3.其他标记ID和NUM通过以下正则式定义: ID: letter(letter|digit)* NUM: digitdigit*
letter→a|b|c|d…|z|A|B|C…|Z digit →0|1|2|3|4|5|6|7|8|9
4.空格由空白、制表符、换行符组成,用来分隔ID、NUM、专用符号与关键字,词法分析阶段常被忽略。
5.各种单词符号对应的种别码如下表:
二、实验原理及基本技术路线图(方框原理图或程序流程图)
三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及VISUAL C++6.0软件
四、实验方法、步骤(或:程序代码或操作过程)
#include <stdio.h> #include <string.h> char prog[80],token[8],ch; int syn,p,m,n,sum;
char *key[6]={"main","int","char","if","else","while"}; scaner(); main() { p=0;
printf("词法分析\n请输入字串符,以&号结束:\n\n"); do{
scanf("%c",&ch); prog[p++]=ch; }while(ch!='&'); p=0; do{
scaner(); switch(syn)
{case 11:printf("( %-10d%5d )\n",sum,syn); break;
case -1:printf(""); getchar(); break;
default: printf("( %-10s%5d )\n",token,syn); break; }
}while(syn!=0); getchar(); return syn,sum; }
scaner() { sum=0;
for(m=0;m<8;m++)token[m++]=NULL; ch=prog[p++]; m=0;
while((ch==' ')||(ch=='\n'))ch=prog[p++];
if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))
{ while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))
{token[m++]=ch; ch=prog[p++]; } p--; syn=10;
for(n=0;n<6;n++)
if(strcmp(token,key[n])==0) { syn=n+1; break; } }
else if((ch>='0')&&(ch<='9')) { while((ch>='0')&&(ch<='9')) { sum=sum*10+ch-'0'; ch=prog[p++]; } p--; syn=20; }
else switch(ch)
{ case '<':token[m++]=ch; ch=prog[p++]; if(ch=='=')
{ syn=35; token[m++]=ch; } else
{ syn=33; p--; } break;
case '>':token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=34; token[m++]=ch; } else { syn=32; p--; } break;
case '+': token[m++]=ch; ch=prog[p++]; if(ch=='+') { syn=17; token[m++]=ch; } else { syn=22; p--; } break;
case '-':syn=23;
token[m++]=ch;
case '!':ch=prog[p++]; if(ch=='=') { syn=21; token[m++]=ch; } else { syn=37; p--; } break;
case '=':token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=36; token[m++]=ch; } else { syn=21; p--; } break; case '*': syn=24; token[m++]=ch; break;
case '/': syn=25; token[m++]=ch; break; case '(': syn=26; token[m++]=ch; break; case ')': syn=27; token[m++]=ch; break; case '{': syn=28; token[m++]=ch; break; case '}': syn=29; token[m++]=ch; break; case ';': syn=31; token[m++]=ch; break; case '@': syn=0; token[m++]=ch; break; default: syn=-1; break; }
token[m++]='\0'; return syn; }
五、实验过程原始记录( 测试数据、图表、计算等)
六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲线图时必
须用计算纸或程序运行结果、改进、收获)
刚开始时感觉很难,好像根本就编不成,所以甚至有些退缩,而之前上课时,老师讲这里时,好多同学就已经可以跟着老师的节奏回答了,自己自然感觉很急,一下课就跑去自习室好好看了看,可能是因为老师后来又讲了一遍的缘故吧,发现也并不是那么难了,按照严教师给的代码试着做了做,最后也就完成了任务。
说明对于困难我确实经常不自主地退缩,结果是受到影响,我不想这种事再屡次发生了,今后一定更加勇敢的去面对它。
注:教师必须按照上述各项内容严格要求,认真批改和评定学生成绩。
…… 此处隐藏:826字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




