编译原理课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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层

相关文档
最新文档