




已阅读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年工业化制作流程优化与质量控制技术前沿动态报告
- 林地土壤肥力生态循环与服务实践探究
- 双方签定协议书
- 2024-2025学年八年级数学下册期末培优卷(北师大版)含答案
- 新能源汽车生产线下线EOL测试和电检诊断测试技术方案
- ASM AD830改机操作规范
- 第四篇 皮肤科疾病临床评分表
- 《用Python实现垃圾邮件过滤的核心代码程序》
- GB/T 3452.2-1987O形橡胶密封圈外观质量检验标准
- GB/T 1690-1992硫化橡胶耐液体试验方法
- 叉车隐患排查情况记录表
- he及roma用于卵巢癌全程管理省肿瘤雷旦生
- 小儿呼吸机相关知识详解课件
评论
0/150
提交评论