广东工业大学编译原理实验报告计划.docxVIP

  • 29
  • 0
  • 约8.06千字
  • 约 19页
  • 2021-10-14 发布于山东
  • 举报

广东工业大学编译原理实验报告计划.docx

广东工业大学编译原理实验报告计划 广东工业大学编译原理实验报告计划 PAGE / NUMPAGES 广东工业大学编译原理实验报告计划 . 实验报告 课程名称 ____ 编译原理 __________ 题目名称 _ PL/0 编译程序的改正扩大 _ 学生学院 计算机学院 __ 专业班级 _______ ________ 学 号 学生姓名 ______ ________ 指导教师 ____ _________ __ 20 年 月 日 . . 一、课内实验要求 对 PL/0 作以下改正扩大: 增添单词:保存字 ELSE,FOR,TO,DOWNTO ,RETURN 运算符 *= ,/= ,++ ,-- ,,||,! 改正单词:不等号 # 改为 增添条件语句的 ELSE子句,要求:写出有关文法,语法图,语义规则。 二、实验环境与工具 计算机及操作系统: PC 机, Windows2000 , WindowsXP 程序设计语言: C 教课型编译程序: PL/0 设计方案 概括:源、目口号言,实现工具 (平台 ),运转平台 源语言: PASCAL 目口号言:设想栈式计算机的汇编语言,可称为类 PCODE 指令代码 实现工具: Visual C++ 6.0 运转平台: Windows 7 三、 设计方案 1.构造设计说明 ( 1) PL/0 语言编译器 PL/0 语言可当作是 PASCAL 语言的子集,它的编译程序是一个编译解说履行系统。 PL/0 的目标程序为设想栈式计算机的汇编语言,与详细计算机没关。 PL/0 源程序 . 表 目标代码生成程序 出 格 目标代码生成程序 错 . 2) PL/0 编译程序的语法剖析过程 BLOCK 是整个编译过程的核心。这里依据编译程序的整体流程图,来弄清 BLOCK 过程在整个编译程序中的作用。总流程图以下列图所示: 启动 程序 置初值 调用 getsym 取单词 分程序 调用 block 过程 语句 能否为源程序 犯错 条件 源程序能否有 打印错误 表达式 项 调用解说过程 interpret 解说履行目标履行目标 因子 结束 PL/0 语法调用关系图 . . PL/0 的编译程序采纳一趟扫描方式,以语法剖析程序为核心,词法剖析程序和代码生 成程序都作为一个独立的过程, 当语法剖析需要读单词时就用词法剖析程序, 而当语法剖析正确需生成相应的目标代码时, 则调用代码生成程序。别的, 用表格管理程序成立变量,常 量和过程表记符的说明与引用之间的信息联系。 用犯错办理程序对词法和语法剖析碰到的错误给出在源程序中犯错的地点和错误性质。 ( 3)各功能模块描绘 过程或函数名 简要功能说明 pl0 主程序 error 犯错办理,打印犯错地点和错误编码 getsym 词法剖析,读取一个单词 getch 遗漏空格,读取一个字符 gen 生成目标代码,并送入目标程序区 test 测试目前单词符号能否合法 block 分程序剖析办理过程 enter 登录名字表 position( 函数 ) 查找表记符在名字表中的地点 constdeclaration 常量定义办理 vardeclaration 变量说明办理 listode 列出目标代码清单 statement 语句办理 expression 表达式办理 term 项办理 factor 因子办理 . . condition 条件办理 interpret 对目标代码的解说履行程序 base(函数 ) 经过静态链求出数据区的基地点 2、主要成分描绘 符号表 ○ 为了构成一条指令,编译程序一定知道其操作码及其参数(数或地点) 。这 些值是由编译程序自己联系到相应表记符上去的。 这类联系是在办理常数、 变量 和过程说明达成的。 为此,表记符表应包含每一表记符所联系的属性; 假如表记 符被说明为常数, 其属性值为常数值; 假如表记符被说明成变量, 其属性就是由 层次和修正量(偏移量)构成的地点;假如表记符被说明为过程,其属性就是过 程的进口地点及层次。 常数的值由程序正文供给, 编译的任务就是确立寄存该值 的地点。我们选择次序分派变量和代码的方法; 每碰到一个变量说明, 就将数据 单元的下标加一(PL/0 机中,每个变量占一个存贮单元) 。开始编译一个过程时, 要对数据单元的下标 dx 赋初值,表示新开拓一个数据区。 dx 的初值为 3,因为 每个数据区包含三个内部变量 RA, DL 和 SL。 运转时储存组织和管理 ○ 关于源程序的每一个过程(包含主程序) ,在被调用时,第一在数据段中开 辟三个空间,寄存静态链 SL、动向链 DL 和返回地点 RA。静态链记录了定义该 过程的直接外过程 (或主程序) 运转时最新数据段的基地点。 动向链记录调用该 过程前正在运转的过程

文档评论(0)

1亿VIP精品文档

相关文档