编译原理课程设计 语法制导

上传人:pu****.1 文档编号:562457309 上传时间:2023-11-15 格式:DOCX 页数:10 大小:90.60KB
返回 下载 相关 举报
编译原理课程设计 语法制导_第1页
第1页 / 共10页
编译原理课程设计 语法制导_第2页
第2页 / 共10页
编译原理课程设计 语法制导_第3页
第3页 / 共10页
编译原理课程设计 语法制导_第4页
第4页 / 共10页
编译原理课程设计 语法制导_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《编译原理课程设计 语法制导》由会员分享,可在线阅读,更多相关《编译原理课程设计 语法制导(10页珍藏版)》请在金锄头文库上搜索。

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

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

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

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

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

6、” F “QUAT” F T 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、输入是语法分析后提供的正确的单词串,输出四元式序列输入:/ File testint i; int j; float v: float x; float100 a; while true 】do i * i+1; while( ai v);if( i = j ) break;2: = ai : ai = aj : aj=號;输出:1)L1:L3:i = i +12)L5:tl = i ;* 83)12 = atl 4)if t2 v gotoL49)L6iiffalse1 = jgoto L810)L9:goto L211)L8:t5 = i

8、 *812)x = a t5 13)LIO;t6 = i +814)17 = j *8t8 = a a t6 =t817)LII:t9 = j *818)a t9 # X19)goto LI20)L2:1.4. 程序功能描述从文件中读入表达式,输出其四元式的结果序列 本程序只能生成赋值语句及算数表达式中间代码的四元式 不能生成逻辑表达式及其他复杂语句中间代码的四元式,其功能还需要进 步完善。少兀1=1 o1.5. 实验心得本次实验要实现中间代码生成,也是本学期的最后一次实验,要在前几次实 验的基础上完成,综合比较前几次实验,感觉本次实验难度挺高,首先,前几次 实验的词法分析和语法分析需要有足够

9、高的正确率,否者本次实验中会遇到一些 神奇的问题,不知道错在哪里;其次,对语法制导定义和语法制导翻译要掌握好 才能把握编写思路。本次实验难度较大,编写许久任进展不佳,因此参考了往年 学长的代码,主要是参考了其符号表和回填方法,并且在其代码上进行了适当的 优化。小学期有时间了,还得慢慢研究下本次实验。1.6. 数据结构设计使用递归的结构进行四元式的设计,同时,运用堆栈结构将四元式的输出序 列打印出来。/push(SYN,w)/read(w)/push(SYN,w)/read(w)while ( expi=+ | expi=-) syn+i_syn=expi; i+; T(); quat();wh

10、ile ( expi=* | expi=/) syn+i_syn=expi; i+; F();quat();void quat()strcpy(qtj,(,/QTj:=(SYNk,SEMs-1,SEMs,temp);qtj1=syni_syn; qtj3=semi_sem-1; qtj5=semi_sem; qtj7=temp;/pop(SYN);/pop(SEM);/pop(SEM);/push(SEM,temp);j+; i_syn-; i_sem-; i_sem-; sem+i_sem=temp; temp+;1.7.关键代码分析(带注释/文法符号栈/运算对象栈/算术表达式区/四元式区/

11、临时变量,取值为 r-z/生成四元式函数/输入四元式/read(w)/输出四元式序列#include #include string.h#include stdio.h using namespace std;char syn10;int i_syn; char sem10;int i_sem;char exp50;int i;char qt3015;int j=0; char temp=q;int E();int T();int F();void quat();int main(int argc, char* argv) printf(please input your expression:); scanf(%s,exp);i=0;E();if (expi=0) for (i=0;i=a & expi=0 & expi=9)sem+i_sem=expi; elseprintf(err); return 0; i+; return 1; void quat()strcpy(qtj,( , /QTj:=(SYNk,SEMs-1,SEMs,temp);qtj1=syni_syn; qtj3=semi_sem-1; qtj5=semi_sem; qtj7=temp;j+; i_syn-; i_sem-; i_sem-;sem+i_sem

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

当前位置:首页 > 学术论文 > 其它学术论文

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