已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二:语法分析(递归下降法)一、实验目的1、掌握语法分析的基本原理;2、掌握递归下降的分析法;3、熟悉C语言程序设计。二、实验准备微机CPU主频1.3G以上,128M内存,安装好C语言,PASCAL语言,或C+。三、实验时间 2学时四、实验内容已给语言文法,写出该文法的递归下降法语法分析器。输入:源符号串。 输出:语法是否合法。 :文法:(1) := beginend(2) := ;(3) := (4) := ID:=(5) := +|-(6) := *|/(7) := ID|NUM|()五:源程序:lrparser()对应 yucu() 对应 statement() 对应 expression()对应 term() 对应 factor() 对应 关键字,数字,字母,符号对应码如下begin, if, then, while, do, end 16字母 10 数字11+,-,*,/,:,:=,=,=,;,(,),# 1328,0factor() #include stdio.h#include string.hchar prog80, token8;char ch;int syn, p, m, n, sum, kk=0;char *rwtab6=begin, if, then, while, do, end;void scaner();void lrparser();void yucu();void statement();void expression();void term();void factor();void main() p=0; printf(Please input string:n); do scanf(%c, &ch); progp+=ch; while(ch!=#); /当遇到#,结束输入 p=0; scaner(); lrparser();void scaner() for(n=0; n=A&ch=a&ch=A&ch=a&ch=0&ch=9) tokenm+=ch; ch=progp+;/将prog数组的字母复制到ch数组中 tokenm+=0; /把token的末尾设置结束符0 p-;/标记到当前token数组中不是字母的当前位置 syn=10; /标记字母的对应码 for(n=0; n=0&ch=0&ch=9) sum=sum*10+ch-0; /number用来记录所对应的数字 ch=progp+; p-; syn=11; /标记数字的对应码 else switch(ch) case ) syn=21; /标记”的对应码 tokenm+=ch; else if(ch=) syn=22; /标记”=”的对应码 tokenm+=ch; else syn=20; /标记”: tokenm+=ch; ch=progp+; if(ch=) syn=24; /标记”=”的对应码 tokenm+=ch; else syn=23; /标记”的对应码 p-; break; case : tokenm+=ch; ch=progp+; if(ch=) syn=18; /标记”:=”的对应码 tokenm+=ch; else syn=17; /标记”:”的对应码 p-; break; case +: syn=13; /标记”+”的对应码 tokenm+=ch; break; case -: syn=14; /标记”-”的对应码 tokenm+=ch; break; case *: syn=15; /标记”*”的对应码 tokenm+=ch; break; case /: syn=16; /标记”/”的对应码 tokenm+=ch; break; case =: syn=25; /标记”=”的对应码 tokenm+=ch; break; case ;: syn=26; /标记”;”的对应码 tokenm+=ch; break; case (: syn=27; /标记”(”的对应码 tokenm+=ch; break; case ): syn=28; /标记”)”的对应码 tokenm+=ch; break; case #: syn=0; /标记”#”的对应码 tokenm+=ch; break; default: syn=-1; /当不是上述字母,数字,符号时,设置syn=-1 tokenm+=0; void factor()/因子 if(syn=10 | syn=11) /当扫描的是数字或字母时,继续扫描 scaner(); else if(syn=27) /当扫描的(时,继续扫描 scaner(); expression(); if(syn=28) /当扫描的是)时,继续扫描 scaner(); else kk=1; printf(ERROR: )错误n);/表达式缺乏),出错 else kk=1; printf(ERROR: 表达式错误n);/扫描表达式,表达式开头不是(,出错 void term()/项 factor(); while(syn=15 | syn=16) /当开头扫描的是*或/时,继续扫描 scaner(); factor(); void expression()/表达式 term(); while(syn=13 | syn=14) /当开头扫描的是+或-时,继续扫描 scaner(); term(); void statement()/语句 if(syn=10) /当开头扫描的是字母时,继续扫描 scaner(); if(syn=18) /扫描的是:=时,继续扫描 scaner(); expression(); else kk=1; printf(ERROR: 赋值号错误n);/当扫描的是:=,出错 else kk=1; printf(ERROR: 语句错误n); void yucu()/语句串 statement(); while(syn=26) /当开始扫描到的是;,继续扫描 scaner(); statement(); void lrparser()/程序 if(syn=1) /当开头扫描的是begin时,继续扫描 scaner(); yucu(); if(syn=6) scaner(); if(syn=0 & kk=0) /当数字串的最后扫描的是#,而且并无出错,分析成功 printf(success!n); else if(syn!=0 & kk=0) kk=1; printf(ERROR: END后未正常结束
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-四川-四川计算机操作员二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-四川-四川保育员二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-吉林-吉林医技工三级(高级工)历年参考题库含答案详解
- 2026事业单位工勤技能-内蒙古-内蒙古环境监测工四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-云南-云南药剂员一级(高级技师)历年参考题库含答案详解
- 2026中级焊工(官方)-焊接知识参考试题库历年考点答案详解
- 软件开发合同书(范本)
- -七年级上册语文单元测试四试卷含答案
- 2026年勐腊县网格员招聘考试参考题库及答案解析
- 2026年藤县网格员招聘考试备考题库及答案解析
- 城市轨道交通系统设备综合联调规范
- 煤矿一通三防专项培训
- 企业禁化武管理制度
- 煤矿安全生产标准化持续改进工作制度
- 精酿啤酒基础知识
- 超市员工档案管理制度
- 民法典合同编培训
- 老年科常见管道的护理
- 2019新教材人教版生物必修1教材课后习题答案
- T-CRHA 046-2024 标准手术体位安置技术规范
- (1000题)中级消防设施操作员模拟试题及答案
评论
0/150
提交评论