1、3.2 各模块设计8第 4 章程序测试94.1 测试方法94.2 测试结果9第五章结论16参考文献17附录程序清单1718合肥工业大学课程设计任务书设 计题 目将 FOR 语句转换成四元式的程序实现成绩主要内容设计内容及要求:设计一个语法制导翻译器,将 FOR 语句翻译成四元式。要求:先确定一个定义 FOR 语句的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。对用户输入的任意一个正确的 FOR 语句,程序将其转换成四元式输出(可按一定格式输出到指定文件中)。指导教师意见该生能按时完成课程设计任务书所规定的程序设计,综合运用所学知识
2、独立分析和解决问题的能力。程序设计方案。论文论述, 文理,格式。程序运行结果。程序验收时回答问题。签名:第一章 概述1.1 设计内容1.2 设计要求对用户输入的任意一个正确的 FOR 语句,程序将其转换成四元式输出(可按一定格式输出到指定文件中)。第二章 设计的基本原理2.1 词法分析设计词法分析算法,每当语法分析程序需要一个单词时,则调用该算法函数。词法分析程序每调用一次,便从源程序文件中读入一些字符,直到识别出一个单词,送给语法分析器2.2 语法分析采用递归下降方法,为对应文法中的每个非终结符编写一个递归过程, 每个过程的功能是识别由该非终结符推出的串。若输入串是给定文法的句子,则从文法的
3、开始符号出发一定能推导出与输入的单词串完全相同的句子。2.3 语义分析在语法分析的同时可由语法分析程序调用相应的语义子程序进行语义处理,完成附加在所使用的产生式上的语义规则描述,并生成四元式的中间代码形式。2.4 文法描述递归下降法要求文法满足 LL(1)文法,则消除左递归后的文法如下: start spsc eofspsc for parse ; parse ; parse spsc list |elist parse;listparse cdexpr morecdexprs morecdexprs = cdexpr morecdexprscdexpr cdsexpr morecdsexpr
4、s morecdsexprs | cdsexpr morecdsexprscdsexpr cdterm morecdterms morecdterms & cdterm morecdtermscdterm cdsterm morecdsterms morecdsterms = cdsterm morecdsterms| != cdsterm morecdstermscdsterm expr moreexprs moreexprs expr moreexprs| expr term moreterms moreterms + term moreterms| - term moretermster
5、m factor morefactors morefactors * factor morefactors| / factor morefactorsfactor !factor| (cdexpr)| id| num图 1 FOR 循环语句文法描述2.5 属性文法描述将语义规则附加在文法产生式的合适位置上,构成属性文法如下:start spsc eofparse cdexpr morecdexprsmorecdexprs = cdexpr print(“=”) morecdexprscdexpr cdsexpr morecdsexprsmorecdsexprs | cdsexprprint(“
6、|”)morecdsexprscdsexpr cdterm morecdtermsmorecdterms & cdtermprint(“&”) morecdtermscdterm cdsterm morecdstermsmorecdsterms = cdsterm print(“=”) morecdsterms= cdsterm print(“!=”) morecdstermscdsterm expr moreexprsmoreexprs expr print(“”) moreexprs= exprprint(“= exprprint(“expr term moretermsmoreterms
7、 + term print(“+”) moreterms| - term print(“-”) moreterms| eterm factor morefactorsmorefactors * factor print(“*”) morefactors| / factor print(“/”) morefactors factorprint(“!”)| idprint(id.lexeme)| numprint(num.value)图 2 FOR 循环语句属性文法描述2.6 语法分析方法描述递归下降分析方法是一种自顶向下语法分析方法,其目的是从文法的 开始符号开始,根据输入字符串进行最左推导,试
8、图推导出给定的字符串。或者说,从根节点(文法开始符号)开始,自上而下,从左到右地为输入 字符串建立一棵语法树,并以预先确定的顺序创建语法树的节点。递归下 降分析法可能需要回溯,即需要重复地扫描输入。递归子程序法的实现思想是对应每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时,能够按照 LL(1)形式唯一地确定选择某个候选式进行推导, 因此首先要消除左递归。其文法及属性文法如图 1 和图 2 所示。由于递归下降法对每个过程可能存在直接或间接的递归调用,所以对某个过程在退出之前可能又要被调用,因此有些信息需要保留,通常在入口时需保留某些信息
9、,出口时需恢复。由于递归过程是遵循先进后出规律,通常开辟栈来处理。2.7 操作符优先级优先级操作符类型操作对象的个数结合性1()逻辑运算符左右2!逻辑非运算符单目运算符右左3*,/算术运算符双目运算符4+,-5,=关系运算符在对 for 循环语句进行翻译时,涉及到对赋值表达式和布尔表达式语句的翻译。在文法的描述中给出了算术运算符、关系运算符和逻辑运算符之间的优先级关系,其结合性由下表所示:6=,!7逻辑与运算符8|逻辑或运算符9赋值运算符2.8 中间代码形式的描述常见的中间代码形式有逆波兰记号,三元式,四元式和树形表示。本课题设计输出的中间代码的表示方法是四元式。它是带有四个域的记录结构, 这
10、四个域分别称为算符 op,第一运算对象 arg1,第二运算对象 arg2 及结果result。域 op 包含一个代表运算符的内部码。例如 x = y op z 的四元式表示为(op,y,z,x),即将 y 置于 arg1 域,z 置于 arg2 域,x 置于 result 域,= 置于算符域 op,如果 op 是单目运算符,例如非!( x = !y )的四元式表示形式中不用填 arg2。通常,四元式中的 arg1,arg2 和 result 的内容都是一个指针,此指针指向有关名字的符号表入口。这样,临时变量名也要填入符号表中。2.9 中间代码序列的结构设计parse1型如 forparse1;
11、parse2;parse3list的中间代码序列的结构设计如下:TRUEFALSEparse3parse2END图 3 中间代码序列结构设计第三章 程序设计3.1 总体方案设计源文件中间代码语法分析出错处理语义分析词法分析本程序采用递归下降的方法实现 FOR 循环语句的翻译,并以四元式的中间代码形式输出。经过词法分析,语法分析,同时执行语法制导翻译将中间结果表达出来,然后通过一个函数转化成要求的四元式结构的中间代码。上述的这个过程在一遍扫描过程中完成:在语法分析的过程中调用词法分析来不断的分解出下一个句柄;在用递归下降方法进行语法分析的同时进行中间形式数据的保存,在分析出操作符号的同时结合当前栈中的数据输出四元式。3.2 各模块方案设计程序中各阶段的功能如下:(1) 词法分析阶段对源程序流进行扫描,每识别出一个单词,若是标识符,则到符号表中查找,如果符号表中没有此标识符的记录,那么将此标识符插入符号表。最后按照单词其所属的类别,把类标识返回,作为语法分析阶段的输入。词法分析算法在 symr.h 头文件中: void symbolnum();void symbolchar(); void symbolothers(); int Symbolanalysis();(2) 语法及语义分
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1