1、输出的格式如下:5、实验源程序LL1.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.sql.*;import java.util.Vector;public class LL1 extends JFrame implements ActionListener /* * */ private static final long serialVersionUID = 1L; JTextField tf1
2、; JTextField tf2; JLabel l; JButton b0; JPanel p1,p2,p3; JTextArea t1,t2,t3; JButton b1,b2,b3; JLabel l0,l1,l2,l3,l4; JTable table; Statement sta; Connection conn; ResultSet rs; DefaultTableModel dtm; String Vn=null; Vector P=null; int firstComplete=null;/存储已判断过first的数据 char first=null;/存储最后first结果
3、int followComplete=null;/存储已判断过follow的数据 char follow=null;/存储最后follow结果 char select=null;/存储最后select结果 int LL=0;/标记是否为LL(1) String vt_tou=null;/储存Vt Object shuju=null;/存储表达式数据 char yn_null=null;/存储能否推出空 LL1() setLocation(100,0); setSize(700,780); tf1=new JTextField(13); tf2=new JTextField(13); l=new
4、 JLabel(); l0=new JLabel(输入字符串: l1=new JLabel(输入的文法为: l2=new JLabel( l3=new JLabel(分析的结果: l4=new JLabel(预测分析表: /p1=new JPanel(); p2=new JPanel(); p3=new JPanel(); t1=new JTextArea(24,20); t2=new JTextArea(1,30); t3=new JTextArea(24,40); b0=new JButton(确定(S为开始) b1=new JButton( 判断文法 b2=new JButton(输入
5、b3=new JButton(清空 table=new JTable(); JScrollPane jp1=new JScrollPane(t1); JScrollPane jp2=new JScrollPane(t2); JScrollPane jp3=new JScrollPane(t3); 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.ad
6、d(jp1); p2.add(jp3); p3.add(l4); p3.add(new JScrollPane(table); add(p2,Center add(p3,South b0.addActionListener(this); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); table.setPreferredScrollableViewportSize(new Dime
7、nsion(660,200); setVisible(true); public void actionPerformed(ActionEvent e) if(e.getSource()=b0) String a=tf1.getText(); String b=tf2.getText(); t1.append(a+b+n if(e.getSource()=b1) t3.setText( int Vnnum=0,k; Vn=new String100; P=new Vector(); String s=t1.getText().split(n for(int i=0;is.length;i+)
8、if(s.length2)文法输入有误,请重新输入/判断长度是否符合 return; if(si.charAt(0)Asi.charAt(1)=) for(k=0;k=Vnnum) VnVnnum=si.substring(0, 1);/存入Vn数据 Vnnum+; P.add(si); else yn_null=new char100; first=new charVnnum100; int flag=0; String firstVn=null; firstComplete=new intVnnum;Vni!=null;i+) /依次求 FIRST* flag=0; firstVn=new
9、 String20; if(flag=add_First(firsti,Vni,firstVn,flag)=-1)return; firstCompletei=1; t3.append(first集:+ /显示FIRST*first(+Vni+)= for(int j=0;firstij!0;j+) t3.append(firstij+ , follow=new charVnnum100; String followVn=null; followComplete=new intVnnum;i+) /求FOLLOW* followVn=new String20; if(flag=tianjiaF
10、ollow(followi,Vni,followVn,flag)=-1)return; followCompletei=1;follow集: /显示FOLLOW*follow(followij! t3.append(followij+ select=new charP.size()100;P.size();i+) /求SELECT* tianjiaSelect(selecti,(String)P.elementAt(i),flag);select集: /显示SELECT*select(+(String)P.elementAt(i)+selectij! t3.append(selectij+i+
11、)/判断select交集是否为空 int biaozhi=0; char save=new char100;j|t.charAt(j)=0;i-) zifufzifu=s.charAt(i); fzifu+; int buzhou=2; char n=new char65;/存储要显示的内容步骤 分析栈 剩余输入串 所用产生式或匹配 n0=1 n15= n14= int u=29; for(int i=fzifu-1; nu=zifui; u+; while(!(fenxiffenxi-1=zifufzifu-1=)/剩余输入串不为#则分析 int i,j; char t=zifufzifu-
12、1; char k=fenxiffenxi-1; if(t=k)/产生式匹配 n49=k; n50=匹 n51=配 t3.append(String.copyValueOf(n)+ n=new char65; fzifu-; ffenxi-; if(buzhouy-)/处理分析栈,出栈 nu=fenxiy; u=29; for(int y=fzifu-1;y-)/处理剩余字符串,消除一个字符 nu=zifuy; buzhou+; continue; for(i=0;i+)/搜寻所用产生式的左部 if(Vni.equals(String.valueOf(k)break;vt_tou.length
13、;j+)/判断是否匹配 if(vt_touj.equals(String.valueOf(t)break; if(j=vt_tou.length)/全部产生式都不能符合则报错 t3.append(String.copyValueOf(n);该串不是该文法的句型 Object result1=shujuij; if(result1=null) else/找到所用产生式 n49=Vni.charAt(0); u=50; String result=(String)result1; for(int y=0;y|t.charAt(k)/表达式右端第i个不是非终结符 if(flag=0|puanduanChar(a,t.charAt(k) if(t.charAt(k)=)/#时直接加入first if(k+1=t.length() aflag=t.charAt(k); flag+; int flag1=0; for
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1