欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    编译原理课程设计---语法制导(共10页).docx

    • 资源ID:11407292       资源大小:85.47KB        全文页数:10页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    编译原理课程设计---语法制导(共10页).docx

    精选优质文档-倾情为你奉上郑州轻工业学院课程设计说明书题目: 语法制导生成方法 姓 名: 孙雪平 院 (系): 计算机与通信工程学院 专业班级: 计算机科学与技术 学 号: 5 指导教师: 马吉明 成 绩: 时间: 2013年6月 17 日至 2013 年 6 月21日专心-专注-专业郑州轻工业学院课 程 设 计 任 务 书题目 语法制导生成方法 专业、班级 计科10-01 学号 5 姓名 孙雪平 主要内容、基本要求、主要参考资料等:内容:以语句的四元式中间代码及其语法制导生成为例分析语法制导生成方法。给出FOR或WHILE语句的四元式结构及其语法制导生成过程基本要求:从文件中读入表达式,输出其四元式的结果序列 本程序只能生成赋值语句及算数表达式中间代码的四元式不能生成逻辑表达式及其他复杂语句中间代码的四元式,其功能还需要进一步完善主要参考资料:编译原理第三版 刘铭 徐兰芳 骆婷 编完 成 期 限: 2013 年 6 月 21日指导教师签名: 课程负责人签名: 年 月 日 目录1. 实验原理1.1. 实验原理(1)自顶向下法(推导法)从开始符号出发,采用推导运算,试图自顶向下构造语法树。自底向上法(归约法)从给定的符号串出发,采用归约运算,试图自底向上构造语法树。(2)递归下降子程序法:递归子程序法属于自顶向下语法分析方法。故又名递归下降法。要求文法是LL(1)文法。 LL(1)分析法:LL(1)分析法是指从左到右扫描(第一个 L) 、最左推导(第二个 L)和只查看一个当前符号(括号中的 1)之意;LL(1)分析法又称预测分析法,属于自顶向下确定性语法分析方法。要求文法是LL(1)文法。(3)相同点:都要求文法是LL(1)文法;都是自顶向下的分析方法;都通过分析下个字符来判断该进入哪个状态或者调用哪个函数。 不同点:LL(1)分析法先建立起预测分析表,通过对分析栈的不断操作(出栈,入栈)来进行;递归下降子程序法是通过函数间的函数调用来实现不同状态间的转换,并简化了代码。(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; 申请临时变量函数; SEND(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 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、采用递归下降语法制导翻译法,对算术表达式,赋值语句进行语义分析生成四元式序列.2、输入是语法分析后提供的正确的单词串,输出四元式序列输入:输出:1.4. 程序功能描述从文件中读入表达式,输出其四元式的结果序列 本程序只能生成赋值语句及算数表达式中间代码的四元式不能生成逻辑表达式及其他复杂语句中间代码的四元式,其功能还需要进一步完善。1.5. 实验心得本次实验要实现中间代码生成,也是本学期的最后一次实验,要在前几次实验的基础上完成,综合比较前几次实验,感觉本次实验难度挺高,首先,前几次实验的词法分析和语法分析需要有足够高的正确率,否者本次实验中会遇到一些神奇的问题,不知道错在哪里;其次,对语法制导定义和语法制导翻译要掌握好才能把握编写思路。本次实验难度较大,编写许久任进展不佳,因此参考了往年学长的代码,主要是参考了其符号表和回填方法,并且在其代码上进行了适当的优化。小学期有时间了,还得慢慢研究下本次实验。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();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-; /pop(SYN);i_sem-; /pop(SEM);i_sem-; /pop(SEM);sem+i_sem=temp; /push(SEM,temp); temp+;1.7. 关键代码分析(带注释)#include <iostream>#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' /临时变量,取值为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<j;i+) /输出四元式序列printf("%sn",qti);elseprintf("err");return 0;int E()T();while ( expi='+' | expi='-')syn+i_syn=expi; /push(SYN,w)i+; /read(w)T();quat();return 1;int T()F();while ( expi='*' | expi='/')syn+i_syn=expi; /push(SYN,w)i+; /read(w)F();quat();return 1;int F()if ( expi='(')i+; /read(w)E();if ( expi!=')')printf("err");return 0;else if (expi>='a' && expi<='p')|(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,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+;

    注意事项

    本文(编译原理课程设计---语法制导(共10页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开