⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 809bd46c4326001d1dd8bacabd004be9

📁 算符优先分析器.java编写.功能已实现
💻
字号:
package s;
import javax.swing.*;
import java.awt.Font;
import java.awt.event.*;
public class Jsuanfu extends JFrame implements ActionListener{
	private JTextArea ta=new JTextArea(20,52);;
	private JTextField tf;
	private JButton jb1;
	private JButton jb2;
	private JLabel jl1;
	private JLabel jl2;
	char[] a=new char[50];
	char[] s=new char[50];
	int j,k,z;
	char m;
	public int table[][]={{2,1,1,1,1,2,2},
			                {2,2,1,1,1,2,2},
			                {2,2,1,1,1,2,2},
			                {2,2,2,-1,-1,2,2},
			                {1,1,1,1,1,0,-1},
			                {2,2,2,-1,-1,2,2},
			                {1,1,1,1,1,-1,0}};
	public Jsuanfu(){
		super("算符优先分析器");
		this.setSize(600,500);
		this.setLocation(200,150);
		this.setLayout(null);
		tf=new JTextField(30);
		jb1=new JButton("清空");
		jb2=new JButton("优先分析");
		jl1=new JLabel("输入字符串:");
		jl2=new JLabel("分析结果:");
		jl1.setFont(new Font("楷书",Font.BOLD,14));
		jl2.setFont(new Font("楷书",Font.BOLD,14));
		jl1.setSize(100,25);
		jl1.setLocation(10,10);
		this.add(jl1);
		tf.setSize(400, 25);
		tf.setLocation(120,10);
		this.add(tf);
		jl2.setSize(90,25);
		jl2.setLocation(10, 40);
		this.add(jl2);
		ta.setEditable(false);
	    JScrollPane sc=new JScrollPane(ta,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
	    sc.setSize(580,350);
	    sc.setLocation(10, 70);
	    this.add(sc);
	    jb1.setBounds(100,430,100,25);
	    jb2.setBounds(400,430,100,25);
	    this.add(jb1);
	    this.add(jb2);
	    ta.append("  步骤"+"\t"+"栈"+"\t"+"当前符号"+"\t"+"剩余输入串"+"\t"+"移进或归约");
	    jb1.addActionListener(this);
	    jb2.addActionListener(this);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}	
	public void actionPerformed(ActionEvent e) 
	{
		if(e.getSource()==jb1)
			if(JOptionPane.showConfirmDialog(null,"确定清空吗?", "提示!",JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION)
			{
				ta.setText("");
				tf.setText("");
				ta.append("  步骤"+"\t"+"栈"+"\t"+"当前符号"+"\t"+"剩余输入串"+"\t"+"移进或归约");
			}
		if(e.getSource()==jb2)
		{   
			int n1=0;
			z=0;
			String st=tf.getText();
			char[] b=new char[st.length()];
			for(int l=0;l<st.length();l++)
			{
				b[l]=st.charAt(l);
				a[l]=st.charAt(l);
				n1=l;
			}
			for(int d=n1+1;d<50;d++)
				a[d]='#';
			k=1;
			s[k]='#';
			ta.append("  步骤"+"\t"+"栈"+"\t"+"当前符号"+"\t"+"剩余输入串"+"\t"+"移进或归约");
		  /* while(z<st.length()&&a[z+1]!='#')
		     {  
			    if(a[z]=='+'||a[z]=='*'||a[z]=='^'||a[z]=='i'||a[z]=='('||a[z]==')'||a[z]=='#')
			    	e();
			       z++;
		     }*/
		}
	}
 int ch(char b){
		int t=-1;
		switch(b)
		{
			case '+':t=0;break;
			case '*':t=1;break;
			case '^':t=2;break;
			case 'i':t=3;break;
			case '(':t=4;break;
			case ')':t=5;break;
			case '#':t=6;
		}
		return t;
	}
void e(){
	if(s[k]=='+'||s[k]=='*'||s[k]=='^'||s[k]=='i'||s[k]=='('||s[k]==')'||s[k]=='#')
		  j=k;
	else j=k-1;
	int x1=ch(s[j]);
	int y1=ch(a[z]);
	if(table[x1][y1]==2)
		y();
	else 
		n();
	return;
}
void y(){
	m=s[j];
	if(s[j-1]=='+'||s[j-1]=='*'||s[j-1]=='^'||s[j-1]=='i'||s[j-1]=='('||s[j-1]==')'||s[j-1]=='#')
		j=j-1;
	else j=j-2;
	int x2=ch(s[j]);
	int y2=ch(m);
	if(table[x2][y2]==1)
	{
		k=j+1;
		s[k]='N';
		e();
	}
	y();
}
void n(){
	int x3=ch(s[j]);
	int y3=ch(a[z]);
	if(table[x3][y3]==1)
	  {
		k=k+1;
	    s[k]=a[z];
	    return;
	  }
	else if(table[x3][y3]==0)
	    { if(table[x3][6]==0)
	    	 if(a[z+1]=='#')
	    		  return;
	    	 else return;
		  else {
			  k=k+1;
			    s[k]=a[z];
			    return;
		  }
	    }
		 else return;
}
	public static void main(String[] args) {
		new Jsuanfu();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -