编译原理语法分析实验报告.doc_第1页
编译原理语法分析实验报告.doc_第2页
编译原理语法分析实验报告.doc_第3页
编译原理语法分析实验报告.doc_第4页
编译原理语法分析实验报告.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

编译原理实验报告姓 名 李迪学 号 20092103399专 业计算机科学与技术班 级09计科师范蒙班联 系 电 同 组实验者实验室名 称 403机房实 验日 期2011年11月3日课 程名 称编译原理实 验 序 号 实验二实 验项 目 语法分析主 讲教 师 王斯日古愣辅 导教 师王斯日古愣指 导教 师王斯日古愣实验心得:在实验一词法分析的基础之上,对于编译程序有了新的认识,以词法分析程序的学习为基础,进一步学习了各种语法分析的方法,本次实验通过编制确定的自顶向下预测分析语法分析程序,对预测分析方法有了更深入的理解,同时,通过本次实验使我认识到编译程序在计算机软件开发领域举足轻重的地位,一套好的开发软件,我们必须为其编写一套好的编译软件。本次实验的训练,受益匪浅,对今后深入学习给了很大的启发。学生签名:李迪 2011-11-3 成绩评定及教师评语:成绩: 教师签名: 年 月 日一,实验内容 设计、编制并调式一个语法分析程序,加深对语法分析原理的理解。二,实验目的及要求利用C+(或C)编制确定的自顶向下预测分析语法分析程序,并对简单语言进行语法分析。2.1、待分析的简单语言的语法若文法G E为: (1) E TE (2) E +TE (3) E e (4) T FT (5) T *FT (6) T e (7) F (E) (8) F i2.2、实验要求及说明 具体要求如下:1、用可视化界面分步骤实现,显示输出每一步的处理结果。2、首先按照判别步骤判断给定文法是否LL(1)文法。3、给出文法的预测分析表。4、编写预测分析程序,输出句子的分析过程。5、输入源文件串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“SUCCESS”,否则输出“ERROR”。例如: 输入文件: i+i*(i+i) # 输出 success 过程:略; 输入文件: i+ii# 输出 error三,实验环境Dvc+四,源程序清单#include #include #define MAX 50using namespace std;struct T_NT int code; char strMAX; ;T_NT T12=0,i,1,+,2,*,3,(,4,),5,#,6,!,256,E,257,E,258,T,259,T,260,F; T_NT R8=0,-TR,1,-+TR,2,-e,3,-FW,4,-*FW,5,-e,6,-(E),7,-i;stack stak;int Yy_pushab74=257,258,6, 257,258,1,6, 6, 259,260,6, 259,260,2,6, 0,6, 4,256,3,6;int Yy_d56= 0,-1,-1,0,-1,-1, -1,1,-1,-1,2,2, 3,-1,-1,3,-1,-1, -1,2,4,-1,2,2, 5,-1,-1,6,-1,-1 ;int main() int i=0,j=0,l=0,b=0,h=0,w=0; int q,k,m,n,a,what,p; char c,tMAX; int sMAX; coutc; tl=c; switch(c) casei:sl=0; break; case+:sl=1; break; case*:sl=2; break; case(:sl=3; break; case):sl=4; break; case#:sl=5; break; case!:sl=6; break; l+; coutn LL1文法预测分析表如下:nendlendl; cout ; for(i=0;i6;i+) /printf(%10c,Ti.str); cout Ti.str; coutendl; for(i=0;i5;i+) cout -endl; /printf(%10c,Ti+7.str); cout Ti+7.str; for(j=0;j6;j+) /printf(%10c); cout ; switch(Yy_dij) case 0:coutR0.str; break; case 1:coutR1.str; break; case 2:coutR2.str; break; case 3:coutR3.str; break; case 4:coutR4.str; break; case 5:coutR5.str; break; case 6:coutR6.str; break; case 7:coutR7.str; break; case-1:cout ;break; coutendl; coutendl; coutn 对输入句型的分析如下:nendl; cout 步骤 栈顶元素 剩余输入串 推到所用产生式或匹配endl; cout-n; stak.push(5); stak.push(256); while(!stak.empty() cout b+1; p=stak.top(); /coutpp; for(i=0;i12;i+) / 输出栈顶元素 if(Ti.code=p) cout Ti.str; break; cout ; for(a=w;al;a+) cout=0&p6) / 栈顶是终结符 if(p!=sh) cout 语法错误!; break; else if(p=5) cout 接受endl; cout-n; coutn该句型是该文法的句子n; stak.pop(); else cout 与sh匹配; w+; h+; stak.pop(); else m=p-256; n=sh; what=Yy_dmn; /预测分析表 if(what=-1) cout 没有可用的产生式endl; cout-n; coutn该句型不是该文法的句子n; break; else cout Tp-249.strRwhat.str; /coutsetiosflags(ios:right)Tp-249.s

温馨提示

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

评论

0/150

提交评论