编译原理-实验报告实验三--语法分析(LR分析程序)

上传人:29 文档编号:59307878 上传时间:2022-03-02 格式:DOC 页数:9 大小:77.50KB
收藏 版权申诉 举报 下载
编译原理-实验报告实验三--语法分析(LR分析程序)_第1页
第1页 / 共9页
编译原理-实验报告实验三--语法分析(LR分析程序)_第2页
第2页 / 共9页
编译原理-实验报告实验三--语法分析(LR分析程序)_第3页
第3页 / 共9页
资源描述:

《编译原理-实验报告实验三--语法分析(LR分析程序)》由会员分享,可在线阅读,更多相关《编译原理-实验报告实验三--语法分析(LR分析程序)(9页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上华北水利水电学院 编译原理 实验报告20122013学年 第 一 学期 2011 级 计算机科学与技术 专业班级: 学号: 姓名: 一、 实验题目:语法分析(LR分析程序)(1)选择最有代表性的语法分析方法LR分析法;(2)选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。二、 实验内容(1)根据给定文法,先求出FirstVt和LastVt集合,构造算符优先关系表(要求算符优先关系表输出到屏幕或者输出到文件);(2)根据算法和优先关系表分析给定表达式是否是该文法识别的正确的算术表达式(要求输出归约过程)(3)

2、给定表达式文法为:G(E): E#E#EE+T | TTT*F |FF(E)|i(4) 分析的句子为: (i+i)*i和i+i)*i三、 根据以上文法构造出的LR(1)分析表为:+*()I#ETF0S4S51231S6Acc2R2S7R2R23R4R4R4R44S4S58235R6R6R6R66S4S5937S4S5108S6S119R1S7R1R110R3R3R3R311R5R5R5R5四、程序源代using System;using System.Text;using System.IO;namespace Syntax_Analyzerclass SyntaxStreamReader m

3、yStreamReader;int t;int lengh;int l =0;string grammar;int s=0;string Word;int w=0;int wordNum ;int n =0;int, LR;public Syntax() lengh = new int7; grammar=new string7; Word=new string100; wordNum = new int100; LR=new int30,30;public void analyzer()/读入grammarSyntax myTextRead=new Syntax();Console.Writ

4、eLine(-语法分析开始-n);/*/循环读取文法/*string strStart;strStart=grammar.txt;myTextRead.myStreamReader=new StreamReader(strStart);string strBufferStart;int uu=0;dostrBufferStart =myTextRead.myStreamReader.ReadLine();if(strBufferStart=null)break;foreach (String subString in strBufferStart.Split()grammaruu=subStr

5、ing; /每行文法存入grammaruu+;while (strBufferStart!=null);myTextRead.myStreamReader.Close();/*/循环读取lengh/*strStart=lengh.txt;myTextRead.myStreamReader=new StreamReader(strStart);uu=0;dostrBufferStart =myTextRead.myStreamReader.ReadLine();if(strBufferStart=null)break;foreach (String subString in strBufferS

6、tart.Split()lenghuu=Convert.ToInt32(subString); /每行文法存入grammaruu+;while (strBufferStart!=null);myTextRead.myStreamReader.Close();/*/ 读入文件,进行语法分析/*string strReadFile;strReadFile=input.txt;myTextRead.myStreamReader=new StreamReader(strReadFile);string strBufferText;int wid =0;Console.WriteLine(分析读入程序(

7、记号ID):n);dostrBufferText =myTextRead.myStreamReader.ReadLine();if(strBufferText=null)break;foreach (String subString in strBufferText.Split()if(subString!=)int ll;if(subString!=null)ll= subString.Length; /每一个长度elsebreak;int a=ll+1;char b = new chara;StringReader sr = new StringReader(subString);sr.R

8、ead(b, 0, ll); /把substring 读到char数组里int sort=(int)b0;/ wordi 和wordNumi对应/先识别出一整个串,再根据开头识别是数字还是字母Wordwid=subString;if(subString.Equals(+)wordNumwid=0;else if(subString.Equals(*)wordNumwid=1;else if(subString.Equals()wordNumwid=2;else if(subString.Equals()wordNumwid=3;else if(subString.Equals(i)wordNu

9、mwid=4;Console.Write(subString+(+wordNumwid+)+ );wid+;Console.WriteLine(n);while (strBufferText!=null);wordNumwid=5;myTextRead.myStreamReader.Close();/*/读入LR分析表/*string strLR;strLR=LR-table.txt;myTextRead.myStreamReader=new StreamReader(strLR);string strBufferLR;int pp=0;dostrBufferLR =myTextRead.my

10、StreamReader.ReadLine();if(strBufferLR=null)break;elseint j=0;foreach (String subString in strBufferLR.Split()if(subString!=null)int lllr=Convert.ToInt16(subString);LRpp,j=lllr; /把行与列读入数组j+;pp+;while (strBufferLR!=null);myTextRead.myStreamReader.Close();int state = new int100;string symbol =new stri

11、ng100;state0=0;symbol0=#;int p1=0;int p2=0;Console.WriteLine(n按文法规则归约顺序如下:n);/*/归约算法/*while(true)int j,k;j=statep2;k=wordNump1;t=LRj,k; /当出现t为的时候if(t=0)/错误类型 string error = ; if (k = 0) error = +; else if (k = 1) error = *; else if (k = 2) error = (; else if (k = 3) error = ); else if (k = 4) error

12、= i; else error = 其它错误!;Console.WriteLine(n检测结果:);Console.WriteLine(代码中存在语法错误);Console.WriteLine(错误状况:错误状态编号为+j+ 读头下符号为+error);break;elseif(t=-100) /-100为达到接受状态Console.WriteLine(n);Console.WriteLine(n检测结果:);Console.WriteLine(代码通过语法检测);break;if(t0)p2=p2+1;statep2=t;symbolp2=Convert.ToString(wordNump1

13、);p1=p1+1;myTextRead.myStreamReader.Close();Console.WriteLine(-语法分析结束-n);Console.Read();class Searchpublic int search(string x)string mysymbol=new string3;mysymbol0=E;mysymbol1=T;mysymbol2=F; int r = 0;for(int s=0;s=2;s+)if(mysymbols.Equals(x)r=s+6 ;return r;五、测试结果输入”( i + i ) * i”字符串,分析如下图所示输入”i + i ”字符串,分析如下图所示六、小结(包括收获、心得体会、存在的问题及解决问题的方法、建议等)本次实验是LR分析法,LR分析法是一种有效的自上而下分析技术,在自左向右扫描输入串时就能发现其中的任何错误。不会的要在书中去寻找;要会运用现代的网络去寻找新知识;要对新知识不断的探索;要有勇于探索与创新的精神。经过这次实验,使我的编程能力得到了很大的锻炼。专心-专注-专业

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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