网站大量收购闲置独家精品文档,联系QQ:2885784924

PL0际编译程序设计说明书.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PL/0编译程序 设计说明书 小组组长:李 文 小组成员:****** ****** ****** ****** 2006年1月16日 1引言 3 1.1编写目的 3 1.2背景 3 1.3定义 3 1.4参考资料 5 2总体设计 5 2.1需求规定 5 2.2运行环境 6 2.3模块流程 6 2.4模块机理说明 7 2.5模块设计与实现 10 2.6人工处理过程 12 2.7程序的亮点 13 2.8尚未问决的问题 13 3程序介绍和使用说明 13 4程序测试结果分析 16 概要设计说明书 1引言 1.1编写目的 此文档为VK 1.0版PL/0编译器详细设计说明书,旨在说明该编译器的设计思想和实现。此说明书可以在阅读本编译器代码时有效地帮助您理解本编译器的设计方法和实现过程,希望能提供给您所需的帮助。 1.2背景 名称:VK1.0版PL/0编译器 说明: 此编译器为北京师范大学信息科学学院计算机科学与技术系2003级2005-2006学年度第一学期编译原理课程实验作业。 本软件由李文小组合作开发,组长李文,同组人员有吕叶、刘晟忻、肖纯、曲文星。 本软件主要用于PL/0程序的编译,软件提供生成中间代码,并执行检测。本软件为开源软件,故除了用于编译以外还可给编译器开发者提供开发参考。 本软件开发运行在Windows 32位平台上,尚未开发其他平台版本。 1.3定义 本软件开发中,用到了一些PL/0语言和PCODE的定义以及编译原理术语,下面给予说明。 ? PL/0语言: ? BNF范式: 〈程序〉∷=〈分程序〉. 〈分程序〉∷=[〈常量说明部分〉][〈变量说明部分〉][〈过程说明部分〉]〈语句〉 〈常量说明部分〉∷=CONST〈常量定义〉 {,〈常量定义〉}; 〈常量定义〉∷=〈标识符〉=〈无符号整数〉 〈无符号整数〉∷=〈数字〉{〈数字〉} 〈变量说明部分〉∷=VAR〈标识符〉{,〈标识符〉}; 〈标识符〉∷=〈字母〉{〈字母〉|〈数字〉} 〈过程说明部分〉∷=〈过程首部〉〈分程序〉{;〈过程说明部分〉}; 〈过程首部〉∷=PROCEDURE〈标识符〉; 〈语句〉∷=〈赋值语句〉|〈条件语句〉|〈当型循环语句〉|〈过程调用语句〉|〈读语句〉|〈写语句〉|〈复合语句〉|〈空〉; 〈赋值语句〉∷=〈标识符〉∶=〈表达式〉 〈复合语句〉∷=BEGIN〈语句〉{;〈语句〉}END 〈条件〉∷=〈表达式〉〈关系运算符〉〈表达式〉|ODD〈表达式〉 〈表达式〉∷=[+|-]〈项〉{〈加法运算符〉〈项〉} 〈项〉∷=〈因子〉{〈乘法运算符〉〈因子〉} 〈因子〉∷=〈标识符〉|〈无符号整数〉|(〈表达式〉) 〈加法运算符〉∷=+|- 〈乘法运算符〉∷=*|/ 〈关系运算符〉∷=#|=|<|<=|>|>= 〈条件语句〉∷=IF〈条件〉THEN〈语句〉 〈过程调用语句〉∷=CALL〈标识符〉 〈当型循环语句〉∷=WHILE〈条件〉DO〈语句〉 〈读语句〉∷=READ(〈标识符〉{,〈标识符〉}) 〈写语句〉∷=WRITE(〈表达式〉{,〈表达式〉}) 〈字母〉∷=a|b|…|X|Y|Z 〈数字〉∷=0|1|2|…|8|9 ? PL/0语言允许过程嵌套定义,函数及变量作用于本层。即外层变量和程序对内层可见,内层变量和函数对外层不可见。其中内层函数或变量将使外层的函数或变量不可见。 ? PL/0允许递归调用,以函数可见为调用原则。 ? PCODE语言: Pcode语言是PL/0语言的中间代码,其形式如下: 指令格式: f l a f 功能码 l 层次差 (标识符引用层减去定义层) a 根据不同的指令有所区别 其代码有8条,如下: LIT 0 a 将常数值取到栈顶,a为常数值 LOD l a 将变量值取到栈顶,a为偏移量,l为层差 STO l a 将栈顶内容送入某变量单元中,a为偏移量,l为层差 CAL l a 调用过程,a为过程地址,l为层差 INT 0 a 在运行栈中为被调用的过程开辟a个单元的数据区 JMP 0 a 无条件跳转至a地址 JPC 0 a 条件跳转,当栈顶布尔值非真则跳转至a地址,否则顺序执行 OPR 0 0 过程调用结束后,返回调用点并退栈 OPR 0 1 栈顶元素取反 OPR 0 2 次栈顶与栈顶相加,退两个栈元素,结果值进栈 OPR 0 3 次栈顶减去栈顶,退两个栈元素,结果值进栈 OPR 0 4 次栈顶乘以栈顶,退两个栈元素,结果值进栈 OPR 0 5 次栈顶除以栈顶,退两个栈元素,结果值进栈 OPR 0 6 栈顶元素的奇偶判断,结果值在栈顶 OPR 0 7 无操作 OPR 0 8 次栈顶与栈顶是否相等,退两个栈元素,结果值

文档评论(0)

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

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

1亿VIP精品文档

相关文档