编译原理语法分析器java完美运行版

上传人:壹****1 文档编号:542102197 上传时间:2022-11-07 格式:DOCX 页数:28 大小:225.67KB
返回 下载 相关 举报
编译原理语法分析器java完美运行版_第1页
第1页 / 共28页
编译原理语法分析器java完美运行版_第2页
第2页 / 共28页
编译原理语法分析器java完美运行版_第3页
第3页 / 共28页
编译原理语法分析器java完美运行版_第4页
第4页 / 共28页
编译原理语法分析器java完美运行版_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《编译原理语法分析器java完美运行版》由会员分享,可在线阅读,更多相关《编译原理语法分析器java完美运行版(28页珍藏版)》请在金锄头文库上搜索。

1、编译原理语法分析器(java完美运行版)实验二语法分析器一、实验目的通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培养适应社会多方面需要的能力。二、实验内容根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。分析法的功能是利用LL(1)控制程序根据显示栈栈顶内容、向前看符号以及LL(1)分析表,对输入符号串自上而下的分析过程。三、LL(1)分析法实

2、验设计思想及算法模块结构:(1)定义部分:定义常量、变量、数据结构。(2)初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);(3)控制部分:从键盘输入一个表达式符号串;(4)利用LL(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。刃和程序入取占入符取f入符黃弃出挨顶符号较入况LLCI)預测分析程序流程四、实验要求1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。2、如果遇到错误的表达式,应输出错误提示信息。3、对下列文法,用LL(1)分析法对任意输入的符号串进行分析:

3、(1)E-TG(2) G-+TG|TG(3) G-&(4) T-FS(5) S-*FS|/FS(6) S-(7) F-(E)(8) F-i输出的格式如下:分祈枝1口1刈oi+i+i#+i*i#+1*1*+i*i#x+l#E-TGT-FSF-is-HTG功作初始化POP,PUSH(GT)POP,PVSM(SF)ror,fvskG)GETNEXTCDDnrFi-rsrsss1*4*1*1#*r#T-PSPOPPOP,PUSH(GT)GETNEXTCOrop,FVSHP)rop,mMG)i*i#GETNEXTCI)S-*FSPOP,FUSKteF*)GETHE灯CDF-irorrvsKG)OETNE

4、XTCD200&-6-23五、实验源程序LLl.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.table.DefaultTableModel;importjava.sql.*;importjava.util.Vector;publicclassLL1extendsJFrameimplementsActionListener/*/privatestaticfinallongserialVersionUID=1L;JTextFieldtf1;JTextFieldtf2;JLabel

5、l;JButtonb0;JPanelp1,p2,p3;JTextAreat1,t2,t3;JButtonb1,b2,b3;JLabell0,l1,l2,l3,l4;JTabletable;Statementsta;Connectionconn;ResultSetrs;DefaultTableModeldtm;StringVn=null;VectorP=nullintfirstComplete=null;/存储已判断过first的数据charfirst=null;/存储最后first结果intfollowComplete=null;/存储已判断过follow的数据charfollow=null;

6、II存储最后follow结果charselect=null;II存储最后select结果intLL=0;/标记是否为LL(1)Stringvt_tou=null;II储存VtObjectshuju=null;II存储表达式数据charyn_null=null;II存储能否推出空LL1()setLocation(100,0);setSize(700,780);tf1=newJTextField(13);tf2=newJTextField(13);l=newJLabel();l0=newJLabel(输入字符串:”););l1=newJLabel(输入的文法为丿;l2=newJLabel(););

7、l3=newJLabel(分析的结果丿;II.l4=newJLabel(预测分析表);p仁newJPanel();p2=newJPanel();p3=newJPanel();t1:=newJTextArea(24,20);t2:=newJTextArea(1,30);t3:=newJTextArea(24,40);b0=newJButton(确定(S为开始);bl:=newJButton(”判断文法”b2=newJButton(输入);b3=newJButton(清空);table=newJTable();JScrollPanejp1=newJScrollPane(JScrollPanejp2

8、=newJScrollPane(JScrollPanejp3=newJScrollPane(p2.add(tf1);p2.add(l);p2.add(tf2);p2.add(b0);p2.add(b1);p2.add(l0);p2.add(l2);p2.add(jp2);p2.add(b2);p2.add(b3);p2.add(l1);p2.add(l3);p2.add(jp1);p2.add(jp3);t1);t2);t3);p3.add(l4);p3.add(newJScrollPane(table);add(p2,Center);add(p3,South);.setPreferredSc

9、rollableViewportSize(true);b0.addActionListener(b1.addActionListener(b2.addActionListener(b3.addActionListener(setDefaultCloseOperation(JFrame.tableDimension(660,200);setVisible(this);this);this);this);EXIT_ON_CLOSE)newpublicvoidactionPerformed(ActionEvente)if(e.getSource()=b0)Stringa=tf1.getText();

10、Stringb=tf2.getText();ift1.append(a+(e.getSource()=t+b+n);b1)t3.setText(intVnnum=0,k;Vn=newString100;P=newVector();Strings=forIlli);t1(inti=O;is.getText().split(length;i+)n);if(s.lengtht3.setText(文法输入有误,2)请重新输入”);/判断长度是否符returnif(si.charAt(0)=A&si.charAt(1)=Vnnum+;elsefor(k=0;k=Vnnum)VnVnnum=si.subs

11、tring(0,1);P.add(si);t3.setText(文法输入有误,请重新输入);return;yn_null=newchar100;first=newcharVnnum100;intflag=0;StringfirstVn=firstCompletenull=newintVnnum;/存入Vn数据for(inti=0;Vni!=null;i+)/依次求FIRST*flag=0;firstVn=newString20;if(flag=add_First(firsti,Vni,firstVn,flag)=-1)returnfirstCompletei=1;t3.append(first

12、集:+n);for(inti=0;Vni!=null;i+)/显示FIRST*t3.append(first(+Vni+)=);for(intj=0;firstij!=0;j+)t3.append(firstij+IIII);t3.append(+n);follow=newcharVnnum100;/求FOLLOW*StringfollowVn=followCompletefor(inti=0;flag=0;followVn=null;=newintVnnum;Vni!=null;i+)newString20;if(flag=tianjiaFollow(followi,Vni,followVn

13、,flag)=-1)returnfollowCompletei=1;t3.append(follow集:+n);for(inti=0;Vni!=null;i+)t3.append(follow(/显示FOLLOW*+Vni+)=);for(intj=0;followij!=t3.append(followij+t3.append(+n);0;j+)IIII);/求SELECT*select=newcharP.size()100;for(inti=0;iP.size();i+)flag=0;tianjiaSelect(selecti,(String)P.elementAt(i),flag);t3.append(select集:+n);/显示SELECT*for(inti=0;iP.size();i+)t3.append(select(+(String)P.elementAt(i)+)=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号