编译原理实验报告2.doc
上传人:sy****28 上传时间:2024-09-10 格式:DOC 页数:17 大小:489KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

编译原理实验报告2.doc

编译原理实验报告2.doc

预览

免费试读已结束,剩余 7 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

太原理工大学现代科技学院编译原理B课程实验报告专业班级计算机10-2学号2010101600姓名李芳芳指导教师崔冬华实验一:无符号数的词法分析程序实验目的和要求目的培养学生初步掌握编译原理实验的技能验证所学理论、巩固所学知识并加深理解对学生进行实验研究的基本训练要求从键盘上输入一串字符(包括字母、数字等),编写程序识别出其中的无符号数。实验内容和原理掌握词法分析的基本思想,并用高级语言编写无符号数(包括整数和实数)的词法分析程序。无符号数文法规则定义如下:<无符号数>→<无符号实数>|<无符号整数><无符号实数>→<无符号整数>.<数字串>[<比例因子>]<无符号整数>E<比例因子><比例因子>→<有符号整数><有符号整数>→[+|-]<无符号整数><无符号整数>→<数字串><数字串>→<数字>{<数字>}<数字>→0123……9读无符号数的程序流程图见下图主要仪器设备C++编程环境、DevC++软件操作方法与实验步骤编辑代码如下:#include<iostream>usingnamespacestd;//使用标准命名空间#defineM101//定义可输入的字符个数#defineUNSIGNEDNUMBER1//无符号数#definePLUS2//加号#defineSUBTRACT3//减号#defineMULTIPLY4//乘号#defineDIVIDE5//除号#defineLEFTBRACKET6//左括号#defineRIGHTBRACKET7//右括号#defineINEFFICACIOUSLABEL8charpause;classAccidenceAnalysis//定义词法分析类{private:chartestStr[M],*p;//私有数据public:AccidenceAnalysis();//构造函数~AccidenceAnalysis();//析构函数voidInputStr();//输入函数voidOutput(inta,char*p1,char*p2);intIsAcceptantCharacter(char*p);intIsOperator(char*p);intIsUnsignedNum(char*p);voidAbnormityExamine(chara[]);voidIdentifyOperator(char*p);voidAssortIdentify();voidstaticScroll();//输出条形voidstaticInstruction();//指导说明函数voidstaticStartAccidenceAnalysis();voidstaticStartSystem();};AccidenceAnalysis::AccidenceAnalysis(){inti;for(i=0;i<M;i++)testStr[i]='\0';p=&testStr[0];//指针P指向字符数组首元素}AccidenceAnalysis::~AccidenceAnalysis(){}voidAccidenceAnalysis::InputStr(){system("cls");Scroll();cout<<"\t输入待分析单词["<<M-1<<"字符以内]:";charch;inti=0;while((ch=cin.get())!='\n'){testStr[i]=ch;i++;}AbnormityExamine(testStr);}voidAccidenceAnalysis::AbnormityExamine(chara[]){system("cls");Scroll();inti=0,j=0,label=0;char*ptr1,*ptr2,Str[3*M];ptr1=a;ptr2=a;while(*ptr2!='\0'){j++;if(!IsAcceptantCharacter(ptr2)){cout<<"\t您输入的第"<<j<<"个字符\t"<<*ptr2<<"\t非字符集字符!"\<<"被跳过."<<endl;Str[i]='[';i++;Str[i]=*ptr2;i++;Str[i]=']';i++;ptr2++;label