pl0编译程序设计说明书.docx
文本预览下载声明
PL/O编译程序设计说明书
小组组长:李文
小^;员:******
******
******
2006年1月16日
TOC \o 1-5 \h \z 1引言 3
\o Current Document 1.1编写目的 3
\o Current Document 1.2背景 3
\o Current Document 1.3定义 3
\o Current Document 14参考资料 5
\o Current Document 2总体设计 5
\o Current Document 2.1需求规定 5
\o Current Document 2.2运行环境 6
\o Current Document 2.3模块流程 6
\o Current Document 2.4模块机理说明 7
2.5模块设计与实现 10
2.6人工处理过程 12
2.7程序的亮点 13
2.8尚未I可决的问题 13
3程序介绍和使用说明 13
4程序测试结果分析 16
概要设计说明书
1引言
1.1编写目的
此文档为VK 1.0版PL/O编译器详细设计说明书,旨在说明该编译器的设计思想和实现。 此说明书可以在阅读本编译器代码时有效地帮助您理解本编译器的设计方法和实现过程,希 望能提供给您所需的帮助。
1.2背景
名称:VK1.0版PL/0编译器
说明:
此编译器为北京师范大学信息科学学院计算机科学与技术系2003级2005-2006学年度 第一学期编译原理课程实验作业。
本软件由李文小组合作开发,组长李文,同组人员有吕叶、刘晟忻、肖纯、曲文星。
本软件主要用于PL/0程序的编译,软件提供生成中间代码,并执行检测。本软件为开 源软件.故除了用于编译以外还可给编译器开发者提供开发参考。
本软件开发运行在Windows 32位平台上,尚未开发其他平台版本。
1.3定义
本软件开发中,用到了一些PL/O语言和PCODE的定义以及编译原理术语.下面给予 说明。
? PL/O语言:
BNF范式:
〈程序〉::=〈分程序〉.
〈分程序〉::=[〈常量说明部分〉][〈变量说明部分〉][〈过程说明部分〉]〈语句〉 〈常量说明部分〉::=CONST〈常量定义〉{.〈常量定义〉);
〈常量定义〉::=〈标识符〉=〈无符号整数〉
〈无符号整数〉::=〈数字〉{〈数字〉}
〈变量说明部分〉::=VAR〈标识符〉{,〈标识符〉};
〈标识符〉::=〈字母〉{〈字毋〉I〈数字〉}
〈过程说明部分〉::=〈过程首部〉〈分程序〉{;〈过程说明部分〉};
〈过程首部〉::=PROCEDURE〈标识符〉;
〈语句〉::=〈赋值语句〉I〈条件语句〉I〈当型循环语句〉I〈过程调用语句〉I〈读 语句〉I〈写语句〉I〈复合语句〉I〈空〉;
〈赋值语句〉::=〈标识符〉:=〈表达式〉
〈复合语句〉::=BEGIN〈语句〉{;〈语句〉)END
〈条件〉::=〈表达式〉〈关系运算符〉〈表达式〉IODD〈表达式〉
〈表达式〉::=[+1-]〈项〉(〈加法运算符〉〈项〉}
〈项〉::=〈因子〉(〈乘法运算符〉〈因子〉}
〈因子〉::=〈标识符〉I〈无符号整数〉1(〈表达式〉)
〈加法运算符〉::=+1-
〈乘法运算符〉::=*1/
〈关系运算符〉::=#l=lvlv=ll =
〈条件语句〉::=IF〈条件〉THEN〈语句〉
〈过程调用语句〉::=CALL〈标识符〉
〈当型循环语句〉::=WHILE〈条件〉DO〈语句〉
〈读语句〉::=READ(〈标识符〉{,〈标识符〉})
〈写语句〉::=WRITEC 表达式〉{,〈表达式〉})
〈字毋〉::=albl …IXIYIZ
〈数字〉::=011121???1819
PL/O语言允许过程嵌套定义,函数及变量作用于本层。即外层变量和程序对 内层可见.内层变星和函数对外层不可见。其中内层函数或变量将使外层的函 数或变量不可见。
PL/O允许递归调用,以函数可见为调用原则。
? PCODE 语言:
Pcode语言是PL/0语言的中间代码,其形式如下:
指令格式:
I I | a
f功能码
1层次差(标识符引用层减去定义层)
a根据不同的指令有所区别
其代码有8条.如下:
LITOa
将常数值取到栈顶,a为常数值
LODI a
将变量值取到栈顶.a为偏移量,1为层差
STOla
将栈顶内容送入某变量单兀中,a为偏移量,1为层差
CAL la
调用过程.a为过程地址.1为层差
INTO a
在运行栈中为被调用的过程开辟a个单元的数据区
IMP 0 a
无条件跳转至a地址
JPCOa
条件跳转.当栈顶布尔值非真则跳转至a地址,否
显示全部