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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

语法分析器设计Word文档下载推荐.docx

1、SABCDEFGHIJKLM;#2183Ac-345-467-5-2109-12511131512-614-8-7161720-121918-15-92122-132324-14-111.2.2 程序核心代码和注释: public void analyzer() /* /循环读取grammar.txt /* /*此处代码略*/ /循环读取 lengh.txt /*此处代码略*/ /* / 读入文件,进行语法分析 string strReadFile; strReadFile=input.txt myTextRead.myStreamReader=new StreamReader(strRead

2、File); string strBufferText; int wid =0; Console.WriteLine(分析读入程序(记号ID):n); do strBufferText =myTextRead.myStreamReader.ReadLine(); if(strBufferText=null) break; foreach (String subString in strBufferText.Split() if(subString!=) int ll; if(subString!=null) ll= subString.Length; /每一个长度 else break; in

3、t a=ll+1; char b = new chara; StringReader sr = new StringReader(subString); sr.Read(b, 0, ll); /把substring 读到char数组里 int sort=(int)b0; / wordi 和 wordNumi对应 /先识别出一整个串,再根据开头识别是数字还是字母 Wordwid=subString; if(subString.Equals(void) wordNumwid=0; else if(subString.Equals(main wordNumwid=1; else if(subStri

4、ng.Equals() wordNumwid=2; else if(subString.Equals( wordNumwid=3; else if(subString.Equals(int wordNumwid=4; else if(subString.Equals( wordNumwid=6; else if(subString.Equals( wordNumwid=22; else if(subString.Equals( wordNumwid=23; else /识别变量和数字 if(sort47&sort58) wordNumwid=7; else wordNumwid=5; Cons

5、ole.Write(subString+(+wordNumwid+)+ wid+; Console.WriteLine( while (strBufferText!=null); wordNumwid=24; myTextRead.myStreamReader.Close(); /* /读入LR分析表 / /* int state = new int100; string symbol =new string100; state0=0; symbol0=# int p1=0; int p2=0;n按文法规则归约顺序如下: /* / 归约算法如下所显示 while(true) int j,k;

6、j=statep2; k=wordNump1; t=LRj,k; /当出现t为0的时候 if(t=0) /错误类型 string error; if(k=0) error= else if(k=1) if(k=2) if(k=3) if(k=4) if(k=6) if(k=22) if(k=23)其他错误符号 Console.WriteLine(n检测结果:代码中存在语法错误错误状况:错误状态编号为 +j+ 读头下符号为 +error); else if(t=-100) /-100为达到接受状态 Console.WriteLine(代码通过语法检测 break; if(t0) p2=p2+1;

7、 statep2=t; symbolp2=Convert.ToString(wordNump1); p1=p1+1; Console.Read(); 示例:void main ()int i = 8 ;int aa = 10 ;int j = 9 ;intq i = 8 ;对于intq i=8 中 intq这个错误类型,词法分析通过,而语法分析正确识别出了错误,达到预期目标产生出错信息:运行显示如下:13 中间代码生成器设计进入编译程序的第三阶段:中间代码产生阶段。为了使编译程序有较高的目标程序质量,或要求从编译程序逻辑结构上把与机器无关和与机器有关的工作明显的分开来时,许多编译程序都采用了某

8、种复杂性介于源程序语言和机器语言之间的中间语言。常用的几种中间语言有: 逆波兰式、四元式、三元式、树表示。本课程设计主要实现逆波兰式的生成。1.3.1 逆波兰式的定义和设计思想及算法1、逆波兰式定义: 将运算对象写在前面,而把运算符号写在后面。用这种表示法表示的表达式也称做后缀式。逆波兰式的特点在于运算对象顺序不变,运算符号位置反映运算顺序。采用逆波兰式可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。2、生成逆波兰式的设计思想及算法(1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。(2)读入一个用中缀表示的简单算术表达式,为方便起见,设该简单算术表达式的右端

9、多加上了优先级最低的特殊符号“#”。(3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。(4)如果不是数字,该字符则是运算符,此时需比较优先关系。做法如下:将该字符与运算符栈顶的运算符的优先关系相比较。如果该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将此运算符栈顶的运算符从栈中弹出,将该字符入栈。(5)重复上述操作(1)-(2)直至扫描完整个简单算术表达式,确定所有字符都得到正确处理,我们便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简单算术表达式。1.3.2 核心代码及其结果显示#includ

10、emath.h#define max 100char exmax;void trans() char strmax; char stackmax; char ch; int sum,j,t,top=0; int i=0;/*计数器*/ printf(*n*说明:以 # 号为结束标志.n*n表达示: do i+; scanf(%c,&stri); /*注: str0没有数据*/ if(i=max) printf(表达式长度过长! while(stri!=# & i!=max); sum=i; /*数组长度,即表达式长度*/ t=1; i=1; ch=stri; i+; while(ch! swi

11、tch(ch) case (: top+; stacktop=ch;break;) while(stacktop! ext=stacktop; top-; t+; top-;+- while(top!=0&stacktop! top+;*/ while(stacktop=|stacktop= break; default: while(ch0ch9 ext=ch; ch=stri; i+; i-; ext= t+; ch=stri; =0) if(stacktop! ext=stacktop; t+; top-; else printf(error exit(0); ext=n原表达式是: for(j=1;j d=10*d+ch- ch=ext; stacktop=d; ch=ext; t+;n计

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

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