合肥工业大学编译原理实验

上传人:新**** 文档编号:54842486 上传时间:2022-02-15 格式:DOCX 页数:20 大小:230.99KB
返回 下载 相关 举报
合肥工业大学编译原理实验_第1页
第1页 / 共20页
合肥工业大学编译原理实验_第2页
第2页 / 共20页
合肥工业大学编译原理实验_第3页
第3页 / 共20页
点击查看更多>>
资源描述
宣城校区实验报告课程名称编译原理专业班级计算机0001班学生姓名及学号赵保飞68指导教师李芒宏实验地点计算机中心楼第四机房20172018学年第一学期编译原理课程实验报告实验名称词法分析设计姓名赵保飞系院专业计算机科学班级计算机01学号68实验日期指导教师李芒宏成绩一、实验目的和要求通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。二、实验原理(1)实验数据结构说明K口String数组-关键子表;s口char数组分界符;m口char数组算术运算符;rString数组关系运算符;ArrayList型String数组ci常数;ArrayList型String数组id标识符(2)实验算法描述宽在看号表中的也配)或电EK快甯字返回(num.num在常款表中的秋配;*0-a嗯回4CjiSHrelcpTUE通EKr-op*dT近目(rdci”BQ4SR-逐回G。非造字符整(3)算法流程图三、源程序代码和测试结果packagelexicalAnalysis;import.*;import.*;publicclasslexicalAnalysisstaticStringk口=for,main,if,while,voidpublic”static,printf,scanf,asm,doreturn,typedef,autodouble,break,short,using”default,long;ength()=1)quals(b)display(4,ri,);ength()=2)quals(a)terrnindtedlexLdlAiidlysispdVdAppliLdtiunC:Ptot单词二元序列类型位置(ff列)要处理的语句为:itL=Dthenn+:一关键字(1,1)ji)标识符(1,2)=(4,=)关系运算符(1)0(5,0)常数(1,4)then(6,then)1标识苻(1,5)n(EM标识符(1,6)+4)算术运算符(1,7)+(3,4)算术运算符(1,9)f(2,;)分界符(1,9)要处理的语句为1a-3b%);a白)标识符(2tl)=关系运算符(2,2)3bErrorError(2,3)*ErroiError2t4)2t)分界符(2,5)(2,;)分界符(2,6)display(4,ri,);取一#入符号a取T入杵号d出错LL(1)预蒯分析程序流程import.*;importWinGridextendsJFrameGridLayoutgrid;JPanelchessboard;JTextFieldtext;JTextAreatextShow;JButtonbutton;ReaderListenlistener;WinGrid()init();setVisible(true);setDefaultCloseOperation;voidinit()setLayout(newFlowLayout();text=newJTextField(10);setBounds(466,166,500,400);button=newJButton(读取);textShow=newJTextArea(9,30);listener=newReaderListen();(text);(textShow);(listener);(listener);add(text);add(button);add(newJScrollPanetextShow);classReaderListenimplementsActionListenerJTextFieldtext;JTextAreatextShow;LLone=newLl();Strings;Stringtemp1=newString186;publicvoidsetJTextField(JTextFieldtext)=text;publicvoidsetJTextArea(JTextAreatextShow)=textShow;publicStringS()Stringt=();returnt;OverridepublicvoidactionPerformed(ActionEvente)tryStrings=()+#;(s+n);(步骤+t+分析栈+t+剩余输入串+t+所用产生式+t+动作+n);(s,temp1);for(inti=0;i18;i+)for(intk=0;k5;k+)(tempii国+t);(n);catch(Exceptione2)();publicclassexp3publicstaticvoidmain(String口args);import.*;publicclassLLcharVn=E,T,G,F,S;harAt(0);intk;if(vtNum(Gri.charAt(j)!=-1)harAt(j)!=)harAt(j)不为出寸将s加到Mvn(u)vt(Gri.charAt(j)中MvnNum(u)vtNum(Gri.charAt(j)=s;elseharAt(j)为e,将属于u的follow集的元素b的位置用s加到Mvn(u)vt(b)中if(FOLLOWvnNum(u)k)MvnNum(u)k=s;elseharAt(j)为非终结符for(k=0;k;k+)harAt(j)的first集时,将s力口至UMvn(u)vt(a)中if(FRSTvnNum(GrM.charAt(j)k)MvnNum(u)k=s;if(FIRSTvnNum(Gri.charAtO)vtNum(e)harAt(j)的first集时,将属于u的follow集的b将s加到Mvn(u)vt(b)中if(j=m-1)for(k=0;kTG2 #GaF汗产讨T-FS3 #G9iH西才FZ4 -l*5 #G4出S-t6 #CT+-i*甫。TC-w,if(vnNum(v)!=-1)left=E;strcpy(s_have1.sright,E+T);left=E;strcpy(s_have2.sright,T);left=T;strcpy(s_have3.sright,T*F);left=T;strcpy(s_have4.sright,F);left=F;strcpy(s_have5.sright,(E);left=F;strcpy(s_have6.sright,i);ove0=5;action0.move3=4;action1.move1=6;action2.change1=2;action2.move2=7;action2.change4=2;action2.change5=2;action3.change1=4;action3.change2=4;action3.change4=4;action3.change5=4;action4.move1=5;action4.move3=4;action5.change1=6;action5.change2=6;action5.change4=6;action5.change5=6;action6.move0=5;action6.move3=4;action7.move0=5;action7.move3=4;action8.change1=6;action8.change4=11;action9.change1=1;action9.move2=7;action9.change4=1;action9.change5=1;action10.change1=3;action10.change2=3;action10.change4=3;action10.change5=3;action11.change1=5;action11.change2=5;action11.change4=5;action11.change5=5;/*存储GOTO表*/go0.head0 = E;ead1 = T;go0.head2=F;go0.gt0=1;t1=2;go0.gt2=3;go4.head0=E;go4.head1=T;go4.head2=F;go4.gt0=8;go4.gt1=2;go4.gt2=3;go6.head1=T;go6.head2=F;go6.gt1=9;go6.gt2=3;go7.head2=F;go7.gt2=10;ovecol!=0)coutACTIONsta,symb=Sactionsta.movecol ,PUSHactionsta.movecolendl;status+sta_Index=actionsta.movecol;hangecol!=0)coutractionsta.changecol:s_haveactionsta.changecol.sleft s_haveactionsta.changecol.sright规约,GOTO(statussta_Index-strlen(s_haveactionsta.changecol.sright), s_haveactionsta.changecol.sleft)=;inti=0;for(i=0;istrlen(s_haveactionsta.changecol.sright);i+)hangecol.sleft;hangecol.sright);i+)eadi=symb)status+sta_Index=gosta.gti;coutgosta.gtiPUSHendl;return;/*查表*/voidstart_find(void)ints=statussta_Index;charexp_first_char=inputstringinstr_top;charsym=symbolsym_Index;while(IsAccept!=1)s=statussta_Index;exp_first_char=inputstringinstr_top;sym=symbolsym_Index;/*输出步骤*/coutstep+tt;/*输出当前状态栈*/inti=0;for(i=0;i=sta_Index;i+)coutstatusi;couttt;/*输出符号栈*/coutsymboltt;/*输出剩余的输入串*/i=0;for(i=0;iinstr_top;i+)cout;for(i=instr_top;i=instr_index;i+)coutinputstringi;couttt;switch(exp_first_char)casei:find_table(s,exp_first_char,0);break;case+:find_table(s,exp_first_char,1);break;case*:find_table(s,exp_first_char,2);break;case(:find_table(s,exp_first_char,3);break;case):find_table(s,exp_first_char,4);break;case#:find_table(s,exp_first_char,5);break;intmain()/couttemp;for(inti=0;i();i+)inputstringi=tempi;inputstring()=#;instr_index=()+1;Initlize();couti 规GOTO (0, F)-3PU r4: T-F炮约 GOTO (0, T) =2PU r2:E-T规纵 GOTO。E)=1PV ACTIONLL 4rs6,PUSH6 ACTION6, i-S5.PI;SH5r6 Ax现也 GOTO(6, F) 3PU r4: f F规妁 r GOTO (6, TJ =9Pb ACTION 9. * =S7, PUSH7 ACT ON 7, i =S5j PUSH5r6: F-iSSI, GOTO (7. F)=1 OP r3: T-护规为,GOTO(6, T) =9 rl:E-E*T觇纵 GOTO(0, E)=l 4cc:分析成功四、实验评价、收获与体会这一周真是惊险万分,有周二四个小时OS实验,周三网络考试,周三就要验收实验,还有一堆事好像老师都喜欢集体行动把事情堆到一起解决。好在挺过来。这个实验总的来说太难,尝试了java写图形界面和自动化实现分析表等,但是时间紧迫只好以后有时间慢慢搞。现在的实验只是一份低配版的实验,LR分析表都不是自动生成的,是存储在数组中直接使用的,所以老师很失望给了及格分,我也很无奈。没有大神的超速只能怪自己学艺不精,效率太低。希望以后可以快点。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 市场营销


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!