已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理实验报告表达式语法分析表达式语法分析实验报告一、实验题目 设计一个简单的表达式语法分析器 (采用递归下降方法设计实现)二、实验目的1、 了解形式语言基础及其文法运算;2、 熟悉语法分析原理及4种常用的语法分析方法;其中: 四种算法为(1)设计算术表达式的递归下降子程序分析算法(2)设计算术表达式的LL(1) 分析算法(3)设计算术表达式的简单优先分析算法(4)设计算术表达式的SLR(1) 分析算法 3、选择上述一种方法并设计一个表达式的语法分析器。 (本实验设计的是递归下降的表达式语法分析器)三、实验内容1设计递归下降语法分析器算法;2编写代码并上机调试运行通过;3、写出试验体会及心得。四、实验要求1、 给出算术表达式文法2、 进行适当的文法变换3、 选择一种语法分析的方法,并说明其原理4、 根据原理给出相应的算法设计,说明主要的数据结构并画出算法流程图5、 编写代码并上机调试运行通过6、 写出程序运行结果7、 写出相应的文档以及代码注释 8、输入表达式;输出表达式语法是否正确。五、递归下降的表达式语法分析器设计概要1算术表达式文法 G(E): E E +T | TT T* F | FF i | (E)2文法变换:G(E): E-TE E-+TE| T-FT T-*FT| F-(E)|I 3. 递归下降子程序框图:六、实验设计源程序#include char inputstream50; /存储输入句子int temp=0; /数组下标int right; /判断输出信息void e();void e1();void t();void t1();void f();void main()right=1;cout请输入您要分析的字符串以#结束(为空字符):inputstream;e();if(inputstreamtemp=#)&right)cout分析成功endl;elsecout分析失败endl;void e()coutTEendl;t();e1();void e1()if(inputstreamtemp=+)cout+TEendl;temp+;t();e1();elseif (inputstreamtemp!=#|inputstreamtemp!=)coutendl;return ;elseright=0;void t()coutFTendl;f();t1();void t1()if(inputstreamtemp=*)cout*FTendl;temp+;f();t1();elseif (inputstreamtemp!=#&inputstreamtemp!=)&inputstreamtemp!=+)coutendl;right=0;void f()if(inputstreamtemp=i)coutiendl;temp+;elseif(inputstreamtemp=()cout(E)endl;temp+;e();if(inputstreamtemp=)cout(E)endl;temp+;elseright=0;else right =0;七、运行结果八、实验思考题语法分析的任务是什么?答:语法分析器的任务是识别和处理比单词更大的语法单位,如:程序设计语言中的表达式、各种说明和语句乃至全部源程序,指出其中的语法错误;必要时,可生成内部形式,便于下一阶段处理。 九、实验体会通过此次实验,让我了解到如何设计、编写并调试语法分析部分的相关程序,并加深对语法分析原理的理解;熟悉了构造语法分析程序的手工方式的相关原理,使用某种高级语言(例如C+语言)直接编写此法分析程序。另外,通过本次实验,也让我重新熟悉了C+语言的相关内容,加深了对C+语言知识的深化和用途的理解。表达式中间代码生成一、实验题目表达式中间代码生成二、实验目的熟悉算术表达式的语法分析与中间代码生成原理。三、实验内容1 构造算术表达式的四元式翻译文法2 设计算术表达式的递归下降子程序分析算法3 设计算术表达的四元式生成算法4 实现代码并调试运行四、实验要求1、采用递归下降语法制导翻译法,对算术表达式,赋值语句进行语义分析并生成四元式序列.2、输入是语法分析后提供的正确的单词串,输出四元式序列.例如:对于语句串Begin a:=2+3*4;x:=(a+b)/c end#输出的指令如下:(1) t1=3*4(2) t2=w+t1(3) a=t2(4) t3=a+b(5) t4=t3/c(6) x=t4五、设计原理1、原文法: EVA_SENTENCE id := E E E 0 T E T T T 1 F T F F id F cons F (E) 其中:id 标识符; cons 常数。 2、属性文法G(E): 产生式 语义规则 规则编码EVA_SENTENCE id := E QUAT(:=); E E 0 T QUAT(0); (1)E.place:= ti.entry;E T E.place:=T.placeT T 1 F QUAT(1); (1)T.place:= ti.entry; T F T.place:=F.place F id F.place:=id.entry (2) F cons F.place:=cons.entry (2) F (E) F.place:=E.place (3)其中:(1)QUAT(:=) 生成一个赋值四元式; i. (:=, E.place, _, id.entry); ii. j+; (2)QUAT(0) 生成一个运算四元式; i. ti:=newt(i); /申请一个临时变量 ii. (0, E.place, T.place, ti.entry); iii j+; (3)QUAT(1) 类似QUAT(0)。 i. ti:=newt(i); /申请一个临时变量 ii. (1, T.place, F.place, ti.entry); iii j+;六、程序设计的算法思想1、设置语义过程 Emit( char * result, char * ag1, char * op, char * ag2)该函数的功能是生成一个三地址语句送到四元式表达中.2、四元式表达的结构如下:Struct Char result8;Char ag18;Char op8;Char ag28;quad20Char * newtemp()该函数回送一个新的临时变量名,临时变量名产生的顺序为t1,t2,. 3、算法设计:七、实验设计源程序#include#include#include char prog80,token8;char ch;int syn,p,m,n,sum;int kk=0,ii,N,nn=0;int k=0,t,i=0;char tt;char * rwtab6 = begin,if,then,while,do,end;int scaner();int lrparser();int statement();int yucu();char *term();char *factor();char *expression();void emit();structchar resulted8;char ag1ed8;char oped8;char ag2ed8;quad20;void main()p=0; printf();printf(n please input string: n);printf(n);printf(n);printf(n);doscanf(%c,&ch);progp+=ch;while(ch != #);p=0;scaner();lrparser();printf(n);char * newtemp( void)char * P;char M8;P = (char *)malloc(8);k+;itoa(k,M,10);strcpy(P+1,M);P0 = t;return(P);int lrparser()int schain = 0;kk = 0;if(syn = 1)scaner();schain = yucu();if(syn = 6)scaner();if(syn = 0 & (kk = 0)printf(success);else if(kk!=1)printf(缺end错误);kk=1;elseprintf(begin错误);kk=1;return(schain);int yucu()int schain = 0;schain = statement();while (syn = 26)scaner();schain = statement();return(schain);int statement()char tt8,eplace8;int schain = 0;switch(syn)case 10:strcpy(tt,token);scaner();if(syn = 18)scaner();strcpy(eplace,expression();emit(tt,eplace,);schain = 0;elseprintf(缺少赋值号);kk=1;return(schain);break;char * expression(void)char * tp,* ep2,* eplace,* tt;tp = (char *)malloc(12);ep2 = (char *)malloc(12);eplace = (char *)malloc(12);tt = (char *)malloc(12);strcpy(eplace,term();while(syn = 13 | syn = 14)strcpy(tt,token);scaner();strcpy(ep2,term();strcpy(tp,newtemp();emit(tp,eplace,tt,ep2);strcpy(eplace,tp);return(eplace);char * term(void)char * tp,* ep2,* eplace,* tt;tp = (char *)malloc(12);ep2 = (char *)malloc(12);eplace = (char *)malloc(12);tt = (char *)malloc(12);strcpy(eplace,factor();while(syn = 15 | syn = 16)strcpy(tt,token);scaner();strcpy(ep2,factor();strcpy(tp,newtemp();emit(tp,eplace,tt,ep2);strcpy(eplace,tp);return(eplace);char * factor(void)char * fplace;fplace = (char *)malloc(12);strcpy(fplace, );if(syn = 10)strcpy(fplace,token);scaner();else if (syn = 11)itoa(sum,fplace,10);scaner();else if(syn = 27)scaner();strcpy(fplace,expression();if(syn = 28)scaner();elseprintf()错误);kk=1;elseprintf(错误);kk=1;return(fplace);void emit(char * result,char * ag1,char * op,char * ag2)strcpy(quadnn.resulted,result);strcpy(quadnn.ag1ed,ag1);strcpy(quadnn.oped,op);strcpy(quadnn.ag2ed,ag2);printf(%d) %s=%s%s%sn, nn+1,quadnn.resulted,quadnn.ag1ed,quadnn.oped,quadnn.ag2ed);nn+; scaner() for(n=0;n=a) & (ch=a) & (ch=0) & (ch=9) tokenm+=ch; ch=progp+; tokenm+=0;p-;syn=10;for(n=0;n=0 & ch=0)&(ch=9) sum=sum*10+(int)ch-0; ch=progp+; p-; syn=11;else switch(ch) case) syn=21; tokenm+=ch; else if(ch=) syn=22; tokenm+=ch; else syn=20;ch=progp+; break; case:m=0;tokenm+=ch; ch=progp+; if(ch=) syn=24; tokenm+=ch; else syn=23; p-; break; break; case: m=0; tokenm+=ch; ch=progp+; if(ch=) syn=18; tokenm+=ch; else syn=17; p-; break; case+:syn=13;token0=ch;break; case-:syn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026平台采购面试题及答案
- 2026陕西中烟面试题目及答案
- 2026审计局面试题及答案分析
- 2026省医院客服面试题及答案
- 2026厅级领导面试题及答案
- 可编程控制器技术应用课件 16高速计数器
- 2026往年综招面试题目及答案
- 2026文职参谋面试题及答案
- 2026届北京市朝阳区高三数学高考冲刺模拟试卷(含答案详解与评分标准)
- 2026届上海市浦东新区九年级数学中考冲刺模拟试卷(含答案详解与评分标准)
- 安全生产经费投入及使用管理制度培训
- 2026-2030中国煤制氨行业市场发展分析及发展趋势与投资前景研究报告
- (公考专用)2026年事业单位考试时事政治大全及模拟题
- 劳务输出旅居人群性病防护指南
- 基层医疗机构皮下注射操作规范
- 小学英语人教版(PEP)(2024)四年级下册单词竞赛试题(无答案)
- 鲜风生活社区门店布局
- 2026守己利他-智能时代做负责任的技术白皮书
- 2026年高考化学命题趋势分析研究与复习策略
- 地铁扶梯安装监理实施细则
- 货运站场地安全管理制度
评论
0/150
提交评论