合肥工业大学编译原理试验报告完整代码版_第1页
合肥工业大学编译原理试验报告完整代码版_第2页
合肥工业大学编译原理试验报告完整代码版_第3页
合肥工业大学编译原理试验报告完整代码版_第4页
合肥工业大学编译原理试验报告完整代码版_第5页
免费预览已结束,剩余24页可下载查看

付费下载

下载本文档

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

文档简介

1、名用工学大孝计算机与信息学院编译原理实验报告专业班级信息平安13-1班学生姓名及学号马骏 2022211869课程教学班号任课教师 李宏芒实验指导教师李宏芒实验地点 实验楼机房2022 2022 学年第 二 学期参考实验1词法分析设计实验目的通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设 计的原理和构造方法,使学生对编译的根本概念、原理和方法有完整的和 清楚的理解,并能正确地、熟练地运用实验要求、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等.2、将标识符填写的相应符号表须提供应编译程序的以后各阶段使用.3、根据测试数据进行测试.测试实例应包括以下三个局部 :全部

2、合法的输入.各种组合的非法输入.由记号组成的句子.4、词法分析程序设计要求输出形式:例:输入VC+诘百的实例程序:If i=0 then n+;a< = 3b %);输出形式为:单词二兀序列类型位置行,歹1单词种别,单词属性for(1,for )关键字(1,1)i( 6,i )标识符(1,2)=(4,:=)关系运算符(1,3)120(5, 0 )常数(1, 4)then(1, then)关键字(1, 5)n(6,n)标识符(1, 6)+ErrorError(1, 7);(2,;)分界符(1,8)a(6,a )标识符(2,D< =(4,<=)关系运算符(2, 2)3bError

3、Error(2, 4)%ErrorError(2, 4)(2,)分界符(2,5);(2,;)分界符(2,6)实验内容用VC+/VB/JAVA语言实现对C语言子集的源程序进行词法分析.通过参考输入源程序从左到右对字符串进行扫描和分解,依次输出各个单词的内部编 码及单词符号自身值;假设遇到错误那么显示“Error ,然后跳过错误局部继续显示 ; 同时进行标识符登记符号表的治理.以下是实现词法分析设计的主要工作:(1)从源程序文件中读入字符.(2)统计行数和列数用于错误单词的定位.(3)删除空格类字符,包括回车、制表符空格.(4)按拼写单词,并用(内码,属性)二元式表示.(属性值一一token的机内

4、 表示)(5)如果发现错误那么报告出错 7(6)根据需要是否填写标识符表供以后各阶段使用.四、实验步骤1、根据流程图编写出各个模块的源程序代码上机调试.2、编制好源程序后,设计假设干用例对系统进行全面的上机测试,并通过所设计的词法分析程序;直至能够得到完全满意的结果.3、书写实验报告;实验报告正文的内容:功能描述:该程序具有什么功能?程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;函数 之间的调用关系图.详细的算法描述(程序总体执行流程图).给出软件的测试方法和测试结果.实验总结(设计的特点、缺乏、收获与体会).五、实验截图先创立salaryfile.txt 文件输入If i=0

5、then n+;ISa<= 3b %;1 D:c- docuebugbianyil.exe标识符识符<U2> 系运算符<1.3>then l,then> 关键字 <1,5 n <6,n> 标识符 <1,6>ErrorError ?1+7?<2.1>Error <22>Error ?2.2?<2,3><2,4>Press any key to continue参考六、核心代码#include<iostream>#include<string>#include&

6、lt;fstream>#include <sstream> using namespace std;const char* salaryfile="salaryfile.txt"const int max=40;stringidmax="do","end","for","if","printf","scanf","then","while"/键字表stringsmax=",",&

7、quot;","(",")","","","+","-","*","/","<","<=","=",">",">=","<>"/分界符表算数运算符表关系运算符表string kmax;/ string cimax;/ int fjfpoint=5;/ int mathpoi

8、nt=9;/ int cipointer=0;/ int idpointer=0;/ int kpointer=0;/标识符常数分界符表尾算数运算符表尾常数表尾关键字表尾标识符表尾int fjf;/0不是分界符1是int rowy=1;/识别输入行位置int rowx=1;/识别输入列位置int outkey=0;/ 打印限制0为数字后有字母 其他可以void searcht(int i,string m)/根据已识别的首字母识别字符串/ cout<<"enter searcht!"<<endl;int x;if(i=0)/首字符是字母识别关键字/

9、cout<<" a word!"<<endl;for(x=0;x<max;x+)if(idx=m)cout<<"(1,"<<idx<<")"<<"关 键 字("<<rowy<<","<<rowx<<")"<<endl;break;参考)if(x=max)/不是关键字再识别标识符for(x=0;x<max;x+)(if(kx=m)(co

10、ut«"(6,"«m«")"«" 标 识 符("«rowy«","«rowx«")"<<endl; break; ) ) if(x=max)/标识符表没有时插入标识符 (cout«"(6,"«m«")"«" 标 识 符("«rowy«","«rowx

11、1;")"<<endl;kkpointer=m;kpointer+;)if(i=1)/ 识别常数(/ cout«" a number!"«endl;for(x=0;x<max;x+)(if(cix=m)(cout«,(5,«x«,),<<endl;break;)if(x=max)(cout«"(5,"«m«") 常数("«rowy«","<<rowx

12、71;")"<<endl;cicipointer=m;cipointer+;)if(i=2)/ 识别分界符算数运算符关系运算符参考/ cout<<" a signal!"<<endl;for(x=0;x<max;x+)(if(sx=m) break;/ x-;if(x<6)(fjf=1;if(x>5&&x<10)(if(outkey=1)(cout<<"(3,"<<sx<<")算 数 运 算 符("<

13、;<rowy<<","<<rowx<<")"<<endl;outkey=0;fjf=0;if(x>9&&x<max-1)(if(outkey=1)(cout<<"(4,"<<sx<<")关 系 运 算 符("<<rowy<<","<<rowx<<")"<<endl;outkey=0;fjf=0;if(

14、x=max)(if(outkey=1)(cout<<"Error Error ("<<rowy<<","<<rowx<<")"<<endl;outkey=0;fjf=0; ;参考void wordlook(char t,string sn)/识别首字符,分类识别字符串(if(t>=48&&t<=57) searcht(1,sn);else(if(t>64&&t<91)|(t>96&&t&

15、lt;123) searcht(0,sn);else searcht(2,sn);void split(string s)/分割字符串(/ cout<<s<<endl;string nowmax;string sn;int nowpointer=0;int i=0;int x;int sign=2;/ 非法数字标志int diannumber=0;/ 数中点的个数for(x=0;x<s.length();x+)(if(sx>64&&sx<91)|(sx>96&&sx<123)|(sx>=48&&

16、amp;sx<=57)| |(x>0&&sx=46&&sign=1)/判断数字后跟字母还是字母后有数字(if(i=0)(if(sx>=48&&sx<=57) sign=1;else sign=2; else (if(sign=1) (if(sx>=48&&sx<=57|sx=46) (if(sx=46)参考if(diannumber=O)diannumber+;else sign=O;)else sign=O;)i+;if(x=(s.length()-1)(sn=s.substr(x-i+1,i

17、);if(i>0)(/ cout«sn«" i="«i«endl;cout«sn«"if(sign=O)/数字后有字母的情况Errorcout«"Error("«rowy«","«rowx«")"<<endl;else /字母开头的字符串(/ cout«" true"«endl;wordlook(sn0,sn);rowx+;)elseif(

18、x>0&&(sx-1>64&&s(x-1<91)|(sx-1>96&&s(x-1<123)|(sx-1> =48&&s(x-1<=57)/遇到分界符运算符如果前面是数字或字母(sn=s.substr(x-i,i);if(i>0)(/cout«sn«" i="«i«endl;cout«sn«"参考if(sign=0)cout<<" Error Error ("<

19、;<rowy<<","<<rowx<<")"<<endl; else / cout<<" true"<<endl;wordlook(sn0,sn); rowx+; i=0; string ll=s.substr(x,1);/判断是运算符还是分界符wordlook(sx,ll);if(fjf=0)/是运算符 i+;if(sx+1>64&&sx+1<91)|(sx+1>96&&sx+1<123)|(sx+1

20、>=48&& sx+1<=57)/如果后面是数字或字母sn=s.substr(x-i+1,i);/ cout<<sn<<" 运算符 i="<<i<<endl; cout<<sn<<""outkey=1;wordlook(sn0,sn); rowx+; i=0; if(fjf=1) if(sx-1>64&&sx-1<91)|(sx-1>96&&sx-1<123)|(sx-1>=48&&am

21、p;sx-1<=57)/如果前面是数字或字母 else if(i>0) sn=s.substr(x-i,i);/ cout<<sn<<" 运算符 i="<<i<<endl; cout<<sn<<""outkey=1;wordlook(sn0,sn);参考rowx+;i=0;)cout«sx«" (2,"«sx«") ("«rowy«","«ro

22、wx«")"<<endl;rowx+;/* if(ll="")(rowy+;rowx=1;)*/);int main()(int x;string instring;/读入一行string sn;/*getline(cin,sn);/ string带空格输入cout«sn«endl;char t=snO;if(t>=48&&t<=57)searcht(1,sn);else(if(t>64&&t<91) |(t>96&&t< 123

23、) searcht(O,sn);else searcht(2,sn);)*/参考ifstream inputfile;/in file streaminputfile.open(salaryfile);/ inputfile>>noskipws;if(!inputfile)cout<<"no file"<<endl;string pp;while(!inputfile.eof()getline(inputfile,pp);istringstream istr(pp);string ppword;while(istr>>ppwo

24、rd)/根据空格分割字符申 split(ppword);/*int begin = 0;/去掉字符串的所有空格begin = pp.find(" ",begin); /查找空格在 str中第一次出现的位置while(begin != -1) /表示字符串中存在空格pp.replace(begin, 1, ""); / 用空用替换 str 中从 begin 开始的 1 个字符begin = pp.find(" ",begin); /查找空格在替换后的 str中第一次出现的位置*/ cout<<"good "

25、;<<pp<<endl;/ rowx+;rowy+;/ 换行 rowx=1;return 0;参考七、实验总结通过本次试验使我不仅对词法分析器有了更深的了解,而且提升了编程能 力,希望在以后的学习中可以解决词法分析更多的问题.实验2 LL(1)分析法一、实验目的通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系.使学生了解语法分析的功能,掌握语法分析程序设计的原理和 构造方法,练习学生掌握开发应用程序的根本方法.有利于提升学生的专业素质, 为培养适应社会多方面需要的水平.二、实验要求1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等.2

26、、如果遇到错误的表达式,应输出错误提示信息.3、对以下文法,用LL (1)分析法对任意输入的符号用进行分析:(1) E->TG(2) G->+TG|-TG(3) G->£(4) T->FS(5) S->*FS|/FS(6) S-> £ F->(E)(8) F->i三、实验内容根据某一文法编制调试 LL ( 1 )分析程序,以便对任意输入的符号用 进行分析.构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的 分析程序.分析法的功能是利用LL (1)限制程序根据显示栈栈顶内容、向前看符 号以及LL (1)分析表,对输入

27、符号用自上而下的分析过程.四、实验步骤1 、根据流程图编写出各个模块的源程序代码上机调试.参考2、编制好源程序后,设计假设干用例对系统进行全面的上机测试, 并通过所设计 的LL(1)分析程序;直至能够得到完全满意的结果.3、书写实验报告;实验报告正文的内容:写出LL (1)分析法的思想及写出符合 LL (1)分析法的文法.程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;函数 之间的调用关系图.详细的算法描述(程序执行流程图).给出软件的测试方法和测试结果.实验总结(设计的特点、缺乏、收获与体会).五、实验截图祖ttE初始化1ttEE->TGPOP,PUSH<GT>

28、2ttGIi+i*i#T->FSPOP,PUSH<SF>3ttGSFi+i*i#F->iPOP,PUSH<i>RttGSii+i*i#GETNEXT<I>5ttGS+i*i#s->$POP,PUSH<$>,ttG+i*i#G->+TGPOP,PUSH<GT+>7#GT +i*i#GETNEXT<I>8ttGIi*i#T->FSPOP,PUSH<SF>9ttGSFi*i#F->iPOP,PUSH<i>10ttGSii*i«GETNEXT<I>(

29、11#GS*i#S->*FSPOP,PUSH<SF*>2#GSF*i#GETNEXT<I>13#GSFi#F->iPOP,PUSH<i>(14ttGSiittGETNEXT<I>15#GS#s->$POP,PUSH<$>16ttGttG->$POP,PUSH<$>L7#sucessed!over!?!(Press any keyto continue 'D:c- document小件苞DEbuq'bianyi2_2.exe'回六、核心代码#include<iostrea

30、m>#include<string>using namespace std;string pp;/ 输出字符串string hh="rn"/ 换行const int max=50;int endfumax;/ 终止符序号表int endfupointer=8;char endfurealmax='+','-','*','/','(','i',')','#'int unendfumax;int unendfupointer=5;ch

31、ar unendfurealmax=E,'G',T,S,'F'参考 stringmakemathmax="E->TG","G->+TG","G->-TG","G->$","T->FS","S->*FS","S- >/FS","S->$","F->(E)","F->i"/0 E->TG,1 G->

32、+TG,2 G->-TG,3 G->$,4 T->FS,5 S->*FS,6 S->/FS,7 S->$,8 F->(E),9 F->i/$代表空用 string behaviormax=" 初始化","POP"int smarttablemaxmax;/ 分析表int checkendfu(char fu)/查终结符序号int x;for(x=0;x<endfupointer;x+)if(endfurealx=fu) break;if(x<endfupointer)return x;else

33、return -1;int checkunendfu(char fu)/查非终结符序号int x;for(x=0;x<unendfupointer;x+)if(unendfurealx=fu) break;if(x<unendfupointer)return x;else return-1;一string checkmakemath(int x)/查产生式表return makemathx;int checksmarttable(int x,int y)/查分析表return smarttablexy;参考);class smartbox(public:smartbox()(box

34、0='#'box1='E'boxpointer=1;)void push(char fu)(boxpointer+;boxboxpointer=fu;) char pop()(char a=boxboxpointer;if(a!='#')/ / /*(cout<<"pop: "<<boxpointer<<" "<<a<<endl;stringstream oss;pp=pp+"pop:"char buffermax;sprint

35、f(buffer,"%d",boxpointer);string s=buffer;pp=pp+"pp=pp+s;pp=pp+hh;*/boxpointer-;return a;)void check() (if(checkendfu(boxboxpointer)!=-1)(/char a;cout<<boxboxpointer<<checkendfu(boxboxpointer)<<" "/char buffermax;/sprintf(buffer参考/pp=pp+boxboxpointer;/ pp=p

36、p+checkendfu(boxboxpointer);/pp=pp+""a=pop();/ cout<<"out "<<a<<endl;char boxmax;int boxpointer;int main()动作+hh;文本框ID,字符串,/ TODO: Add extra validation here/pp=pp+步骤分析栈剩余输入用所用产生式/*string s1="sdsfs rnsdfsds"string s3="aaaaaaaaaaaaa"s3=s3+s1;CSt

37、ring s2(s3.c_str();/ CString s2=CString(s1);SetDlgItemText(IDC_EDIT2,s2);用 SetDlgItemText(将文本框的内容设置为字符串的内容.SetDlgItemText(IDC_EDIT2,s2);*/ MessageBox(str);string str;cin>>str;int x,y;for(x=0;x<max;x+) / 初始化分析表99为错误代号for(y=0;y<max;y+)smarttablexy=99;smarttable04=0;smarttable05=0;smarttabl

38、e10=1;smarttable11=2;smarttable16=3;smarttable17=3;参考smarttable24=4;smarttable25=4;smarttable30=7;smarttable31=7;smarttable32=5;smarttable33=5;smarttable36=7;smarttable37=7;smarttable44=8;smarttable45=9;smartbox mark;char fu;char enterfu;int endfunumber;int unendfunumber;string readyin;string enter;

39、/ cin>>enter;enter="i+i*i#"enter=str;/enter="(i)#"int count=0;/步骤char buffer1max;sprintf(buffer1,"%d",count);string s1=buffer1;pp=pp+s1+""/ 分析栈for(int qq1=0;qq1<=mark.boxpointer;qq1+)pp=pp+mark.boxqq1;for(qq1=0;qq1<10-mark.boxpointer;qq1+)pp=pp+&qu

40、ot;/剩余输入栈参考string jiequ1=enter.substr(0,enter.length(); pp=pp+jiequ1;for(int t1=0;t1<20;t1+)(pp=pp+"pp=pp+"初始化"+hh;for(x=0;x<enter.length();)(/ 步骤count+;char buffermax;sprintf(buffer,"%d",count);string s=buffer;pp=pp+s+""/ 分析栈for(int qq=0;qq<=mark.boxpoint

41、er;qq+)(pp=pp+mark.boxqq;for(qq=0;qq<10-mark.boxpointer;qq+)(pp=pp+"/剩余输入栈string jiequ=enter.substr(x,enter.length()-x);pp=pp+jiequ;for(int t=0;t<x+10;t+)(pp=pp+"参考 enterfu=enterx;/ cout<<"enterfu: "<<enterfu<<endl;mark.check();fu=mark.pop();/ cout<<

42、"fu: "<<fu<<endl;if(fu='#')&&enterfu='#') / cout<<"sucessed! over!<<endl; pp=pp+"sucessed! over!"+hh;break;unendfunumber=checkunendfu(fu); endfunumber=checkendfu(enterfu);/ cout<<unendfunumber<<endl;/ cout<<en

43、dfunumber<<endl;if(smarttableunendfunumberendfunumber=99) pp=pp+"error!" break;readyin=makemathsmarttableunendfunumberendfunumber; pp=pp+readyin;for(int ddd=0;ddd<14-readyin.length();ddd+) pp=pp+""pp=pp+"POP,PUSH("for(y=readyin.length()-1;y>2;y-) pp=pp+ready

44、iny; pp=pp+")"+hh;/ cout<<"readyin: "<<readyin<<endl;int firsttime=0;for(y=readyin.length()-1;y>2;y-) / cout<<readyiny<<"" if(readyiny!='$')参考 mark.push(readyiny);if(firsttime=0)(if(checkendfu(readyiny)!=-1)(/ cout<<"n

45、ow x: "<<x<<""/步骤count+;char buffermax;sprintf(buffer,"%d",count);string s=buffer;pp=pp+s+"/ 分析栈for(int qq=0;qq<=mark.boxpointer;qq+)(pp=pp+mark.boxqq;for(qq=0;qq<10-mark.boxpointer;qq+)(pp=pp+"/剩余输入栈string jiequ=enter.substr(x,enter.length()-x);p

46、p=pp+jiequ;for(int t=0;t<x+10;t+)(pp=pp+"pp=pp+" GETNEXT(I)"+hh;x+;/ cout<<"next x: "<<x<<" "<<endl;firsttime=1;mark.check();/ cout<<endl;/ pp=pp+hh;参考)cout<<pp;return 0;/CDialog:OnOK();)七、实验总结通过本次试验使我不仅对ll(1)分析法有了更深的了解,而且提升了编

47、程 水平,希望在以后的学习中可以解决自动构造follow集的问题.实验3 LR(1)分析法、实验目的构造LR(1)分析程序,利用它进行语法分析,判断给出的符号用是否为该法识别的句子,了解LR (K)分析方法是严格的从左向右扫描,和自底向 上的语法分析方法.、实验要求1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等.2、如果遇到错误的表达式,应输出错误提示信息.3、程序输入/输出实例:输入一以#结束的符号用(包括+* () i#):在此位置输入符号用输出过程如下:步骤 状态栈 符号栈剩余输入用动作10# i+i*i#移进i+i*i 的LR分析过程步骤 状态栈 符号栈 输入用动作说明1

48、 0 # i+i*i# ACTION0,i=S5, 状态 5 入栈2 05 #i +i*i# r6: F T 归约,GOTO(0,F)=3 入栈3 03 #F +i*i# r4: TfF 归约,GOTO(0,T)=3 入栈4 02 #T +i*i# r2: E-T 归约,GOTO(0,E)=1 入栈5 01 #E +i*i# ACTION1,+=S6, 状态 6 入栈6 016 #E+ i*i# ACTION6,i=S5,状态 5 入栈7 0165 #E+i *i# r6: F fi 归约,GOTO(6,F)=3 入栈8 0163 #E+F *i# r4: Tf F 归约,GOTO(6,T)=

49、9 入栈9 0169 #E+T *i# ACTION9,*=S7, 状态 7 入栈10 01697 #E+T* i# ACTION7,i=S5, 状态 5 入栈11 016975 #E+T*i # r6:F T 归约,GOTO(7,F)=10 入栈12 0169710 #E+T*F # r3: T-T*F 归约,GOTO(6,T)=9 入栈13 0169 #E+T # r1:E -E+T,GOTO(0,E)=1 入栈14 01 #E # Acc :分析成功参考、实验内容对以下文法,用LR (1)分析法对任意输入的符号用进行分析:(1) E-> E+T(2) E->T(3) T-&g

50、t; T*F(4) T->F(5) F-> (E)(6) F-> i四、实验步骤1、根据流程图编写出各个模块的源程序代码上机调试.2、编制好源程序后,设计假设干用例对系统进行全面的上机测试,并通过所设计 的LR(1)语法分析程序;直至能够得到完全满意的结果.3、书写实验报告;实验报告正文的内容:描述LR(1)语法分析程序的设计思想.程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;函数 之间的调用关系图.详细的算法描述(程序执行流程图).给出软件的测试方法和测试结果.五、实验截图* 'D:c+016501630169016970169710401'r

51、ess any key tott tti ttF NT HE BE +ttE+i ftE+F «E+TttE+T* KE *T*i#E+T*F ttE+T ttEcont inue*i*i# +i*i# *i*i#i*ltt*L#ittB tt tt #ACTON0,i.状态 5 人柱rt : F->i归约,GOTO<0,F>=3/ 横p4: t ->f i)3 GOT 0 < 0 , T > =2 A7.: r2= E->T ,QOTO<0, E> =1 AftBCION1.+J-S6,6gri】T5.状态入横 r6: F-H归

52、的.0010?6»3人幡 r4:1-汨归约,6010<6,13=9入栈ACT10N9,*=S7,ACTI0N7,i=S5,!国r&: F-“归匏,GQT0?3F1H入校p3 : T->T*F归约.GOTOU,T>-9人我rl: E->E+T.GOI4X0,E> =1 AW口 3:分析成功六、核心代码#include<iostream>#include<string> using namespace std;参考int count=1;string pp;/ 输出字符串string hh="rn"/ 换行

53、const int max=100;char endfurealmax='i','+','*','(',')','#','E','T','F');int endfupointer=8;stringcreatwordmax="E->E+r;E->r',"T->T*F","T->F","F->(E)","F->i"/ (0)

54、 E-> E+T (1) E->T (2) T-> T*F (3) T->F (4) F-> (E)(5) F-> i/注意rj时j应对应数组下标int checkendfu(char fu)/查终结符序号int x;for(x=0;x<=endfupointer;x+) if(endfurealx=fu) break; if(x<=endfupointer) return x;else return -1;class actiongo/原子动作public:actiongo()/ cout<<"eroor! wrong a

55、ction or goto creat<<endl; actype=4; action(int i,int j)actype=i;number=j;/ cout<<i<<" "<<j<<endl; int actype;/0=s 1=r 2=acc 3=goto 表 4=wrong int number;actiongo smarttablemaxmax;class stylebox/ 状态栈参考(public:stylebox()(box0=0;boxpointer=0;)void push(int style)

56、(boxpointer+;boxboxpointer=style;)int pop()(int a=boxboxpointer; boxpointer-;/ cout<<"pop now"<<endl; return a;)int boxmax;int boxpointer;);class readybox/已归约栈(public:readybox()(box0='#'boxpointer=0;)void push(char fu)(boxpointer+;boxboxpointer=fu;)char pop()(char a=box

57、boxpointer;boxpointer-;return a;)参考char boxmax;int boxpointer;);icount,stringint program(stylebox&style,readybox&ready,char fu,int ptr,int control)/返回是否需要移进信号 if(control=1)/char bermax;sprintf(ber,"%d",count);string st=ber;pp=pp+st+"count+;/pp=pp+""for(int qq=0;qq<

58、;=style.boxpointer;qq+) char bssmax;sprintf(bss,"%d",style.boxqq);string st=bss;pp=pp+st;)for(qq=0;qq<10-style.boxpointer;qq+) pp=pp+")for( qq=0;qq<=ready.boxpointer;qq+)参考pp=pp+ready.boxqq;for(qq=0;qq<10-ready.boxpointer;qq+) (pp=pp+") for(int dj=icount;dj<ptr.length

59、();dj+)(pp=pp+ptrdj;)pp=pp+" "/)int i=style.pop();/ 如果是s那么状态还要入栈/ cout<<"现在状态"<<i;int j=checkendfu(fu);if(j=-1)(pp=pp+"error!"return 4;/wrong!)/ cout<<"现在符号:"<<fu<<" "<<j<<endl;int checkstyle=smarttableij.act

60、ype;/查表参考if(checkstyle=4) (pp=pp+"error!"return 4;/wrong!)if(checkstyle=0|checkstyle=3) ( style.push(i);/如果是s那么状态还要入栈if(checkstyle=0) (cout<<"ACTION<<i<<","<<fu<<"=S"<<smarttableij.number<<,状态"<<smarttableij.numb

61、er<<" 入栈"<<endl;pp=pp+"ACTION;char buffermax;sprintf(buffer,"%d",i);string s=buffer;pp=pp+s;pp=pp+","pp=pp+fu;pp=pp+"=S"char bufmax;sprintf(buf,"%d",smarttableij.number);s=buf;pp=pp+s;pp=pp+",状态"pp=pp+s+"入 栈"+hh;参考)if(checkstyle=3)(/cout<<i<<","<<endfurealj<<")="<<smarttableij.number<<" <&

温馨提示

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

评论

0/150

提交评论