编译原理课程设计任务书.DOC

上传人:国*** 文档编号:970420 上传时间:2018-11-10 格式:DOC 页数:48 大小:211KB
下载 相关 举报
编译原理课程设计任务书.DOC_第1页
第1页 / 共48页
编译原理课程设计任务书.DOC_第2页
第2页 / 共48页
编译原理课程设计任务书.DOC_第3页
第3页 / 共48页
编译原理课程设计任务书.DOC_第4页
第4页 / 共48页
编译原理课程设计任务书.DOC_第5页
第5页 / 共48页
点击查看更多>>
资源描述

1、编译原理课程设计任务书指导教师: 设计者:山东建筑工程学院计算机系软件教研室编译原理的课程设计要求你对 PL/0 语言及其编译器进行扩充和修改。每个扩充或修改方式可得到不同的分数,满分为 100 分。完成课程设计后,写出课程设计报告书,报告书中必须包含下列内容:(1) 设计题目、设计目的、设计内容(2) 修改后的 PL/0 语言文本。包含词法分析(正规式) ,语法分析(BNF) 。(3) 程序流程图(4) 有关修改后的 PL/0 编译/解释器的说明。详细说明你的编译器是如何编译新的 PL/0 语言程序的。指出你的程序中最精彩的部分,以及你为什么这样做,你是如何控制和恢复语义错误的。(5) 给出

2、你所改动后的编译器源程序清单,并标记出你所修改的部分。比较你的编译器和原来的编译器之间的差别。(6) 说明你的编译器中可能存在的错误。(7) 总结经验与教训,如果重做一遍,你会有哪些新的改进?(8) 课程设计说明:本课程设计共用 2 周时间,20 周周末交上课程设计报告书及源程序。对现存的 PL/0 编译程序可做如下修改或扩充,其中(1) 、 (2) 、 (11)和(12)必须完成,剩余的均可任意选择,但总分必须超过 70 分。(1) 注释(5 分)注释由(*和*)包含,不允许嵌套。(2) 布尔类型的数据(10 分)布尔类型的 BNF 为:var_option | var var_decl_l

3、istvar_decl_list var_decl | var_decl_list var_declvar_decl ident_list : data_typedata_type integer | boolean这种修改包括:(i) 区别整型与布尔型变量、常量和表达式。(ii) 增加按严格计算的布尔类型运算符 and、or 和 not。这些算符以及己有的运算符的优先级与 Pascal 语言相同。(iii) 能够使用布尔常量 true 和 false。(iv) 把 PL/0 语言中的“条件”概念一般化为 Pascal 语言那样。(v) 布尔表达式可以比较大小:false =表达式项项+- -

4、+项因子设计过程中的注意事项:1、编程习惯程序描述 (一般在程序开头)、注释(1/3) 、缩进和空格。2、文件管理学会正确的文件管理技术非常重要,经验告诉我们,优秀的软件开发者往往具有很好的文件管理技巧,应该应用在所有的项目中。在根目录下建立一个子目录,在该子目录下建立各个项目的子目录,如 C: compilerscanner, C: compilerparser, 3、备份工作在工业界,所有的公司都有备份机制,应该意识到备份的重要性,应该强制要求自己采用某种备份策略,应该将资料备份到不同的设备上(服务器、 USB 盘、硬盘等等) 。因子因子/*identnumber表达式( )2. PL/0

5、 语言编译器本书所提供的 PL/0 语言编译器的基本工作流程如图 1-1 所示:语法分析词法分析语义分析代码生成代码执行源程序执行结果符号表管理 错误诊断处理图 1-1 PL/0 编译器基本工作流程2.1 词法分析PL/0 的语言的词法分析器将要完成以下工作:(1) 跳过分隔符(如空格,回车,制表符) ;(2) 识别诸如 begin,end,if,while 等保留字;(3) 识别非保留字的一般标识符,此标识符值(字符序列)赋给全局量id,而全局量 sym 赋值为 SYM_IDENTIFIER。(4) 识别数字序列,当前值赋给全局量 NUM,sym 则置为 SYM_NUMBER;(5) 识别:

6、=,=之类的特殊符号,全局量 sym 则分别被赋值为SYM_BECOMES,SYM_LEQ,SYM_GEQ 等。相关过程(函数)有 getsym(),getch(),其中 getch()为获取单个字符的过程,除此之外,它还完成:(1) 识别且跳过行结束符;(2) 将输入源文件复写到输出文件;(3) 产生一份程序列表,输出相应行号或指令计数器的值。2.2 语法分析我们采用递归下降的方法来设计 PL/0 编译器。以下我们给出该语言的 FIRST和 FOLLOW 集合。非终结符(S) FIRST(S) FOLLOW(S)程序体 const var procedure ident call if be

7、gin while. ;语句 ident call begin if while . ; end条件 odd + - ( ident number then do表达式 + - ( ident number . ; ) R end then do项 ident number ( . ; ) R + - end then do因子 ident number ( . ; ) R + - * / end then do注:表中 R 代表六个关系运算符。不难证明,PL/0 语言属于 LL(1)文法。 (证明从略。 )以下是我们给出如何结合语法图编写(递归下降)语法分析程序的一般方法。假定图 S 所对应

8、的程序段为 T(S) ,则:(1) 用合适的替换将语法约化成尽可能少的单个图;(2) 将每一个图按下面的规则(3)-(7)翻译成一个过程说明;(3) 顺序图对应复合语句:对应:begin T(S1); T(S2); .; T(Sn) end(4) 选择:S1 S2 Sn对应:case 语句或者条件语句:case ch of if ch in L1 then T(S1) elseL1: T(S1); if ch in L2 then T(S2) elseL2: T(S2); 或 . if ch in Ln then T(Sn) elseLn: T(Sn); error其中 LiFIRST(Si)

9、 ,ch 为当前输入符号。 (下同)(5) 循环对应:while ch in L do T(S)(6) 表示另一个图 A 的图:对应:过程调用 A。(7) 表示终结符的单元图:对应:if ch = x then read(ch) else error相关过程有:block(), constdeclaration(), vardeclaration(), statement(), condition(), expression(), term(), factor()等。它们之间依赖关系如图 1-2:S1S2S3SAx2.3 语义分析PL/0 的语义分析主要进行以下检查:(1) 是否存在标识符先引用未声明的情况;(2) 是否存在己声明的标识符的错误引用;(3) 是否存在一般标识符的多重声明。2.4 代码生成PL/0 编译程序不仅完成通常的词法分析、语法分析,而且还产生中间代码和“目标”代码。最终我们要“运行”该目标码。为了使我们的编译程序保持适当简单的水平,不致陷入与本课程无关的实际机器的特有性质的考虑中去,我们假想有台适合 PL/0 程序运行的计算机,我们称之为 PL/0 处理机。PL/0 处理机顺序解释生成的目标代码,我们称之为解释程序。注意:这里的假设与我们的编译概程序程序体语句条件表达式项因子图 1-2 语法分析过程依赖关系

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。