logo资料库

DO-WHILE循环语句的翻译程序设计.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
武汉理工大学《编译原理》课程设计说明书 课程设计任务书 学生姓名: 专业班级: 指导教师: 工作单位:计算机科学与技术学院 题目: DO-WHILE 循环语句的翻译程序设计(简单优先法、输出三地址表示) 初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设 计。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1) 写出符合给定的语法分析方法的文法及属性文法。 (2) 完成题目要求的中间代码三地址表示的描述。 (3) 写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4) 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5) 设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周 1、周 2:完成系统分析及设计。 周 3、周 4:完成程序调试及测试。 周 5:撰写课程设计报告。 设计验收安排:设计周的星期五第 1 节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午 10 点。 指导教师签名: 2010 年 11 月 23 日 系主任(或责任教师)签名: 2010 年 11 月 23 日 1
武汉理工大学《编译原理》课程设计说明书 1 系统描述: 通过分析,设计、编制一个 DO-WHILE 循环语句。利用已经掌握的语法及语义分析的原理 和实现的步骤来调试和实现它,加深对语法及语义分析原理的理解,并实现词法分析程序对 单词序列的词法的合理性检查的出错处理。 2 文法和属性文法的描述: 可以定义文法为四元组: G=(VN,VT,P,S) 其中 VN 表示非终结符,VT 表示终结符,P 为规则(αβ)的集合,α∈(VN U VT)*且至少包 含一个非终结符,β∈(VN U VT)* , VN, VT 和 P 是非空有穷集,S 为开始符号,它是一个非终 结符。其产生式和属性文法规则为: {acc} S’#S# Gdo{ B} while{ E}; Bid=C CA+A CA*A CA EA>A EA Am {print(“do{ B} while{ E};”)} {print(“id = C”)} {A1.type=A2.type AND C.type=A1.type AND C.value=A1.value (+) A2.value} {A1.type=A2.type AND C.type=A1.type AND C.value=A1.value (+) A2.value} {print(“A”)} {print(“A>A”)} {print(“A”)} {m.type=A.type,print(“m”)} 3 语法分析方法描述及语法分析表设计; 3.1 分析方法描述: 此次课程设计中要求分析方法是简单优先分析法,由简单优先分析方法原理及简单优 先文法的定义要求,首先构造简单优先矩阵确定文法符号(终结符或非终结符)的优先关系, 然后根据文法符号(终结符或非终结符)的优先关系确定句柄,进行归约。简单优先级文法 必须满足两个条件: (1) 任何两个符号之间最多只有一种优先关系。 (2) 任何两个产生式没有相同的右部。 2
武汉理工大学《编译原理》课程设计说明书 3.2 优先关系: 由于简单优先分析方法获得句柄,进行规约是通过比较文法符号(终结符或非终结符) 之间的优先而得到的,所以必须设定优先级规则,再构造优先矩阵。我们规定了 3 中优先 关系: X=Y 当且仅当文法中存在产生式规则 A….XY XY…… X>Y 当且仅当文法中存在产生式规则 A….BD…. 且 B=>….X 和 D=>Y….. 3.3 语法分析实现过程: 根据自己已经设定好的优先文法,根据要求构造相应的优先关系矩阵,并将文法的产生 式保存,设置用于进行规约的数据结构符号栈 S,算法步骤如下: 1 将输入符号串 a1a2a3a4a….an#依次逐个存入符号战 S 中,直到遇到栈顶符号 ai 的优先级 大于下一个符号为止。 2 栈顶的当前符号 ai 为句柄尾,由此向左在栈中找句柄的头符号 ak,找到 ak-1
武汉理工大学《编译原理》课程设计说明书 (1) (2) (3) (4) T1:=b+c T2:=2*d a:=T1 if a
武汉理工大学《编译原理》课程设计说明书 6 具体实现算法描述: 6.1 建立简单优先级矩阵: 在本实验的程序中关键在于简单优先矩阵的构造,这是此次课程设计中的重中之重。因 为在语法分析中,一切字符串形成句柄并进行规约,都是根据简单优先矩阵来确定的。 所以首先建立简单优先矩阵,如下所示:(其中 N 表示两者不相邻,-1 表示小于,0 表示 等于,1 表示大于) 6.2 语法分析的实现: 首先建立一个符号栈 Sym,首先将#压入栈 Sym 中,然后与第一个词法分析获得的单词根 据简单优先矩阵进行优先级大小的比较,假如优先级较小或等于,则将其压入 Sym 中,取得 当前 Sym 中的栈顶元素与下一个单词进行比较,如此反复,直到遇到下一个输入的单词的优 先级大于当前 Sym 栈顶的元素。再依次回推,遇到第一个小于优先级符号,则将优先级不同 符号两者之间的字符串与文法句子比较,若满足文法规定条件则进行规约,将规约后的式子 用文法规定的字符替代,继续参与分析,直到分析完毕,规约到文法的开始符号完成整个分 析过程。若不符合条件,则输出出错信息,不再进行规约。 5
武汉理工大学《编译原理》课程设计说明书 6.3 程序流程图: 开始 读入字符串 词法分析 将#号入栈 从识别的单词中读取 一个单词 小(等)于 栈 顶 相 邻 元 素 优 先级比较 大于 将单词压入栈中 取栈顶元素 读取下一个单词 向栈底回推 小于 大于 相邻元素比较 Y N 满足文法 向后取下一个 规约 出错 结束 6
武汉理工大学《编译原理》课程设计说明书 6.4 算法实现的关键代码: void Yufafenxi()//简单优先语法分析 { char c; //保存栈顶元素 char t1; //规约时判断是否规约的栈顶元素 char t2; //规约时判断是否规约的次栈顶元素 cout<<"归约过程如下:"<
武汉理工大学《编译原理》课程设计说明书 case 1: { do { t1 = Sta.TopValue(); buf[count1][0]=0; buf[count1][count2]=t1; count2++; t2 = Sta.NextTop(); Sta.Pop(c);//栈顶出栈 }while(Compare(t2, t1) != -1); /* cout<=0;j--) cout<
分享到:
收藏