编译原理课程设计---PL0编辑器扩充
编译原理课程设计编译原理课程设计 题题 目目 ____ _PL0_PL0 编辑器扩充编辑器扩充__ __ ____ 学学 院院 计算机学院计算机学院 专专 业业 软件工程软件工程 答辩 程序设计 报告撰写 平时 总成绩 2013 年年 1 月月 4 日日 一.一. 课程设计目的与要求课程设计目的与要求 1、课程设计目的、课程设计目的 在分析理解一个教学型编译程序(如 PL/0)的基础上,对其词法分析 程序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解 程序编译过程的基本原理和基本实现方法的目的。 2 2、课程设计要求、课程设计要求 基本内容基本内容(成绩范围 “中” 、 “及格”或“不及格” )(成绩范围 “中” 、 “及格”或“不及格” ) ((1)扩充赋值运算)扩充赋值运算* 和和 / 扩充语句(扩充语句(Pascal 的的 FOR 语句)语句) ①①FOR TO DO ②②FOR DOWNTO DO 其中,语句其中,语句①①的循环变量的步长为的循环变量的步长为 2,, 语句②语句②的循环变量的步长为的循环变量的步长为-2。。 ((3)增加运算)增加运算 和和 --。。 选做内容选做内容(成绩评定范围扩大到 “优(成绩评定范围扩大到 “优”和“良” )”和“良” ) ((1)增加类型)增加类型①① 字符类型;字符类型; ②② 实数类型。实数类型。 ((2)扩充函数)扩充函数①① 有返回值和返回语句;②有返回值和返回语句;② 有参数函数。有参数函数。 ((3)增加一维数组类型(可增加指令) 。)增加一维数组类型(可增加指令) 。 ((4)其他典型语言设施。)其他典型语言设施。 二、结构设计方案二、结构设计方案 1、、 结构设计说明结构设计说明 PL/0 的编译程序以语法分析程序为核心,词法分析程序和代码生成程序 都作为一个独立的过程,当语法分析需要读单词时就用词法分析程序,而当 语法分析正确需生成相应的目标代码时,则调用代码生成程序。此外,用表 格管理程序建立变量,常量和过程标识符的说明与引用之间的信息联系。用 出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错 误性质。 2、、 各功能模块图示各功能模块图示 3. 各功能模块作用表各功能模块作用表 1 PL0 主程序 2 Error 出错处理,打印出错位置和错误编码 3 GetCh 漏掉空格,读取一个字符 4 GetSym 词法分析,读取一个单词 5 Gen 生成目标代码,并送入目标程序区 6 TEST 测试当前单词符号是否合法 7 ENTER 登录名字表 8 POSITION 查找标识符在名字表中的位置 9 ConstDeclaration 常量定义处理 10 VarDeclaration 变量说明处理 11 ListCode 列出目标代码清单 12 FACTOR 因子处理 13 TERM 项处理 14 EXPRESSION 表达式处理 15 CONDITION 条件处理 16 STATEMENT 语句部分处理 17 Block 分程序分析处理过程 18 BASE 通过静态链求出数据区的基地址 19 Interpret 对目标代码的解释执行程序 3. 符号名字表结构符号名字表结构 struct tablestruct { char name[al]; /*/*名字名字*/*/ enum object kind; /*/*类型类型constconst,,varvar,,array or procedure*/array or procedure*/ int val; /*/*数值,仅数值,仅 constconst 使用使用*/*/ int level; /*/*所处层,仅所处层,仅 constconst 不使用不使用*/*/ int adr; /*/*地址,仅地址,仅 constconst 不使用不使用*/*/ int size; /*/*需要分配的数据区空需要分配的数据区空间,仅间,仅 procedureprocedure 使用使用*/*/ }; 4. 保留关键字枚举结构保留关键字枚举结构 enum symbol{ nul, ident, number, plus, minus, times, slash, oddsym, eql, neq, lss, leq, gtr, geq, lparen, rparen, comma, semicolon, period, b