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

下载本文档

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

文档简介

递归下降语法分析姓名:郝梦朔 学号:71107416 日期:2010-1-17一、 实验目的构造文法的语法分析程序,要求采用递归下降语法分析方法对输入的字符串进行语法分析,实现对词法分析程序所提供的单词序列的语法检查和结构分析,进一步掌握递归下降的语法分析方法。二、 实验内容编写为一上下文无关文法构造其递归下降语法分析程序,并对任给的一个输入串进行语法分析检查。程序要求能对输入串进行递归下降语法分析,能判别程序是否符合已知的语法规则,如果不符合(编译出错),则输出错误信息。三、 实验要求利用C语言编制递归下降分析程序,并对语言进行语法分析。(1) 待分析的语言的语法。用扩充额BNF表示如下。:=functionendfunc:=;:=:=ID=:=+|-:=*|/:=ID|NUM|()(2) 实验要求说明输入单词串以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”,具体例子如下。输入functiona=9;x=2*3;b=a+x;endfunc#输出success又如,输入:x=a+b*cendfunc#输出error(3)语法分析程序的算法思想为翟玉庆老师上课所讲。四、 实验源程序#include#includechar prog80,token8;char ch;int syn,p,m=0,n,sum,kk=0;char *rwtab6=function,if,then,while,do,endfunc;void scaner();void lrparser();void yucu();void statement();void expression();void term();void factor();void main()p = 0;printf(please input the string:n);doch = getchar();progp+ = ch;while(ch != #);p = 0;ch = progp+;scaner();lrparser();return;void scaner()for(n=0;n8;n+)tokenn=NULL;/printf(n%c in scaner(),ch);while(ch = | ch = n )ch = progp+;/printf(n%c in scaner(),ch);m = 0;if(ch=a) |(ch=A)while(ch=a) |(ch=A)|(ch=0)tokenm+ = ch;ch = progp+;syn=10;for(n=0;n6;n+)if(strcmp(token,rwtabn) = 0)syn = n+1;/printf(n%d in keyword,syn);break;tokenm+ = 0;else if(ch=0)sum=0;while(ch=0)sum = sum*10 + ch - 0;ch = progp+;syn = 11;elseswitch(ch)case :m = 0;tokenm+ = ch;ch = prog+p;if(ch = =)syn = 24;tokenm+ = ch;elsesyn = 23;ch = prog-p;break;case =:m = 0;tokenm+ = ch;ch = prog+p;if(ch = =)syn = 25;tokenm+ = ch;elsesyn = 18;ch = prog-p;break;case !:m = 0;tokenm+ = ch;ch = prog+p;if(ch = =)syn = 22;tokenm+ = ch;elsesyn = -1;break;case +:syn = 13;token0 = ch;break;case -:syn = 14;token0 = ch;break;case *:syn = 15;token0 = ch;break;case /:syn = 16;token0 = ch;break;case ;:syn = 26;token0 = ch;break;case (:syn = 27;token0 = ch;break;case ):syn = 28;token0 = ch;break;case #:syn = 0;token0 = ch;break;default:syn = -1;ch = progp+;void lrparser()if(syn =1)/printf(n%d,syn);scaner();/printf(n%d,syn);yucu();/*/printf(n%d after yucu(),syn);if(syn = 6)scaner();/printf(n%d in lrparser() after scaner(),syn);if(syn = 0 & kk = 0)printf(nsuccess!n);elseif(kk != 1)printf(error!need endfunc);kk = 1;elseprintf(error!need function);kk =1;return;void yucu()/printf(n%d in yucu() first,syn);statement();/printf(n%d after statement() in yucu(),syn);while(syn = 26)scaner();/syn = 6;/printf(n%d after scaner() in yucu(),syn);statement();return;void statement()/printf(n%d in statement() at first,syn);if(syn = 10)scaner();/printf(n%d after scaner() in statement(),syn);if(syn = 18)scaner();/printf(n%d after scaner when syn=18,syn);expression();/printf(n%d after expression(),syn);elseprintf(error! evaluate tag error);kk = 1;else if(syn = 6)return;else printf(error! the statement error!);kk = 1;return;void expression()/printf(n%d in expression at first,syn);term();while(syn = 13 | syn = 14)scaner();term();return;void term()/printf(n%d in term() at first,syn);factor();while(syn = 15 | syn = 16)scaner();factor();return;void factor()/printf(n%d in factor() at first,syn);if(syn = 10 | syn = 11)scaner();elseif(syn = 27)scaner();expression();if(syn = 28)scaner();elseprintf(er

温馨提示

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

最新文档

评论

0/150

提交评论