编译原理课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<PL0编译器-PCompiler>
软件需求说明书
作者:刁诗云、麻汉华、潘彦荃、周津、李程完成日期:2009年6月7日
签收人:
签收日期:
修改情况记录:
目录
软件需求说明书 (1)
1 引言 (1)
1.1 编写目的 (1)
1.2 项目背景 (1)
2 项目概述 (2)
2.1 产品描述 (2)
2.2 产品功能 (2)
2.3 用户特点 (2)
3 具体需求 (3)
3.1 EBNF定义的PL/0文法 (3)
3.2 语法图 (4)
3.3 功能需求 (6)
3.4 系统概要设计 (15)
1 引言
1.1 编写目的
为了清楚表达客户提出的需求,便于用户理解和确认项目所包含的具体功能需求、性能需求以及非公能性需求,因此以文件化的形式,把系统整体及其部分的业务流程、系统功能进行了详细的说明。同时,此文也对开发人员起到引导的作用,请认真阅读。
1.2 项目背景
PL/0是由世界著名计算机科学家、PASCAL语言的创始人N.Wirth教授选择提供的。在选择PL/0语言的过程中,Wirth很费了一番脑筋。一方面他希望借助这个语言,能尽可能把程序设计语言和编译技术一些最重要的内容都讲到;但另一方面又不希望内容太多,太杂,而希望尽可能简单一些,以便与有限的课时和课程范围相适应。于是他精心选择提供了这个PL/0语言。事实证明,它非常适合于编译技术的教学,目前已被国内越来越多的编译教材所采用。
PL/0语言的语句类型比较丰富,能适应各种可能的程序结构。最进本的是赋值语句。组合结构语句有语句串、条件语句和循环语句。还有重要的子程序概念,是通过过程说明和过程调用两部分实现的。至于数据类型和数据结构,PL/0则特别简单,只有整数类型一种,没有数据结构,因此只允许有整常数和整数变量的说明以及相应的算术运算表达式。PL/0允许在一个过程范围内说明常数、变量和过程。这些常数、变量和过程只在它们被说明的过程范围内有效。PL/0语言也允许递归调用,既可以间接递归,也可以直接递归。
2 项目概述
2.1 产品描述
2.2 产品功能
使用Java语言作为实现语言,实现一个经过简单扩充的PL/0语言的编译器。手工编码实现编译器的所有组成部分,不借助自动生成工具生成语法分析器和词法分析器。
编译器的目标平台是Java虚拟机,生成直接可以再java虚拟机上运行的类文件格式字节码文件。例如:有PL/0语言的源程序test.pl0。本编译器为PCompiler。则运行java PCompiler tet.pl0可将test.pl0编译成Java字节码文件。如果输入的源程序正确,将生成类文件格式的Java字节码文件test.class。
2.3 用户特点
该软件的最终用户面向广大程序员以及编程爱好者。由于作者的时间及能力有限,所以存在各种漏洞不足是不可避免的。
3 具体需求
3.1 EBNF定义的PL/0文法
<程序>::= <分程序>.
<分程序>::= [<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句>
<常量说明部分>::= const<常量定义>{,<常量定义>};
<常量定义>::= <标识符>=<无符号整数>
<无符号整数>::= <数字>{<数字>}
<标识符>::= <字母>{<字母>|<数字>}
<变量说明部分>::= var<标识符>{, <标识符>};
<过程说明部分>::= <过程首部><分程序>{;<过程说明部分>}
<过程首部>::= procedure<标识符>;
<语句> ::= <赋值语句>|<条件语句>|<当循环语句>|<过程调用语句>|<复合语句>|<读语句>|<写语句>|<空>
<赋值语句>::= <标识符> := <表达式>
<表达式> ::= [+|-]<项>{<加法运算符><项>}
<项>::= <因子>{<乘法运算符><因子>}
<因子>::= <标识符>|<无符号整数>| … ( ‟ <表达式> … ) ‟
<加法运算符>::= +|-
<乘法运算符>::= *|/
<条件>::= <表达式><关系运算符><表达式>|odd<表达式>
<关系运算符>::= =|<>|<|<=|>|>=
<条件语句>::= if<条件>then<语句>
<当循环语句>::= while<条件>do<语句>
<过程调用语句>::= call<标识符>
<复合语句>::= begin<语句>{;<语句>}end
<读语句>::= read … ( ‟<标识符>{, <标识符>} … ) ‟
<写语句>::= write … ( ‟<表达式>{, <表达式>} … ) ‟
<字母>::= a|b|c|d…..x|y|z
<数字>::= 0|1|2|3…...8|9
3.2 语法图
程序语法描述图
分程序语法描述图
语句语法描述
条件语句描述图
表达式语法描述
项语法描述
因子语法描述3.3 功能需求
3.31 用例图
3.32 用例描述
3.3.3 词法分析
词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。
0层