编译原理课程设计(if-else条件语句翻译 - 三地址 - 简单优先法_第1页
编译原理课程设计(if-else条件语句翻译 - 三地址 - 简单优先法_第2页
编译原理课程设计(if-else条件语句翻译 - 三地址 - 简单优先法_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译原理课程设计(if-else条件语句翻译 - 三地址 - 简单优先法 课程设计任务书 题目: if-else条件语句的翻译程序设计(简单优先法、输出三地址表示) 初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进 行设计。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体 要求) (1) 写出符合给定的语法分析方法的文法及属性文法。 (2) 完成题目要求的中间代码三地址表示的描述。 (3) 写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4) 编制好分析程序后,设

2、计若干用例,上机测试并通过所设计的分析程序。 (5) 设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课程设计报

3、告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。 指导教师签名: xxxx年 月 日 系主任(或责任教师)签名: xxxx年 月 日 if-else条件语句的翻译程序设计(简 单优先法、输出三地址表示) 1 系统描述 1.1题目 if-else条件语句的翻译程序设计(简单优先法、输出三地址表示) 1.2目的 通过设计、编制、调试一个条件语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。 1.3设计内容及步骤 对条件语句: if 布尔表达式 then 赋值语句 else

4、赋值语句 (1) 按给定的题目写出符合语法分析方法要求的文法和属性文法描述。 (2) 按给定的题目给出语法分析方法的思想及分析表设计。 (3) 按给定的题目给出中间代码序列的结构设计。 (4) 完成相应的词法分析、语法分析和语义分析程序设计。 (5) 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 2 文法及属性文法的描述 2.1文法 文法是用于描述语言的语法结构的形式规则(即语法规则)。这些规则必须是准确的、易于理解的以及有相当强的描述能力。由这种规则所产生的程序语言应有利于句子分析和翻译,而且,最好能通过这些规则自动产生有效的语法分析程序。 if-else条件语句的文法g

5、s如下所示: (1) s - cm (2) s - tm (3) m - begin l end (4) c - if b then (5) t - c m else 其中非终结符b为布尔表达式,其文法gb如下: (1) b - b1 or b2 (2) b - b1 and b2 (3) b - not b1 (4) b - ( b1 ) (5) b - id1 rop id2 (6) b - true (7) b - false 而在文法gs中非终结符l表示赋值语句块,其文法gl如下: (1) l - l1 a ; (2) l - a; (3) a - id = m (4) m - e (

6、5) e - e1 + e2 (6) e - e1 * e2 (7) e - -e1 (8) e - ( e1 ) (9) e - id 2.2属性文法 属性文法是在上下文无关文法的基础上,为每个文法符号(终结符或者非终结符)配备若干相关的“值”(与文法符号相关的属性)。 在一个属性文法中,对应于每个产生式aa都有一套与之相关联的语义规则,每规则的形式为:b:=f(c1,c2,?,ck)其中f是一个函数,而且或者b是a的一个综合属性并且c1,c2,?,ck是产生式右边文法符号的属性或者非终结符既可有综合属性也可有继属性,文法开始符号的所有继承属性作为属性计算前的初始值1。 2.2.1 语义变量

7、和语义动作说明 对于文法gl,首先对id表示的单词定义一属性,用做语义变量,用lookup()语义函数审查是否出现在符号表中,如在,则返回一指向该登陆项的指针,否则返回nil。语义过程emit表示输出四元是到输出文件上。语义过程newtmp表示生产一临时变量,每调用一次,生成一新的临时变量。语义变量e.place,表示存放e值的变量名在符号表的登陆项或一整数码(若此变量时一个临时变量)2, 2.2.1 给出了翻译赋值语句块到三地址的语义描述。 2.2.1 gs的属性文法为: (1) s - cm s.chain := merge(c.chain,m.c

8、hain) (2) s - tm s.chain := merge(t.chain,m.chain) (3) m - begin l end m.chain := l.chain (4) c - if b then bakpatch(b.true,nextstat) c.chain := b.false (5) t - c m else q := nextstat emit(goto-) backpatch(c.chain,nextstat) t.chain := merge(m.chain,q) 2.2.2 gb的属性文法为: (1) b - b1 or b2 backpatch(b1.fa

9、lse,b2.codebgin); b.codebegin := b1.codebegin; b.true := merge(b1.true,b2.true); b.false := b2.false (2) b - b1 and b2 backpatch(b1.true,b2.codebegin); b.codebegin := b1.codebegin; b.true := b2.true; b.false := merge(b1.false,b2.false); (3) b - not b1 b.true := b1.false; b.codebegin := b1.codebegin;

10、 b.false := b1.true; (4) b - ( b1 ) b.true := b1.true; b.codebegin := b1.codebegin; b.false := b1.false; (5) b - id1 rop id2 b.true := nextstat; b.codebegin := nextstat; b.false := nextstat+1; emit(ifid1.placeropid2.placegoto-); emit(goto-) (6) b - true b.true := nextstat; b.codebegin := nextstat; emit(goto-) (7) b - false b.false := nextstat; b.codebegin := nextstat; emit(goto-) 其中nextstat给出在输出序列中下一三地址式子的序号。emit过程没调用一次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论