编译原理课程设计语法制导_第1页
编译原理课程设计语法制导_第2页
编译原理课程设计语法制导_第3页
编译原理课程设计语法制导_第4页
编译原理课程设计语法制导_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、郑州轻工业学院课程设计说明书题目: 语法制导生成方法 姓 名: 孙雪平 院 (系): 计算机与通信工程学院 专业班级: 计算机科学与技术 学 号: 541007010135 指导教师: 马吉明 成 绩: 时间: 2013年6月 17 日至 2013 年 6 月21日郑州轻工业学院课 程 设 计 任 务 书题目 语法制导生成方法 专业、班级 计科10-01 学号 541007010135 姓名 孙雪平 主要内容、基本要求、主要参考资料等:内容:以语句的四元式中间代码及其语法制导生成为例分析语法制导生成方法。给出FOR或WHILE语句的四元式结构及其语法制导生成过程基本要求:从文件中读入表达式,输

2、出其四元式的结果序列 本程序只能生成赋值语句及算数表达式中间代码的四元式不能生成逻辑表达式及其他复杂语句中间代码的四元式,其功能还需要进一步完善主要参考资料:编译原理第三版 刘铭 徐兰芳 骆婷 编完 成 期 限: 2013 年 6 月 21日指导教师签名: 课程负责人签名: 年 月 日 目录1.实验原理31.1.实验原理31.2.实验目的41.3.实验要求51.4.程序功能描述61.5.实验心得81. 实验原理1.1. 实验原理(1)自顶向下法(推导法)从开始符号出发,采用推导运算,试图自顶向下构造语法树。自底向上法(归约法)从给定的符号串出发,采用归约运算,试图自底向上构造语法树。(2)递归

3、下降子程序法:递归子程序法属于自顶向下语法分析方法。故又名递归下降法。要求文法是LL(1)文法。 LL(1)分析法:LL(1)分析法是指从左到右扫描(第一个 L) 、最左推导(第二个 L)和只查看一个当前符号(括号中的 1)之意;LL(1)分析法又称预测分析法,属于自顶向下确定性语法分析方法。要求文法是LL(1)文法。(3)相同点:都要求文法是LL(1)文法;都是自顶向下的分析方法;都通过分析下个字符来判断该进入哪个状态或者调用哪个函数。 不同点:LL(1)分析法先建立起预测分析表,通过对分析栈的不断操作(出栈,入栈)来进行;递归下降子程序法是通过函数间的函数调用来实现不同状态间的转换,并简化

4、了代码。(4)语法制导翻译是在语法分析过程中,随着分析(推导或归约)的逐步进展,每识别出一个语法结构,根据文法的每个规则所对应的语义子程序进行翻译的方法;核心技术是构造属性翻译文法。(5)假定:SEM(m)- 语义栈(属性传递、赋值场所);QTq 四元式区;G(E):E - T | E+TGEQ(+) | E-TGEQ(-) T - F | T*FGEQ(*) | T/FGEQ(/)F - iPUSH(i) | ( E ) 其中: PUSH(i) 压栈函数(把当前 i 压入语义栈); GEQ(w) 表达式四元式生成函数:生成一个四元式送QTq过程: t := NEWT; 申请临时变量函数; S

5、END(w,SEMm-1,SEMm,t) POP;POP;PUSH(t)1.2. 实验目的(1)设计语法制导翻译生成表达式的四元式的算法;(2)编写代码并上机调试运行通过。输入算术表达式;输出语法分析结果;相应的四元式序列。(3)设计LL(1)分析法或LR(0)分析法的属性翻译文法,并根据这些属性翻译文法,使用扩展的语法分析器实现语法制导翻译。一个小例子:算术表达式文法:G(E): E E 0 T | T T T 1 F | FF i | (E)文法变换:G(E) E T 0 T T F 1 FF i | (E)属性翻译文法:E T 0 “push(SYN, w)” T “QUAT” T F

6、1 “push(SYN, w)” F “QUAT”F i “push(SEM, entry(w)” | (E)其中:push(SYN, w) 当前单词w入算符栈SYN;push(SEM, entry(w) 当前w在符号表中的入口值压入语义栈SEM; QUAT 生成四元式函数 iT = newtemp; iiQTj =( SYNk, SEMs-1, SEMs, T); j+; iiipop( SYN, _ ); pop( SEM, _ ); pop( SEM, _ ); push( SEM, T );递归下降子程序:数据结构:SYN 算符栈;SEM 语义栈;1.3. 实验要求1、采用递归下降语法

7、制导翻译法,对算术表达式,赋值语句进行语义分析生成四元式序列.2、输入是语法分析后提供的正确的单词串,输出四元式序列输入:输出:1.4. 程序功能描述从文件中读入表达式,输出其四元式的结果序列 本程序只能生成赋值语句及算数表达式中间代码的四元式不能生成逻辑表达式及其他复杂语句中间代码的四元式,其功能还需要进一步完善。1.5. 实验心得本次实验要实现中间代码生成,也是本学期的最后一次实验,要在前几次实验的基础上完成,综合比较前几次实验,感觉本次实验难度挺高,首先,前几次实验的词法分析和语法分析需要有足够高的正确率,否者本次实验中会遇到一些神奇的问题,不知道错在哪里;其次,对语法制导定义和语法制导

8、翻译要掌握好才能把握编写思路。本次实验难度较大,编写许久任进展不佳,因此参考了往年学长的代码,主要是参考了其符号表和回填方法,并且在其代码上进行了适当的优化。小学期有时间了,还得慢慢研究下本次实验。1.6. 数据结构设计使用递归的结构进行四元式的设计,同时,运用堆栈结构将四元式的输出序列打印出来。while ( expi=+ | expi=-)syn+i_syn=expi; /push(SYN,w)i+; /read(w)T();quat();while ( expi=* | expi=/)syn+i_syn=expi; /push(SYN,w)i+; /read(w)F();quat();v

9、oid quat()strcpy(qtj,(, , , ); /QTj:=(SYNk,SEMs-1,SEMs,temp);qtj1=syni_syn;qtj3=semi_sem-1;qtj5=semi_sem;qtj7=temp;j+;i_syn-; /pop(SYN);i_sem-; /pop(SEM);i_sem-; /pop(SEM);sem+i_sem=temp; /push(SEM,temp); temp+;1.7. 关键代码分析(带注释)#include #include string.h#include stdio.husing namespace std;char syn10;

10、 /文法符号栈int i_syn;char sem10; /运算对象栈int i_sem;char exp50; /算术表达式区int i;char qt3015; /四元式区int j=0;char temp=q; /临时变量,取值为r-zint E();int T();int F();void quat(); /生成四元式函数int main(int argc, char* argv)printf(please input your expression:); scanf(%s,exp); /输入四元式i=0; /read(w) E();if (expi=0)for (i=0;i=a & expi=0 & expi=9)sem+i_sem=expi; /push(SEM,w)elseprintf(err);return 0;i+; /read(w)return 1;void quat()strcpy(qtj,( , , , ); /QTj:=(SYNk,SEM

温馨提示

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

评论

0/150

提交评论