for循环语句的翻译

上传人:woxinch****an2018 文档编号:39303459 上传时间:2018-05-14 格式:DOC 页数:17 大小:269KB
返回 下载 相关 举报
for循环语句的翻译_第1页
第1页 / 共17页
for循环语句的翻译_第2页
第2页 / 共17页
for循环语句的翻译_第3页
第3页 / 共17页
for循环语句的翻译_第4页
第4页 / 共17页
for循环语句的翻译_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《for循环语句的翻译》由会员分享,可在线阅读,更多相关《for循环语句的翻译(17页珍藏版)》请在金锄头文库上搜索。

1、武汉理工大学编译原理课程设计1课程设计任务书课程设计任务书学生姓名:学生姓名: 辛波辛波 专业班级:专业班级: 计算机计算机 07070707 班班 指导教师:指导教师: 彭德巍彭德巍 工作单位:工作单位:计算机科学与技术学院计算机科学与技术学院 题目题目: : FORFOR 循环语句的翻译程序设计(递归下降法、输出四元式)循环语句的翻译程序设计(递归下降法、输出四元式)初始条件:初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进 行设计。要求完成的主要任务要求完成的主要任务: : (包括课程设计工作量及其技术要求

2、,以及说明书撰写等具体要求) (1) 写出符合给定的语法分析方法的文法及属性文法。 (2) 完成题目要求的中间代码四元式的描述。 (3) 写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4) 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5) 设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述) ; 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码) ; 7 软件的测试方法和

3、测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等) ; 9 参考文献(按公开发表的规范书写) 。时间安排:时间安排:设计安排一周:周 1、周 2:完成系统分析及设计。 周 3、周 4:完成程序调试及测试。 周 5:撰写课程设计报告。 设计验收安排:设计周的星期五第 1 节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午 10 点。指导教师签名:指导教师签名: 20102010 年年 0101 月月 0808 日日系主任(或责任教师)签名:系主任(或责任教师)签名: 20102010 年年 0101 月月 0808 日日武汉理工大学编译原理课程设

4、计2FOR 循环语句的翻译程序设计-递归下降法、输出四元式递归下降法、输出四元式1 系统描述11 目的通过设计、编制、调试一个 FOR 循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。12 设计内容及步骤对循环语句: FOR(表达式 1;表达式 2;表达式 3) 赋值语句(1)写出递归下降语法分析方法要求的文法和属性文法描述。(2)描述递归下降语法分析方法的思想。(3)给出中间代码序列的结构设计。(4)完成相应的词法分析、语法分析和语义分析程序设计。121 词法分析将词法分析程序设计成一个子程序,每当语法分析程序需要一个单词时,则调用

5、该子程序。词法分析程序每调用一次,便从源程序文件中读入一些字符,直到识别出一个单词。122 语法分析采用递归下降方法,为对应文法中的每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串。若输入串是给定文法的句子,则从文法的开始符号出发一定能推导出与输入的单词串完全相同的句子。123 语义分析在语法分析的同时可由语法分析程序调用相应的语义子程序进行语义处理,完成附加在所使用的产生式上的语义规则描述,并生成四元式的中间代码形式。124 测试用例和测试结果设计不同的测试用例以显示程序的各种功能,包括简单的 for 循环和 for 循环的嵌套。并记录测试结果。武汉理工大学编译原理课程

6、设计32 文法及属性文法的描述21 文法描述 本系统中所使用 FOR 循环语句的文法包括 FOR 语句本身,赋值表达式和布尔表达式。具体文法产生式如下:211 FOR 语句相关的产生式:1)S-for(W)Sx 2)W-A;W13)W1-B;W2 4)W2-A5)Sx-Ax 6)Sx-Am7)Am-AmAx 8)Am-Ax212 布尔表达式:9)B-B|L 10)B-L11)L-L 27)A-id=E28)E-E+T 29)E-E-T30)E-T 31)T-T*F32)T-T/F 33)T-F34)F-id 35)F-(E)36)F-num22 属性文法的描述武汉理工大学编译原理课程设计4产生

7、式属性文法S-for(W)Sxemit(1);/生成最后一个 jumpbackpatch(nextstat,LastGotoAddress);/回填最后一个 jump;backpatch(W.FalseOrEnd ,nextstat);/B 为假则跳到最后一个语句W1-B;W2backpatch(B.TrueOrChain , W2.TrueOrChain ); backpatch(W2.FalseOrEnd , B.codeBegin );W2-Aemit(4);/输出跳转W2.TrueOrChain = nextstat;W2.FalseOrEnd = nextstat-1;Sx-Am去掉

8、B-B1|Lbackpatch(B1.FalseOrEnd, L.codeBegin );/回填B.codeBegin =B1.codeBegin ;B.TrueOrChain=chainMerge(B1.TrueOrChain, L.TrueOrChain);B.FalseOrEnd = L.FalseOrEnd ;LastGotoAddress=nextstat;/记录最后 jump 回填地址B-LLastGotoAddress=nextstat;/记录最后 jump 回填地址L-L1/回填L.codeBegin =L1.codeBegin ;L.TrueOrChain =M.TrueOr

