课程设计报告
课程名称 编译原理 题目名称 PL/0编译器的扩充和修改 学生学院 计算机学院 专业班级 计算机科学与技术13(一) 学 号 31130057xx 学生姓名 xxxx 指导教师 张巍
2015 年 12 月 27日
实验目的与要求
对PL/0作以下修改扩充:
(1)扩充赋值运算:+=,-=, *= 和 /= (2)扩充语句(Pascal的FOR语句):
FOR <变量>:=<表达式>STEP<表达式> UNTIL<表达式>Do<语句> 选做内容(成绩评定范围扩大到:“优”和“良”)
增加 注释; 注释由/*和*/包含;
一、 实验环境与工具
1、源语言:PL/0语言,PL/0语言是PASCAL语言的子集,它的编译程序是一个编译解析执行系统,后缀名为.PL0;
2、目标语言:生成文件后缀为*.COD的目标代码 3、实现平台:Borland C++Builder 6 4、运行平台:Windows 7
同学们如果需要源代码,和测试文件可以去CSDN网站上搜索出我上传的文件以作参考。并且在此word附上一些心得给大家。 二、 设计方案
1、 结构设计说明
(1)PL/0 语言编译器
PL/0语言可看成是PASCAL语言的子集,它的编译程序是一个编译解释执行系统。PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。
表
格 管 理 函 数 PL/0 源程序 出 错 处 理 函 数 目标代码生成程序目标代码生成程序目标代码生成程序目标代码生成程序目标代码生成程序
(2)PL/0编译程序的语法分析过程BLOCK是整个编译过程的核心。这里根据编译程序的总体流程图,来弄清BLOCK过程在整个编译程序中的作用。总流程图如下图所示:
PL/0 的编译程序采用一趟扫描方式,以语法分析程序为核心,词法分析程序和代码生 成程序都作为一个独立的过程,当语法分析需要读单词时就用词法分析程序,而当语法分析
正确需生成相应的目标代码时,则调用代码生成程序。此外,用表格管理程序建立变量,常
量和过程标识符的说明与引用之间的信息联系。用出错处理程序对词法和语法分析遇到的错
误给出在源程序中出错的位置和错误性质。
(3)各功能模块描述 过程或函数名 pl0 error 简要功能说明 主程序 出错处理,打印出错位置和错误编码 getsym getch gen 词法分析,读取一个单词 漏掉空格,读取一个字符 生成目标代码,并送入目标程序区 test block enter position(函数) constdeclaration vardeclaration listode statement expression term 测试当前单词符号是否合法 分程序分析处理过程 登录名字表 查找标识符在名字表中的位置 常量定义处理 变量说明处理 列出目标代码清单 语句处理 表达式处理 项处理