广工编译原理课程设计及实验报告 下载本文

编译原理课程设计

课程名称 编 译 原 理 题目名称 课 程 设 计 学生学院 计 算 机 学 院 专业班级 学 号 学生姓名 指导教师 蒋 艳 荣

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编译程序的结构图