编译原理课程设计-PLO.docx
上传人:qw****27 上传时间:2024-09-12 格式:DOCX 页数:23 大小:188KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

编译原理课程设计-PLO.docx

编译原理课程设计-PLO.docx

预览

免费试读已结束,剩余 13 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

课程设计课程名称___编译原理______题目名称___编译原理课程设计_学生学院___计算机学院__专业班级_计算机科学与技术_学号____学生姓名___________指导教师____________201年1月7日实验目的与要求课内实验(考试前交报告)对PL/0作以下修改扩充:(1)增加单词:保留字ELSE,FOR,STEP,UNTIL,RETURN运算符+=,-=,++,--,∧,∨,┓(2)修改单词:不等号#改为<>(3)增加条件语句的ELSE子句,要求:写出相关文法,语法图,语义规则。课程设计基本内容(成绩范围:“中”、“及格”或“不及格”)(1)扩充赋值运算:+=和-=(2)扩充语句(Pascal的FOR语句):FOR<变量>:=<表达式>STEP<表达式>UNTIL<表达式>DO<语句>(3)增加运算:++和--。选做内容(成绩评定范围扩大到:“优”和“良”)(1)增加类型:①字符类型;②实数类型。(2)扩充函数:①有返回值和返回语句;②有参数函数。(3)增加一维数组类型(可增加指令)。(4)其他典型语言设施。实验环境与工具(1)计算机及操作系统:PC机,Windows7(2)程序设计语言:C语言(3)教学型编译程序:PL/0设计方案概述课程设计的目标是做一个编译器,用的是PL/0语言,该语言功能简单、结构清晰、可读性强、又具备了一般高级语言的必须部分.PL/0语言的语句类型丰富,能适应各种可能性的程序结构.最基本的语句是赋值语句.组合结构语句有语句串、条件语句和循环语句.数据类型只有整数类型一种.PL/0允许在一个过程范围内说明常数、变量和过程.也允许递归调用,既可以间接递归,也可以直接递归.因而PL/0语言编译器是一个非常合适的小型编译程序的教学模型PL/0的目标程序为假想栈式的计算机的汇编语言,与具体计算机无关,可称为类PCODE指令代码,其指令集极为简单,指令格式也很单纯.本PL/0编译器是在C++Builder集成环境下,用C语言实现,在Window7平台下运行通过的.编译和解释执行的结构图:语法语义分析程序表格管理程序出错处理程序PL/0源程序目标程序代码生成程序程序词法分析程序程序PL/0语言编译过程采用一趟扫描方式,以语法分析程序为核心,词法分析程序和代码生成程序都作为一个独立的过程,当语法分析需要读单词时就调用词法分析程序,而当语法分析正确需生成相应的目标代码时,则调用代码生成程序.此外,用表格管理程序建立变量、常量和过程标识符的说明与引用之间的信息联系.用出错处理程序对词法和语法分析研究遇到的错误给出在源程序中出错的位置和错误性质.当源程序编译正确时,PL/0编译程序自动调用解释执行,并按用户程序要求输入数据和输出运行结果.各功能模块描述程序总体流程图词法分析子程序分析:GetSym()函数实现词法分析的功能,它的作用是从文件中读取一个单词。在GetSym()函数中调用了GetCh()。其中,GetCh()函数实现了从文件中读取一个字符的功能,同时在读取过程中忽略了空格,和回车,和制表符。其主要操作见流程图。语法分析子程序分析:语法分析子程序采用了自顶向下的递归子程序法,语法分析同时也根据程序的语义生成相应三元代码,并提供了出错处理的机制。语法分析主要由:分程序分析过程BLOCK常量定义分析过程ConstDeclaration(intLEV,int&TX,int&DX)变量定义分析过程VarDeclaration(intLEV,int&TX,int&DX)语句分析程STATEMENT(SYMSETFSYS,intLEV,int&TX)表达式处理过程EXPRESSION(SYMSETFSYS,intLEV,int&TX)项处理过程TERM(SYMSETFSYS,intLEV,int&TX)因子处理过程FACTOR(SYMSETFSYS,intLEV,int&TX)条件处理过程CONDITION(SYMSETFSYS,intLEV,int&TX)构成。这些过程在结构上构成一个嵌套的层次结构。除此之外,还有:出错报告过程Error(intn)代码生成过程Gen测试单词合法性及出错恢复过程TEST(SYMSETS1,SYMSETS2,intN)登录名字表过程ENTER(OBJECTSK,intLEV,int&TX,int&DX)查询名字表函数POSITION(ALFAID,intTX)列出类PCODE代码过程ListCode(intCX0)作过语法分析的辅助过程。语法分