版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理试验指导书合肥学院计算机科学与技术系试验一词法分析程序后跳过错误部分接着显示)词法分析器的功能是输入源程序,输出单词符号。词法分析<下划线><字母数字串>|e<数字串>-><数字><数字串>|e单词种别码为1。其他的都识别为标识符;单词种别码为2。常数为无符号整形数;单词种别码为3。运算符包括:+、-、*、/、=、>、<、>=、<=、!=;单词种别码为4。分隔符包括:,、;、{、}、(、);单词种别码为5。以上为参考,具体可自行增删。试验二递归子程序方法依据某一文法编制调试递归下降分析程序,以便对随意输入的4、改造文法:消退二义性、消退左递归、提取左因子,推断是否为LL(1)为G的每个非终结符号U构造一个递归过程,不妨命名为U。(1)对于每个非终结符号U->ul|u2|…|unif(ch可能是ul字的开头)处理ul的程序部分;elseif(ch可能是u2字的开头)处理u2的程序部分;(3)假如右部为空,则不处理。(4)对于右部中的每个符号xi①假如xi为终结符号:{NextChar();②假如xi为非终结符号,干脆调用相应的过程xi()(一)打算:(二)上课上机:(三)程序要求:输出的格式如下:(1)递归下降分析程序,编制人:姓名,学号,班级(2)输入一以#结束的符号串(包括+—*/()i#):在此位置输入符号串例如备注:输入一符号串如i+i*#,要求输出为“非法的符号串”。引用也要变更。留1.表达式中允许运用运算符(+-*/)、分割符(括号)、字符I,结束符#;2.假如遇到错误的表达式,应输出错误提示信息(该信息越具体越好);3.对学有余力的同学,可以具体的输出推导的过程,即具体列出每一步运用的产依据某一文法编制调试LL(1)分析程序,以便对随意输入的符号串进行分析。加深对预2.初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);4.利用LL(1)分析算法进行表达式处理:依据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,假如遇到错误则显示错误信息。1.LL(1)分析法的功能LL(1)分析法的功能是利用LL(1)限制程序依据显示栈栈顶内容、向前看符号以及LL(1)分析表,对输入符号串自上而下的分析过程。改造文法:消退二义性、消退左递归、提取左因子,推断是否为LL(1)文法,3.LL(1)分析法试验设计思想(二)上课上机:(三)程序要求:对下列文法,用LL(1)分析法对随意输入的符号串进行分析:(2)输入一以#结束的符号串(包括+—*/()i#):在此位置输入符号串EQ\*jc3\*hps4\o\al(\s\up4(),)写明匹配的终结符;如分析异样出错则写为“分析出错”;若胜利结束则写为“分析1.表达式中允许运用运算符(+-*/)、分割符(括号)、字符i,结束符#;2.假如遇到错误的表达式,应输出错误提示信息(该信息越具体越好);1.算术表达式的文法可以是(你可以依据须要适当变更):[3]将此运算符θ1与OPTR栈顶元素02进行比较,即查上表,若θ1>02,则:01若θ1=02,如θ1为;,则分析胜利,否则OPTR栈顶元素出栈,并转[2]t,进行运算r=atb(t为运算符),并将结果r存入栈OPND后转[3]。若θ1和02之间无优先关系,则报错。程序思路(仅供参考):2.模块结构:(1)初始化:设立算符优先关系表(或优先函数)、初始化变量空间(包括堆栈、结构体、数组、临时变量等);(2)限制部分:将一个表达式从文件中读出;(3)词法分析:将表达式分割成单词序列;(4)利用算符优先文法进行表达式处理:依据算符优先关系表(或优先函数)对表达式单词序列进行堆栈(或其他)操作,得到并保存四元组,如参考C语言的运算符。输入如下表达式(以分号为结束)和输出结果:留意:1.为降低难度,表达式中不含变量(只含无符号整数);2.假如遇到错误的表达式,应输出错误提示信息(该信息越具体越好);浮点表示,但要留意不要被0除。构造LR(1)分析程序,利用它进行语法分析,推断给出的符号串是否为该文法识别的句子,了解LR(K)分析方法是严格的从左向右扫描,和自底向上的语法分析方法。2.初始化:设立LR(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);4.利用LR(1)分析算法进行表达式处理:依据LR(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,假如遇到错误则显示错误信息。析表将不同,分析表又可以分为动作表(ACTION)和状态转换(GOTO)表两个部分,它们都输入缓冲区输入缓冲区介LR总控程序序列规定当栈顶状态为i,遇到当前文法符号为X时应转向状态j,X为终结符或非终结符。ACTION[i,a]规定了栈顶状态为i时遇到输入符号a应执行。动作有四种可能:(1)移进:action[i,a]=Sj:状态j移入到状态栈,把a移入到文法符号栈,其中i,j中有A->B的产生式,若B的长度为R(即|B|=R),则从状态栈和文法符号栈中自顶向下去掉R个符号,即栈指针SP减去R,并把A移入文法符号栈内,j=GOTO[i,A]移进状态(3)接受acc:当归约到文法符号栈中只剩文法的起先符号S时,并且输入符号串已结束即(一)打算:(二)上课上机:留意:1.表达式中允许运用运算符(+-*/)、分割符(括号)、字符i,结束符#;4.利用算符优先分析算法进行表达式处理:依据算符优先分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,假如遇到错误则显示错误信息。(一)打算:(三)程序要求:(4)逆波兰式28&68+2*计算结果为192备注:(1)在生成的逆波兰式中假如两个数相连则用&分隔,如28和68,中间用&分隔;留意:1.表达式中允许运用运算符(+-*/)、分割符(括号)、数字,结束符#;2.假如遇到错误的表达式,应输出错误提示信息(该信息越具体越好);(一)选题:通过平常积累,找到适合于自己的应用或某种软件功能,该应用能利用编译原(二)分析:选好题目后,分析该题目的应用性,可用到编译原理的哪些理论?对它们进行软件供应哪些功能?软件有什么用?界面怎样?怎样运用该软件?对输入数据的格式有什么要求?用什么语言开发?怎样测试该软件?该软件开发的进度如何支配?写出(三)设计:对软件划分功能模块,将模块细化,设计出数据存放格式,写出各模块((四)上机(修改设计/编码/调试/测试):(五)留意事项:期的是否相吻合(假如不吻合,实际输出什么?可能错误的缘由?检查源代码或设计进行查(六)上交:1.程序源代码(打包上传,文件名中包含姓名);2.一组较完备的测试数据(存在一个文本文件中上传);附试验报告范例2、依据已建构的模块,写出各个模块的相应程序代码chargetsym()//从缓冲区中取一个单词boolflag=false;/intk=-1;//表示取出的字符放在单CType='0';//预先定义的取出的单词的类型Lasttype='0';//初始化从前的类型,此变量为推断正负数用while(ch<=32&if(ch>='a'&&ch<='z'||ch>='A'&&ch<='{while(true)//取出的单词长度不超过WMaxlen,假如超过,则其后的字符无效{if((++k)<WMaxlen)//(++k)为了使取出的单词最长为Maxlen{束if(!(ch>='a'&&ch<='z'||for(inti=0;i<KEY_No;i++)//用来推断取出的当前单词是不是关键词if(strcmp(Word,KEY[i])==0){if(flag)CType='1';//假如是关键词,则把此单词的类型定义为1型elseCType=’2';//否则是标识符,其类型为2}elseif(ch>='0'&&ch<='9')//{while(true)//假如是数字,则一干脆受,且定义它的类型为3{else{CType='3';break;}//不是数字则跳出循环//假如以字母开头,且长度不超过WMaxlen,且下面跟有字母,则此整数非法,输出类型为8,在主程序中输出出错信息{//取这个非法整数的单词,其中可包含英文字母和数字while(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'||ch}if(k>WMaxlen)//假如长度大于取出单词定义的最大长度,则返回类型为8,在主程序中打出出错信息elseCType=Errtype;//否则返回类型7,在主程序出错,并明确写出此单词的具体内容elseif(ch=='+'||ch=='-'||ch=='*'||ch=='/')//取出是运算符号的单词{if(ch=='+'||ch=='-')//假如是+号或者是-号,则还要推断是不是正负数if(Lasttype=='6')//推断其取出的当前字母的前一个单词是6号类型的,即是<、>、{CType='3';//假如正负整数,则干脆返回类型为3,则表示此单词为整数型为4elseif(ch=='>'||ch=='<'||ch=='='||ch=='!’)//取出运算符的另几类,即<、{Word[++k]=ch;Fbuffer=scanfor(inti=if(strcmp(Sign[i],Word)==0)}elseif(ch==',’||ch==';'||ch=='{'||ch=='}'||ch=='('||ch==')')//
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教学楼室内装修协议模板
- 家庭护理保姆服务合同样本
- 办公空间色彩搭配合同范本
- 咖啡店店员招聘协议书
- 城市文化中心地暖工程承包合同
- 环境保护企业消防整改施工合同
- 化工厂彩钢板翻新合同
- 劳动报酬零花钱协议
- 消防工程发包合同
- 常州乒乓球馆租赁合同
- 工程质量检测论文范文10篇
- 【真题解析】2023年2月26日河南省直遴选笔试真题(考生回忆版)
- 《企业采购成本控制现状、问题及对策研究-以伊利乳业集团为例(论文)10000字》
- 中华医学会杂志社作者贡献声明
- 国开电大本科《人文英语4》机考总题库珍藏版
- 腮腺疾病围手术期护理查房
- 学生假期安全承诺书200字(5篇)
- 血液透析个案护理两篇
- GB/T 37814-2019综采综放工作面远距离供电系统技术规范
- 高中通用技术《技术试验及其方法》公开课课件
- PSSR试车前的安全检查
评论
0/150
提交评论