递归下降语法分析器报告.doc_第1页
递归下降语法分析器报告.doc_第2页
递归下降语法分析器报告.doc_第3页
递归下降语法分析器报告.doc_第4页
递归下降语法分析器报告.doc_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

_学 生 实 验 报 告(理工类)课程名称: 编译原理 专业班级: 计算机科学与技术(1) 学生学号: 0905101005 学生姓名: 周浩 所属院部: 信息技术学院 指导教师: 20 11 20 12 学年 第 2 学期 金陵科技学院教务处制实验报告书写要求实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。实验报告书写说明实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。填写注意事项(1)细致观察,及时、准确、如实记录。(2)准确说明,层次清晰。(3)尽量采用专用术语来说明事物。(4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。实验报告批改说明实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。实验报告装订要求实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。实验项目名称: 语法分析程序 实验学时: 6 同组学生姓名: 无 实验地点: A203 实验日期: 实验成绩: 批改教师: 批改时间: 一、实验目的和要求1、目的 通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。 2、要求 选择最有代表性的语法分析方法,如算符优先法、递归子程序法和LR分析法;选择对各种常见程序语言都用的语法结构,如赋值语句,特别是表达式,作为分析对象,并且与所选语法分析方法要比较贴切。二、实验仪器和设备硬件:PC机软件:c+三、实验过程1、实验内容算术表达式的文法可以是(可以根据需要适当改变): EE+E|E-E|E*E|E/E|(E)|i根据递归下降分析法或预测分析法,对表达式进行语法分析,判断一个表达式是否正确。2、实验步骤(1) 准备:1.阅读课本有关章节,确定算术表达式的文法;(设计出预测分析表);2.考虑好设计方案;3.设计出模块结构、测试数据,初步编制好程序。(2) 上机调试,发现错误,分析错误,再修改完善。教师根据学生的设计方案与学生进行探讨,以修改方案和代码。(3) 改造后的文法:EE+T|E-T|T TT*F|T/F|FFFP|PPc|id|(E)3、实验设计思想() 主程序示意图如图1所示。() 递归下降分析程序示意图如图2所示。() 语句串分析过程示意图如图3所示。() statement语句分析函数流程如图4,5,6,所示。图1递归下降分析程序示意图图2语句串分析示意图是否是调用scaner是否:=?调用scaner是否标识?出错处理调用expression函数 图3statement语句分析函数示意图否出错处理调用term函数调用scaner是否+,-?调用term函数是 图4 expression表达式分析函数示意图否是调用factor函数调用scaner是否*,/?调用factor函数出错处理图5term分析函数示意图图6 factor分析过程示意图4、实验程序介绍(1)程序结构分析开始实例化对象输入符号串进行语法分析递归调用程序判断文法输出,结束(2)程序总体流程图或结构图(3)程序函数块简介1. 语法分析的主程序void main()p=0; printf(*语法分析程序*n);printf(请输入源程序:n);do scanf(%c,&ch); progp+=ch;while(ch!=#);p=0;scaner(); lrparser();printf(语法分析结束!n);2. 编写扫描子程序void lrparser()if (syn=1) /begin scaner(); yucu(); if (syn=6) /end scaner(); if (syn=0 & kk=0) printf(success n); else if(kk!=1) printf(error,lose end ! n); kk=1; else printf(error,lose begin ! n); kk=1; return;void yucu()statement();while(syn=26) /; scaner(); statement();return;void statement()if (syn=10) scaner(); if (syn=18) scaner(); expression(); else printf(error!); kk=1; else printf(error!); kk=1;return;void expression()term();while(syn=13 | syn=14) scaner(); term();return;void term()factor();while(syn=15 | syn=16) scaner(); factor();return;void factor()if(syn=10 | syn=11) scaner(); /为标识符或整常数时,读下一个单词符号else if(syn=27) scaner(); expression(); if(syn=28) scaner(); else printf( ) 错误n); kk=1; else printf(表达式错误n); kk=1;return;四、实验结果与分析程序输入/输出示例:如参考C语言的运算符。输入如下表达式(以分号为结束)和输出结果:(a)10;输出:正确此时程序运行结果如下图:(b)1+2;输出:正确此时程序运行结果如下图:(c)(1+2)/3+4-(5+6/7);输出:正确此时程序运行结果如下图:(d)(1-2)/3+4输出:错误此时程序运行结果如下图:(e)1+2-3+(*4/5)输出:错误此时程序运行结果如下图:(f)(1+2)/3+4-(5+6/7)-23;输出:正确此时程序运行结果如下图:(g)(1+2)/3+4-(5+6/7)-;输出:正确此时程序运行结果如下图:五、实验总结通过本次实验基本掌握了语法分析的原理和递归下降子程序分析方法,并且能将学到的知识学以致用,提高了对代码的分析能力,掌握了递归下降语法的构造,对自上再而下的语法分析模式有了更好的认识和理解。通过编写程序进一步复习巩固了C#语言的相关

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论