欢迎来到天天文库
浏览记录
ID:43601925
大小:216.43 KB
页数:13页
时间:2019-10-11
《【精品】编译原理-语法分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验项目名称:语法分析实验学时:同组学生姓名:实验地点:实验日期:—实验成绩:批改教师:批改时间:—、实验目的和要求理解口顶向下语法分析的基本模式,熟悉递归下降分析程序的构造。二、实验仪器和设备硬件:PC机软件:VisualStudio2005工具三、实验过程本次实验运用的是递归下降程序对已有的单词,进行语法分析。递归下降算法的丽捉是无左递归,无左因子,所以在采用递归下降程序使用之前,先把方法进行化简,消除左递归,消除左因子。1、语法规则:定义的文法,如下:(0)S―Ta(1)S-・・・>b(2)S…T(T)(3)—T,S(4)—S先对文法进行化简,因为文法屮有左递归现象(0)S■
2、一Ta(1)S—Ab(2)S—^(T)(3)—STI(4)T1・T,ST1
3、e2、程序说明:对于递归算法的思想是对每个非终结符建立一个函数,方法中共三个非终结符,一共三个函数。递归的算法如下(一个小例了):递归下降子程序的基本模式:①文法中的每个非终结符对应一个过程(函数)。②若某个非终结符冇多个产生式候选,或者某个分支路径冇多个候选。则根据该候选的Select集是否包含输入符进行选择。每个候选对应一个if分支。③选择好候选之后,对产牛式候选的右部的符号由左到右依次处理。(a)若为终结符。则判别是否与输入符号相等。若相等,继续。否则转③(b)若为非终结符,则调用该非终结符所对应的过
4、程。(0)若当前扫描的符号为当前候选的第一个符号,几当前候选同层次有£候选项.则不作出错处理。否则均出错处理。例1:ST(S)
5、acharstr[];・.・〃待检查的串intip;〃扫描指针voidS(){〃只有一个非终结符Sif(str[ip]==X4){〃处理ST(S)候选ip++;S();if(str[ip]==')')ip++;elseerror();}elseif(str[ip]=,a,){〃处理STa候选ip++;}else//对应笫1符号crror();〃但无£候选项,必须出错。}3、程序核心代码和注释:classantily{//string[]first=news
6、tring[3]{"ab(",〃ab(",",};StreamReadermyStreamReader;staticstring[]aly;staticinti;publicanaly(){aly=nowstring[100]:i=0;}/*从文件中读取数据*//**//*break;foreach(StringsubStringinstrBufferStart.Split()){aly[uu]=subString;//Console.WritcLinc(aly);每行文法存入grcimmar[]uu卄;}}while(strBufferStart!=null);aly[uu]="
7、捫;myTcxtRcad・myStreamReader・Close();}/*错误提示*//**/publicvoidgetword(){stringstrBufferStart;stringstrStart;analymyTextRead=newanaly0;strStart=inputmyTextRead.myStreamReader二newStreamReader(strStart);//读入数据流intuu=0;do{strBufferStart=myTextRead.myStreamReader.ReadLineO;〃以行读入数据if(strBufferStart==nu
8、ll)*//**/voidERROR(strings){Console>WriteLine(s);}intSO{//Console.Write(Z,S”);if(aly[i].Equals("a")){Console.Write(aly[i]+"”);i卄;)elseif(aly[i].Equals("b")){Console.Write(aly[i]+”);i++;}elseif(aly[i].Equals("(")){Console.Write(aly[i]+"“);1++;if(TO!=1)return0;if(aly[订・Equals(")")){Console.Write
9、(aly[i]+”);i++;}}else{ERR0R("a,b,()出错!");return0;}return1;}intTO{if(SO!=1)return0;if(Tl()!=1)return0;elsereturn1:}intT10{if(aly[ij.Equals(",")){Console.Write(aly[i]+"”);四、实验结果与分析:1++;if(SO!=1)return0;if(Tl()!=1)return0;}return1;}staticv
此文档下载收益归作者所有