ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:79.23KB ,
资源ID:17893929      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17893929.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验三 LR1分析表语法分析报告Word文件下载.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验三 LR1分析表语法分析报告Word文件下载.docx

1、实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。实验项目名称: LR(1)分析表语法分析 实验学时: 6 同组学生姓名: 无 实验地点: B513 实验日期: 2011.4.7/4.21 实验成绩:批改教师: 批改时间:一、实验目的和要求语法分析主要目的是按照程序语言的语法规则,从由词法分析输出的源程序符号串中识别出各类语法成分,同时进行语法检查,为语义分析和代码生成作准备.语法分析程序在分析过程中检查符号串是否为该程序的句子.若是则输出该句子的分析树,否则就表示源程序存在语法错误,并报告错误的性质与位置.二、实

2、验仪器和设备主机一台:有Visual Studio 2005工具三、实验过程说明:此程序共有两个类,Lexical进行词法分析,Syntax进行语法分析.对于语法分析,采用LR(1)分析法,判断程序是否满足规定的结构.1:LR-table.txt:存放分析表,其中正数表示移进,负数表示归约,100表示接受状态,0表示不操作。2:grammar.txt 存放文法开始符号3:lengh.txt 存放产生式右部字符长度4:inpur.txt 输入的程序语法规则:定义的文法,如下:(1) Z-E(2) E-E+T(3) E-T(4) T-T*F(5) T-F(6) F-E(7) F-i根据上面文法画出

3、的分层有限自动机并根据分层自动机构造的LR(1)分析表:+*()I#EFS4S5123S6AccR2S7R4485R669710S11R1R311R5语法分析的核心代码和注释如下:using System;using System.Text;using System.IO;namespace Syntax_Analyzer class Syntax StreamReader myStreamReader; int t; int lengh; int l =0; string grammar; int s=0; string Word; int w=0; int wordNum ; int n

4、=0; int, LR; public Syntax() lengh = new int7; grammar=new string7; Word=new string100; wordNum = new int100; LR=new int30,30; public void analyzer() /读入grammar Syntax myTextRead=new Syntax(); Console.WriteLine(-语法分析开始-n); /* /循环读取文法 string strStart; strStart=grammar.txt; myTextRead.myStreamReader=n

5、ew StreamReader(strStart); string strBufferStart; int uu=0; do strBufferStart =myTextRead.myStreamReader.ReadLine(); if(strBufferStart=null) break; foreach (String subString in strBufferStart.Split() grammaruu=subString; /每行文法存入grammar uu+; while (strBufferStart!=null); myTextRead.myStreamReader.Clo

6、se(); /循环读取lenghlengh.txt uu=0; lenghuu=Convert.ToInt32(subString); while (strBufferStart! /* / 读入文件,进行语法分析 / string strReadFile; strReadFile=input.txt myTextRead.myStreamReader=new StreamReader(strReadFile); string strBufferText; int wid =0;分析读入程序(记号ID):n strBufferText =myTextRead.myStreamReader.Re

7、adLine(); if(strBufferText=null) foreach (String subString in strBufferText.Split() if(subString!= int ll; if(subString!=null) ll= subString.Length; /每一个长度 else break; int a=ll+1; char b = new chara; StringReader sr = new StringReader(subString); sr.Read(b, 0, ll); /把substring 读到char数组里 int sort=(in

8、t)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 wordNumwid=4; Console.Write(subString+wordNu

9、mwid+ wid+; Console.WriteLine( while (strBufferText! wordNumwid=5; /* /读入LR分析表 /* string strLR; strLR=LR-table.txt myTextRead.myStreamReader=new StreamReader(strLR); string strBufferLR; int pp=0; strBufferLR =myTextRead.myStreamReader.ReadLine(); if(strBufferLR=null) else int j=0; foreach (String su

10、bString in strBufferLR.Split() int lllr=Convert.ToInt16(subString); LRpp,j=lllr; /把行与列读入数组 j+; pp+; while (strBufferLR! int state = new int100; string symbol =new string100; state0=0; symbol0=# int p1=0; int p2=0;n按文法规则归约顺序如下: /* /归约算法 while(true) int j,k; j=statep2; k=wordNump1; t=LRj,k; /当出现t为的时候

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

12、-语法分析结束-n Console.Read(); class Search public 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 ”字符串,分析如下图所示:四实验结果与分析从这次语法分析实验中,我感到语法分析的过程要比之前的词法分析实验复杂的多,其中涉及到文法规则,自顶向下分析方法和许多编程的细节问题,有一处不正确,语法分析便不能成功。通过这次的语法分析实验,我对如何将文法规则转换为实际的程序代码有了进一步的认识,并且对语法分析过程有了更深入的认识。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1