PASCAL-S语言编译程序设计报告
一、课程设计目标和要求:
按照所给Pascal-S语言的语法,参考Pascal语言的语义,设计并实现Pascal-S语言编译为C语言的编译程序。
二、需求分析:
1、词法分析:
单词种类、单词模式、右线性文法
注释、分隔符
错误
2、语法分析:
语法结构、语法错误类型
文法,分析方法选择
改写文法
3、语义分析:
类型、类型表示、类型检查、作用域、符号表类容
4、代码生成:
1、目标语言:C语言
2、源/目标语言的映射关系:
三、开发环境:
1、PC机
2、win10
3、CLion
四、总体设计说明:
[模块关系图]
1、总体结构设计:
1)功能模块的划分及功能:
a、词法分析模块:
(功能)
b、语法分析模块:
(功能)
c、语义分析模块:
1. 符号表的建立及维护
2. 类型检查
3. 错误检查处理
d、代码生成模块:
(功能)
2)模块之间的关系及接口:
2、数据结构设计:(符号表、语法树、记号二元组…)
符号表
名称 类型 维度 声明行 指针域
—— —— —— ——– ——–
1. 名称:标识符的具体名称(字符串)
2. 类型:整型,实型等基本类型(也可以是数组的类型,函数返回值类型)
3. 维度:数组维度,如果是基本类型则为0
4. 声明行:标识符首次声明的位置
5. 指针域:函数和过程的子表指针
(函数/过程类型通过指针+类型判断及区分,数组类型通过维度区分)
3、错误处理恢复策略:(词法、语法、语义、代码生成)
语义分析
略
五、各部分的详细设计说明:
1、接口描述:
语义分析:
输入:语法树,每个节点都是一个结构体,结构体中需要包含
记号:叶子节点中的标识符的id,非叶子结点为空
所在行:叶子节点所在的行数
属性:以该结点为根节点的子树所代表的语法成分
子结点域:存放指向子结点的指针
输出:符号表、语法树
2、功能描述:
3、所用数据结构说明:
4、算法描述:
六、程序清单:
七、测试报告:
1、测试环境:
2、测试计划:
3、测试结果:
八、实验总结:
1、实验中遇到的或存在的主要问题:
2、改进建议:
3、体会/收获: