编译原理课程设计
课程名称 编 译 原 理 题目名称 课 程 设 计 学生学院 计 算 机 学 院 专业班级 学 号 学生姓名 指导教师 蒋 艳 荣
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编译程序的结构图