15广工编译原理课程设计及实验报告

2019-08-31 09:35

编译原理课程设计

课程名称 编 译 原 理 题目名称课 程 设 计 学生学院 计 算 机 学院 专业班级 学 号 学生姓名

指导教师蒋 艳 荣

2015 年12月27 日

一、 实验要求

课内实验

对PL/0作以下修改扩充:

(1)增加单词:保留字 ELSE,FOR,TO,DOWNTO,RETURN

运算符 *=,/=,++,--,&,||,!

(2)修改单词:不等号# 改为 <>

(3)增加条件语句的ELSE子句,要求:写出相关文法,语法图,语义规则。 将原本 条件语句 -> if条件 then 语句

改为 条件语句 -> if条件 then 语句 [else 语句]

1. 课程设计

基本内容(成绩范围:“中”、“及格”或“不及格”)

(1)扩充赋值运算:*= 和 /= 语句 -> ident *= 表达式 语句 -> ident /= 表达式

扩充语句(Pascal的FOR语句):

①FOR <变量>:=<表达式> TO <表达式> DO <语句> ②FOR <变量>:=<表达式> DOWNTO <表达式> DO <语句> 其中,语句①的循环变量的步长为2,

语句②的循环变量的步长为-2。

(3)增加运算:++ 和 --。

选做内容(成绩评定范围扩大到:“优”和“良”)

(1)增加类型:① 字符类型; ② 实数类型。 (2)扩充函数:① 有返回值和返回语句;② 有参数函数。 (3)增加一维数组类型(可增加指令)。 (4)其他典型语言设施。

二、 实验环境及工具

源语言 :PL0

目标语言:假想栈式计算机的汇编语言(C语言实现) 实现工具:codeblock 运行平台:Windows 10

三、 结构设计说明

(1)PL/0 语言编译程序结构

PL/0语言可看成是PASCAL语言的子集,它的编译程序是一个编译解释执行系统。PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。

PL/0源程序 词法分析程序 表格管理程序语法语义分析程序 出错处理程序(2)PL/0 语言编译程序总体流程

以下是编译程序的总体流程图,其中,PL/0编译程序的语法分析过程BLOCK是整个编译过程的核心,我们通过该流程图来弄清BLOCK过程在整个编译程序中的作用。

代码生成程序 目标程序 PL/0编译程序的结构图

PL/0 的编译程序采用一趟扫描方式,以语法分析程序为核心,词法分析程序和代码生成程序都作为一个独立的过程,当语法分析需要读单词时就用词法分析程序,而当语法分析正确需生成相应的目标代码时,则调用代码生成程序。

此外,用表格管理程序建立变量,常量和过程标识符的说明与引用之间的信息联系。用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错误性质。

(3)各功能模块描述

过程或函数名 pl0 error getsym getch gen test block enter position(函数) constdeclaration vardeclaration listode statement expression term factor condition interpret base(函数) 主程序 出错处理,打印出错位置和错误编码 词法分析,读取一个单词 漏掉空格,读取一个字符 生成目标代码,并送入目标程序区 测试当前单词符号是否合法 分程序分析处理过程 登录名字表 查找标识符在名字表中的位置 常量定义处理 变量说明处理 列出目标代码清单 语句处理 表达式处理 项处理 因子处理 条件处理 对目标代码的解释执行程序 通过静态链求出数据区的基地址 简要功能说明 四、 主要成分描述

①符号表

在PL0中,使用以下数据结构存储符号表: struct tablestruct {

char name[al]; /*名字*/

enum object kind; /*类型:const,var,array or procedure*/ int val; /*数值,仅const使用*/ int level; /*所处层,仅const不使用*/ int adr; /*地址,仅const不使用*/ int size; /*需要分配的数据区空间,仅procedure使用*/ };

struct tablestruct table[txmax]; /*名字表*/

他是一个全程量一维数组TABLE。表中每个元素为记录型数据。

如果标识符被说明为常数,其属性值为常数值;如果标识符被说明成变量,其属性就是由层次和修正量(偏移量)组成的地址;如果标识符被说明为过程,其属性就是过程的入口地址及层次。

常数的值由程序正文提供,编译的任务就是确定存放该值的地址。我们选择顺序分配变量和代码的方法;每遇到一个变量说明,就将数据单元的下标加一(PL/0 机中,每个变量占一个存贮单元)。

开始编译一个过程时,要对数据单元的下标dx 赋初值,表示新开辟一个数据区。dx 的初值为3,因为每个数据区包含三个内部变量RA,DL 和SL。

②运行时存储组织和管理

当源程序经过语法分析,如果没有发现错误,由编译程序调用解释程序,对存放在CODE中的目标代码从CODE[0]开始解释执行。 存放目标代码的数据结构: struct instruction


15广工编译原理课程设计及实验报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:自然地理学教案-伍光和版 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: