PLX编译程序改进及扩展.doc

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
衡阳师范学院 计算机科学与技术专业 课 程 设 计 题 目: PL/X编译程序改进及扩展 指导教师: 徐雨明老师 年级班别: 08级1班 学 号: 学生姓名: 夏 彦 时 间: 2011年6月16日 目录 1 介绍 3 1.1 前言 3 2 编译器 4 2.1 PL/X编译器结构概述 4 2.2 语法元素 6 2.3语法图 7 2.4判断是否符合两条限制规则 15 2.5 语法出错表定义 18 3 虚拟机 19 3.1 虚拟机组织结构 19 3.2 虚拟机指令格式 20 4 程序设计 23 4.1 全局变量、全局常量 23 4.2 函数接口 30 5 程序测试 39 6 课程设计总结 40 7 参考文献 41 1 介绍 1.1 前言 根据课程设计要求制作PL/X语言的编译器,完成词法分析、语法分析、语义分析及代码生成、出错处理和解释运行程序,并添加一定的扩展,最终实现一个PL/X的编译器。 所完成扩展点说明: 1)支持三种注释 a)单行注释 b)/*---*/ 多行注释 c)(*---*) 多行注释 2)支持read语句,因此可从终端获取输入 3)支持write语句,因此可从终端输出 4)支持for语句 5)支持do…while语句 6) call过程 7) 求余运算% 8) 整数的奇偶odd 9) 幂运行** 10) 求阶乘! 11) 求和$ 关于出错处理:分为词法分析错误、句法分析错误、运行时错误(如除数为0) 允许变量名或函数名重复,但访问的时候以最后一次声明的为有效 2 编译器 2.1 PL/X编译器结构概述 图 PL/X编译程序的结构图图 PL/X的解释执行结构图 PL/X编译程序总体流程图语法分析过程是整个编译过程的核心,是指开始由主程序调用GETSYM取一个单词,再调用语法分析过程, 由当前单词根据语法规则再调用其它过程,如说明处理、代码生成或出错处理等过程进行分析,当分析完一个单词后,再调用GETSYM取下一个单词,一直重复到当前单词为结束符.表明源程序已分析结束。若未取到结束符.,而源程序已没有输入符号,这时表明源程序有错误,无法再继续分析。 图 PL/X过程调用相关示意图 2.2 语法元素 关键字: and, begin, call, case, constant, do, else, end, false, for, if, integer, logical, not, or, “odd”,procedure, program, read, repeat, switch, then, true, until, while, write 操作符: ., ;, **, ++, “--, +, -, *, /, %, =, , =, , =, ==, !,+=, -=, *=, /= 2.3语法图 程序 程序体 语句序列 语句 条件 表达式 项 因子 prog = program ds { proc } begin ss end . proc = procedure aident [ds] begin ss end ds = d {; d } d = integer aident {, aident} | logical bident {, bident} | constant aident = number {, aident = number} ss = s { ; s } s = aident := ae | bident := be | if be then ss [else ss] end | while be do ss end | repeat ss until be | write ae . read aident | bident for s ; be ; s do ss end call procedure do ss . while be end ae= [-] at {(-|+) at } 8) at = af1 {(*|/) af1}. 9) af1 = af {(%|**) af}. //扩展的求余运算 10) af = aident | number | ( ae ) | constant be = bt {or bt} bt = bf {and bf } bf = bident | true | false |not bf |( be ) |

文档评论(0)

xiexie2012 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档