




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生学号01210实验课成绩武汉理工大学学 生 实 验 报 告 书实验课程名称 编译原理 开 课 学 院 计算机科学与技术学院 指导老师姓名 何九周 学 生 姓 名 吴明 学生专业班级 软件 2012 2013 学年 第 一 学期实验课程名称: 编译原理 实验项目名称单词的词法分析程序设计实验成绩实验者吴明专业班级软件组别同组者实验日期 年 月 日第一部分:实验分析与设计(可加页)一、 实验内容描述(问题域描述) 1、实验目的: 设计,编制并调试一个词法分析程序,加深对词法分析原理的理解。 2、实验要求: 在上机前应认真做好各种准备工作,熟悉机器的操作系统和语言的集成环境,独立完成算法编制和程序代码的编写;上机时应随带有关的高级语言教材或参考书;要学会程序调试与纠错;每次实验后要交实验报告。二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) 在扫描源程序字符串时,一旦识别出关键字、分隔符、标识符、无符号常数中之一,即以单词形式(各类单词均采用相同的结构,即二元式编码形式)输出。每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直至整个源程序全部扫描完毕,并形成相应的单词串形式的源程序。代码如下#include #includeusing namespace std;#define max 22char ch = ;string key15=begin,end,if,then,else,while,write,read,do, call,const,char,until,procedure,repeat;int iskey(string c) /关键字判断 int i; for(i=0;imax;i+) if(pare(c)=0) return 1; return 0;int isletter(char c) /判断是否为字母 if(c=a)|(c=a) return 1; else return 0;int isdigit(char c) /判断是否为数字 if(c=0&c=9) return 1; else return 0;void analyse(file *fpin) string arr=; while(ch=fgetc(fpin)!=eof) arr=; if(ch= |ch=t|ch=n) else if(isletter(ch) while(isletter(ch)|isdigit(ch) if(ch=a) ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1l,seek_cur); if (iskey(arr)coutarrt$关键字endl; else coutarrt$普通标识符endl; else if(isdigit(ch) while(isdigit(ch)|ch=.&isdigit(fgetc(fpin) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1l,seek_cur); coutarrt$无符号实数endl; else switch(ch) case+: case- : case* : case= : case/ :coutcht$运算符endl;break; case( : case) : case : case : case; : case. : case, : case : case :coutcht$界符endl;break; case: :ch=fgetc(fpin); if(ch=) cout:=t$运算符endl; else cout=t$运算符 :ch=fgetc(fpin); if(ch=) cout=t$运算符)coutt$输入控制符endl; else coutt$运算符endl; fseek(fpin,-1l,seek_cur); break; case :ch=fgetc(fpin); if(ch=)cout=t$运算符endl; else if(ch=)coutt$输出控制符) coutt$运算符endl; elsecoutt$运算符endl; fseek(fpin,-1l,seek_cur); break; default : coutcht$无法识别字符endl; void main() char in_fn30; file * fpin; coutin_fn; if(fpin=fopen(in_fn,r)!=null) break; else cout文件路径错误!请输入源文件名(包括路径和后缀名):; coutn*分析如下*e+e, e-e*e, e-(e), e-i ;/存放产生式 ; top1=0;top2=0;top3=0;top=0;topn=0; a0=0;y=a0;b0=#; count=0;z=0; cout文法ge:endl; coutt(1) e:=e+eendl; coutt(2) e:=e*eendl; coutt(3) e:=(e)|iendl; cout文法ge合法句子举例: i+i*iendl; cout*endl; cout请输入符号串:str; l = strlen(str); str l = #; for(i=l+1;i10;i+) stri=null; coutendltt符号串str 分析过程如下:endl; cout-endl; cout 步骤 t 状态栈 t t 符号栈 t t 输入串 t t action tgotoendl; do y=z;m=0;n=0; /y,z指向状态栈栈顶 g=top;j=0; x=strtop; count+; coutcount t; while(m=top1) /输出状态栈 coutam; m=m+1; couttt; while(n=top2) /输出符号栈 coutbn; n=n+1; couttt; strtop-1 = ; coutstr; /输出输入串 couttt; while(x!=vtj&j=6) j+; /vt6=+,*,i,(,),#存放终结符 if(j=6&x!=vtj) coutendl-endl; coutendl输入字符串不是该文法的一个句子!endl; coutendl按任意数字或字母键,回车退出!i; return; if(actionyj=null)coutendl-endl; coutendl输入字符串不是该文法的一个句子!endl; coutendl按任意数字或字母键,回车退出!i; return; else /couty=yj=j actionyj; strcpy(copy,actionyj); if(copy0=s) /处理移进 z=copy1-0; top1=top1+1; top2=top2+1; atop1=z; /a10状态栈 btop2=x; /b10符号栈 x=strtop top=top+1; i=0; while(copyi!=#) coutcopyi; i+; coutendl; /couty=yj=j actionyj; if(copy0=r) /处理归约 i=0; while(copyi!=#) coute+e#,e-e*e#,e-(e)#,e-i#存放产生式 /while(copy10!=vn0) k+;/vn1=e存放非终结符 l=strlen(lrh); top1=top1-l+3; y=atop1; /couttop1=top1; /y=h-1; p=goto1y; top2=top2-l+4; top1=top1+1; atop1=p; btop2=copy10; z=p; coutt; coutpendl; while(actionyj!=acc); coutaccendl;coutendl-endl; coutendl输入字符串是该文法的一个句子!endl; cout中间代码的逆波兰式如下:endl; for(i=0;i10;i+) if(nii=1) couteee+=endl; if(nii=2) couteee*=endl; if(nii=3) coutee()=endl; if(nii=4) coutie=endl; coutendl按任意数字或字母键,回车退出!i;|第二部分:实验调试与结果分析(可加页)一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)输入语句i=i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年上半年上海市卫生健康技术评价中心工作人员公开招聘考前自测高频考点模拟试题及答案详解(易错题)
- 2025年4月广东深圳小学光明学校曙光校区、狮山校区赴济南定点面向2025年应届毕业生招聘教师11人模拟试卷含答案详解
- 安全培训教师体会课件
- 2025年福建省莆田市秀屿区上塘珠宝城实业有限公司招聘1人考前自测高频考点模拟试题及答案详解(典优)
- 2025年合肥复兴控股集团第一批人员招聘27人考前自测高频考点模拟试题及1套完整答案详解
- 安全培训教员资质课件
- 广播电台培训课件
- 2025贵州黔西南州望谟县消防救援大队招聘政府专职消防文员1人模拟试卷附答案详解
- Human-ZIC1-mRNA-生命科学试剂-MCE
- Heptanamide-Enanthamide-生命科学试剂-MCE
- 建筑设计数字化协同工作方案
- 新入行员工安全教育培训课件
- 原生家庭探索课件
- GB/T 42062-2022医疗器械风险管理对医疗器械的应用
- GB/T 30106-2013钟表防水手表
- 多模态语篇分析课件
- 《卫生检验与检疫学导论》教学大纲
- 前厅服务与管理课程标准
- 常见药物之间的配伍禁忌课件
- DB32-T 4357-2022 建筑工程施工机械安装质量检验规程
- 【外研社Unipus】新探索(基础级)读写U1课件-AE1
评论
0/150
提交评论