




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
山东建筑大学计算机科学与技术学院山东建筑大学计算机科学与技术学院 课程设计说明书课程设计说明书 题 目 对 PL 0 语言及其编译器进行扩充和修改 实现增加数据类型的功能 课 程 编译原理课程设计 院 部 计算机科学与技术学院 专 业 计算机科学与技术 班 级 计科 学生姓名 学 号 指导教师 完成日期 2014 年 7 月 8 日 山东建筑大学计算机学院课程设计说明书 I 目目 录录 课程设计任务书 II 对 PL 0 语言及其编译器进行扩充和修改 实现增加数据类型的功能 3 一 问题描述 3 二 基本要求 4 三 算法思想 4 四 数据结构 4 五 模块划分 5 六 源程序 5 七 测试数据 15 八 测试情况 17 结 论 18 参考文献 19 课程设计指导教师评语 20 II 山东建筑大学计算机科学与技术学院山东建筑大学计算机科学与技术学院 课程设计任务书课程设计任务书 指导教师 签字 教研室主任 签字 设计题目 对 PL 0 语言及其编译器进行扩充和修改 实现增加数据类型的功能 已知技术参 数和设计要 求 PL 0 程序设计语言是一个较简单的语言 它以赋值语句为基础 构造 概念有顺序 条件和重复 循环 三种 PL 0 有子程序概念 包括过程定 义 可以嵌套 与调用且有局部变量说明 PL 0 中唯一的数据类型是整型 可以用来说明该类型的常量和变量 当然 PL 0 也具有通常的算术运算和关 系运算 通过读懂源程序 全面掌握编译原理的基本实现过程 对现存的 PL 0 编译程序做一些修改或扩充 设计内 容与步 骤 通过读懂源程序 全面掌握编译原理的基本实现过程 扩充 PL 0 增加识别字符型数据类型和实型数据类型的功能 增加的数据类型的定义如下 D integer id char id double id 设计工作计 划与进度安 排 1 4 进行完整的编译程序全过程的理解 5 12 根据源程序 理解整个编译器的编写中涉及到的全局变量及基本函 数的意义 13 20 在读懂全程序的基础上 进行扩充功能 并测试 21 24 撰写课程设计报告书 设计考核要 求 设计考核方法 课程设计总成绩 算法实现 30 课程设计说明书 50 平时考 勤 20 设计考核要求 1 规范的课程设计说明书 2 所设计的算法源代码 山东建筑大学计算机学院课程设计说明书 3 对对 PL 0PL 0 语言及其编译器进行扩充和修改语言及其编译器进行扩充和修改 实现增加数据类实现增加数据类 型的功能型的功能 一 问题描述一 问题描述 PL 0 程序设计语言是一个较简单的语言 它以赋值语句为基础 构造概念有顺序 条 件和重复 循环 三种 PL 0 有子程序概念 包括过程定义 可以嵌套 与调用且有局部 变量说明 PL 0 中唯一的数据类型是整型 可以用来说明该类型的常量和变量 当然 PL 0 也具有通常的算术运算和关系运算 PL 0 语言的 BNF 文法如下所示 变量说明部分 CONST VAR PROCEDURE BEGIN END ODD IFTHEN CALL WHILEDO a b X Y Z 0 1 2 8 9 对现存的 PL 0 编译程序做如下修改或扩充 1 扩充识别注释功能 注释由 和 包含 不允许嵌套 2 识别对 else 子句进行处理的功能 IFTHEN ELSE 山东建筑大学计算机学院课程设计说明书 4 二 基本要求二 基本要求 设计目的 掌握 PL 0 语言编译器实现的基本原理和实现方法 能在理解其实现原理的方法的基础 上进行适当的扩充 使其功能更强大 设计要求 在理解源代码的基础上 根据文法的要求 采用 C 语言扩充算法 完成扩充识别注释 功能 和识别对 else 子句进行处理的功能 3 算法思想算法思想 增加数据类型的功能 因子语法描述该为 因子 EBNF 文法为 4 数据结构数据结构 define norw 16 关键字的个数 define txmax 100 名字表的容量 define nmax 14 数字的最大位数 define al 10 符号的最大长度 define amax 2047 地址上界 define levmax 3 最大允许的嵌套声明层数 define cxmax 200 最多的虚拟机代码数 enum symbol 枚举类型 nul 0 ident 1 number 2 plus 3 minus 4 ident integer char double 表达式 number 山东建筑大学计算机学院课程设计说明书 5 times 5 依次类推 procsym 31 nul ident number 下面的表示的是系统的算数运算符以及逻辑运算符 知道意思就可以 plus minus times 相乘的意思 slash oddsym eql neq lss leq gtr geq lparen 左括号 rparen comma semicolon period becomes 赋值的意思 下面的表示是系统的保留字 beginsym endsym ifsym thensym whilesym writesym readsym dosym callsym constsym varsym procsym integersym charactersym doublesym define symnum 35 enum object constant variable procedur integer character doubler 五 模块划分五 模块划分 过程或函数名简要功能说明 pl0 主程序 Error 出错处理 打印出错位置和错误编码 Getsym 词法分析 读取一个单词 Getch 漏掉空格 读取一个字符 Gen 生成目标代码 并送入目标程序区 Test 测试当前单词符号是否合法 Block 分程序分析处理过程 Enter 登录名字表 position 函数 查找标识符在名字表中的位置 Constdeclaration 常量定义处理 Vardeclaration 变量说明处理 Listode 列出目标代码清单 Statement 语句处理 Expression 表达式处理 Term 项处理 Factor 因子处理 山东建筑大学计算机学院课程设计说明书 6 Condition 条件处理 Interpret 对目标代码的解释执行程序 base 函数 通过静态链求出数据区的基地址 6 源程序源程序 1 该函数的功能就是取一个数据单位 通过调用该函数可以一次取出一个 数字或字符串或运算符 这个函数和 getch 函数我觉得应该是调用最经常地函数啦 每调用一次该函数 该函数就会去调用 getch 函数 sym 记录的是语句单位的类型 num 中存放的是数字的大小 int getsym 取一个数字单位 else 加入 real 类型 if ch 0 输出错误码 else if int ch 39 加入字符类型 getchdo if ch A for i tx0 1 iamax 如果数字大于最大能表示的数字 则报错 amax 2047 error 31 num 0 gendo lit 0 num getsymdo 6 void interpret case 14 14 号操作为输出栈顶值操作 输出栈顶值 cout s t 1 endl fprintf fa2 lf n s t 1 同时打印到文件 t 栈顶下移 break case 15 15 号操作为输出换行操作 printf n 输出换行 fprintf fa2 n 同时输出到文件 break case 16 16 号操作是接受键盘值输入到栈顶 printf 输入整形数 屏显问号 fprintf fa2 输入整形数 同时输出到文件 scanf lf 获得输入 山东建筑大学计算机学院课程设计说明书 14 fprintf fa2 lf n s t 把用户输入值打印到文件 t 栈顶上移 分配空间 break case 17 17 号操作为输出栈顶值操作 printf c int s t 1 输出栈顶值 fprintf fa2 c n s t 1 同时打印到文件 t 栈顶下移 break case 18 18 号操作为输出栈顶值操作 printf lf s t 1 输出栈顶值 fprintf fa2 lf n s t 1 同时打印到文件 t 栈顶下移 break case 19 19 号操作是接受键盘值输入到栈顶 printf 输入单字符 屏显问号 fprintf fa2 输入单字符 同时输出到文 scanf s fprintf fa2 c n s t 把用户输入值打印到文件 t 栈顶上移 分配空间 break case 20 20 号操作是接受键盘值输入到栈顶 printf 输入双精度型数 屏显问号 fprintf fa2 输入双精度型数 同时输出到文件 scanf lf 获得输入 fprintf fa2 lf n s t 把用户输入值打印到文件 t 栈顶上移 分配空间 break case 21 14 号操作为输出栈顶值操作 输出栈顶值 cout char s t 1 endl fprintf fa2 lf n s t 1 同时打印到文件 t 栈顶下移 break 山东建筑大学计算机学院课程设计说明书 15 七 测试数据七 测试数据 1 运行编译后的可执行文件 输入用 PL 0 的源语言写的代码文件 integer txt 该文件内容如下 integer w begin integer w 25 write w end 得到程序的运行结果如图 1 所示 图 1 测试数据 integer txt 的运行结果 2 运行编译后的可执行文件 输入用 PL 0 的源语言写的代码文件 character txt 该文件内容如下 character m begin character m m 山东建筑大学计算机学院课程设计说明书 16 End 得到程序的运行结果如图 2 所示 3 运行编译后的可执行文件 输入用 PL 0 的源语言写的代码文件 double txt 该文件内容如下 double m begin double m 5 5 write m End 得到程序的运行结果如图 3 所示 山东建筑大学计算机学院课程设计说明书 17 八 测试情况八 测试情况 测试数据 输入 2 0 和 1 0 的结果 测试数据 输入 a 山东建筑大学计算机学院课程设计说明书 18 结结 论论 通过编译原理的课程设计 在理解了 PL 0 语言及其编译器实现方法的基础上 进行 了识别注释功能的扩充和实现以及增加了对函数进行处理的功能处理的功能 通过这次课 程设计 我们学会了怎么设计编译器 怎么自己去写一个编译程序来对高级语言进行编译 在开始的时候 对于 C 语言版的编译器是一点也不懂 但是进过一天的读程序和单步 跟踪 了解了其是怎么运行的和原理 之后 就进行了代码的增加和修改 对于增加字符 型和实数型变量的处理 我增加了关键字 integersym charactersym doubsym 并分别对 getsym block statement factor interpret 等函数进行了相应的修改 修改过程中出现了很多的错误 经过询问老师 和同学交流 并调试 最终一一解决 通过这次课程设计我不仅进一步熟练了利用 C 语言进行编程 而且也学会了一些相应 的编程技巧 例如怎么快速的查错 怎么熟练的读懂递归函数的调用等等 同时在这次课 程设计中也发现了自己的一些不足之处 例如 由于时间原因 只完成了要求的代码 没 有在此基础上更好的扩充 还有在写程序时有时候会犯迷糊 容易出错 对于自己的不足 以后我会更加的注意 并且会经常的写程序来总结经验 改正不足 提高自己的能力 这次课程设计让我学会了很多 同时也给了我进一步学好计算机的动力 虽然写程序有时 很枯燥 但是当你沉浸在其中时 你就会发现程序很有趣 你利用字母来编制实际 来处 理现实生活中复杂繁琐的事情 解放了生产力 我越来越喜欢计算机啦 在之后的世界里 计算机绝对会是主流 我对未来充满了自信和憧憬 山东建筑大学计算机学院课程设计说明书 19 参考文献参考文献 1 程序设计语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025四川绵阳市奥林匹克体育学校考核招聘教练员5人备考考试题库附答案解析
- 2025广西南宁市五一西路学校招聘老师4人备考考试题库附答案解析
- 2025年河北承德市直事业单位公开选调工作人员51名考试备考题库及答案解析
- 区块链食品溯源技术-洞察及研究
- 2025内蒙古产权交易中心及所属子公司(第二批)招聘笔试参考题库附答案解析
- 多光谱成像算法研究-洞察及研究
- 电商价格弹性分析-洞察及研究
- 购置税减半活动策划方案
- 山场巡查管理制度
- 手指印画小樱桃课件
- 光伏项目投标方案(技术方案)
- 模块化炼化设备的设计与集成
- 光伏发电功率预测系统
- HY/T 0404-2024潮流能、波浪能发电装置海试过程控制规范
- 设备维护服务方案(2篇)
- 医院检验科实验室生物安全程序文件SOP
- 手术前术前准备未执行的应急预案
- JJG 270-2008血压计和血压表
- T-CARM 002-2023 康复医院建设标准
- 轻质燃料油安全技术说明书样本
- 毕业设计(论文)-水果自动分拣机设计
评论
0/150
提交评论