9、Chain ;L.FalseOrEnd = chainMerge(L1.FalseOrEnd , M.FalseOrEnd );M-!M1M.TrueOrChain =M1.FalseOrEnd;M. FalseOrEnd =M1。TrueOrChainM.codeBegin =M1.codeBegin ;武汉理工大学编译原理课程设计5K-idScidK.TrueOrChain =nextstat;K.codeBegin =nextstat;K.FalseOrEnd = nextstat+1;emit(J+Sc,id,id, );/输出跳转语句emit(jump,-,-, );A-id=Eem

10、it(E,- ,- ,id);/输出赋值语句E-EoperT(oper 为+-*/)emit(oper , E , T , temp);/输出表达式3 语法分析方法描述及语法分析表设计31 语法分析方法描述递归下降分析方法是一种自顶向下语法分析方法,其目的是从文法的开始符号开始,根据输入字符串进行最左推导,试图推导出给定的字符串。或者说,从根节点(文法开始符号)开始,自上而下,从左到右地为输入字符串建立一棵语法树,并以预先确定的顺序创建语法树的节点。递归下降分析法可能需要回溯,即需要重复地扫描输入。递归子程序法的实现思想是对应每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的

11、串,当某非终结符的产生式有多个候选式时,能够按照LL(1)形式唯一地确定选择某个候选式进行推导,因此首先要消除左递归。其文法及属性文法如图 1 和图 2 所示。由于递归下降法对每个过程可能存在直接或间接的递归调用,所以对某个过程在退出之前可能又要被调用,因此有些信息需要保留,通常在入口时需保留某些信息,出口时需恢复。由于递归过程是遵循先进后出规律,通常开辟栈来处理。32 操作符优先级在对 for 循环语句进行翻译时,涉及到对赋值表达式和布尔表达式语句的翻译。在文法的描述中给出了算术运算符、关系运算符和逻辑运算符之间的优先级关系,其结合性由下表所示:武汉理工大学编译原理课程设计6优先级操作符类型

12、操作对象的个数结合性1()逻辑运算符左右2!逻辑非运算符单目运算符右左3*,/算术运算符双目运算符左右4+,-算术运算符双目运算符左右5,=关系运算符双目运算符左右6=,!=关系运算符双目运算符左右7parse2;parse3list的中间代码序列的结构设计如下:武汉理工大学编译原理课程设计7parse1parse2parse3listTRUEENDFALSE图 4 中间代码序列结构设计5 简要的分析和概要设计51 简要的分析本程序采用递归下降的方法实现 FOR 循环语句的翻译,并以四元式的中间代码形式输出。经过词法分析,语法分析,同时执行语法制导翻译将中间结果表达出来,然后通过一个函数转化成

13、要求的四元式结构的中间代码。上述的这个过程在一遍扫描过程中完成:在语法分析的过程中调用词法分析来不断的分解出下一个句柄;在用递归下降方法进行语法分析的同时进行中间形式数据的保存,在分析出操作符号的同时结合当前栈中的数据输出四元式。程序中各阶段的功能如下:(1) 词法分析阶段武汉理工大学编译原理课程设计8对源程序流进行扫描,每识别出一个单词,若是标识符,则到符号表中查找,如果符号表中没有此标识符的记录,那么将此标识符插入符号表。最后按照单词其所属的类别,把类标识返回,作为语法分析阶段的输入。(2) 语法及语义分析阶段由文法开始符号对应的子程序控制 for 循环语句各个模块的执行顺序,并由文法开始

14、符号对应的子程序递归调用其他的子程序,对各个模块采用自顶向下,自左至右的推导方法完成对输入字符进行匹配的工作,试图推导出与输入符号串一致的文法的句子。(3) 中间代码生成阶段控制代码的输出形式,以四元式形式输出中间代码52 概要设计521 数据结构本程序使用符号表以及数组来存储长短不一的标识符。将标识符的字符串放入一个单独的数组 lexemes,每个字符串用一个字符串终结符 EOS(0)结束。符号表采用结构体数组 symtable 来表示,每一个表项有两个域的记录:第一个域是指向数组lexemes 中字符串的开始位置的指针域,另一个域是用来存放标识符记号的 token 域。图 5 符号表和存储

15、字符串的数组KEY div divdivdiv数组 symtablelexptrtokenforEOSiEOShowEOSareEOSyouEOS存储字符串的数组 lexemes武汉理工大学编译原理课程设计9定义符号表的数据结构如下:struct entrychar *lexptr; /*符号表的指针域*/int token; /*符号表的标识域*/;struct quadruplesint qt;/*保存将要输出的单词的标识*/int qtval;/*保存将要输出的单词的值*/;/*为符号表分配一个存储空间*/struct entry symtable999;/*保存将要输出的四元式信息*/struct quadruples quadtable38

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

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号