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

📄 vt.java

📁 算符优先算法的界面实现
💻 JAVA
字号:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JComboBox;
public class Vt extends JFrame {
	public static ArrayList exa=new ArrayList();

	public static String empty=new String();
	public static String usedUpper=new String();
	public static String usedLower=new String();
	public static String Upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	public static JTextArea textArea =new JTextArea(); 
	public static JTextArea textArea_1 =new JTextArea(); 
	
	/**
	 * Launch the application
	 * @param args
	 */
	
	public static void main(String args[]) {
		try {
			Vt frame = new Vt();
			frame.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the frame
	 */
	public Vt() {
		super();
		getContentPane().setBackground(new Color(255, 128, 64));
		getContentPane().setForeground(new Color(255, 128, 0));
		getContentPane().setLayout(null);
		setTitle("算符优先分析分析器");
		setBounds(100, 100, 500, 375);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		final JButton button = new JButton();
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				exa=Blank(textArea.getText());
				Exe();
			}
		});
		button.setText("算符优先分析");
		button.setBounds(202, 60, 105, 49);
		getContentPane().add(button);

		final JLabel label = new JLabel();
		label.setText("输入");
		label.setBounds(34, 31, 60, 15);
		getContentPane().add(label);

		final JLabel label_1 = new JLabel();
		label_1.setText("算符分析结果");
		label_1.setBounds(330, 31, 79, 15);
		getContentPane().add(label_1);

		final JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(34, 60, 131, 228);
		getContentPane().add(scrollPane);

		textArea = new JTextArea();
		scrollPane.setViewportView(textArea);

		final JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(342, 60, 118, 228);
		getContentPane().add(scrollPane_1);

		textArea_1 = new JTextArea();
		scrollPane_1.setViewportView(textArea_1);
		//
	}
	


ArrayList Blank(String getString)//处理空格,把输入的语言按照空格分置成字符串 
{
	
	ArrayList returnString=new ArrayList();
	int i=1;
	System.out.println(getString);
	StringTokenizer getStringTokenizer=new StringTokenizer(getString,";");
	while(getStringTokenizer.hasMoreTokens())
	{
	String exeString=getStringTokenizer.nextToken();
	String t=exeString.replace('-',' ');
	String s=t.replaceAll("\\s+","");
    returnString.add(s);
    System.out.println("TTT"+s);
    i++;
	}
	return returnString;

}
	public static void Exe()
	{
	usedUpper=getusedUpper();

	usedLower=getusedLower();
	textArea_1.append("分析中......\n");
	textArea_1.append("FIRSTVT集和LASTVT集");

	System.out.println("------------------------------------");
	for(int i=0;i<usedUpper.length();i++)
	{
		textArea_1.append("FIRSTVT("+usedUpper.charAt(i)+")="+exeUnique(firstvt(usedUpper.charAt(i)))+"\n");
		textArea_1.append("LASTVT("+usedUpper.charAt(i)+")="+exeUnique(lastvt(usedUpper.charAt(i)))+"\n");
	}
	textArea_1.append("算符优先关系表");
	textArea_1.append(String.valueOf(getPre('+','+'))+"\n");
	for(int i=0;i<usedLower.length();i++)
	{
	for(int j=0;j<usedLower.length();j++)
	{
	char getchar1=usedLower.charAt(i);
	char getchar2=usedLower.charAt(j);

	textArea_1.append("TABLE("+getchar1+","+getchar2+")="+getPre(getchar1,getchar2)+"\n");
	}
	textArea_1.append("\n");
	}
	}

	public static char getPre(char getchar1,char getchar2)
	{
	char returni='?';
	String getstring1=getUnder(getchar1);
	String getstring2=getOver(getchar2);
	String getstring3=getEqu(getchar1);
	for(int i=0;i<getstring1.length();i++)
	{
	if(getchar2==getstring1.charAt(i))
	{
	returni='<';
	break;
	}
	}
	for(int i=0;i<getstring3.length();i++)
	{
	if(getchar2==getstring3.charAt(i))
	{
	returni='=';
	break;
	}
	}
	for(int i=0;i<getstring2.length();i++)
	{
	if(getchar1==getstring2.charAt(i))
	{
	returni='>';
	break;
	}
	}
	return returni;
	}

	public static String getEqu(char getchar)
	{
	StringBuffer returnString=new StringBuffer();
	ArrayList getList=getExist(getchar);
	for(int i=0;i<getList.size();i++)
	{
		String getStr=String.valueOf(getList.get(i));
		for(int j=0;j<getStr.length();j++)
		{
		if(getchar==getStr.charAt(j))
		{
		if(j+2<getStr.length())
		returnString.append(getStr.charAt(j+2));
		}
		}
	}
//	System.out.println("========="+returnString.toString());
	return returnString.toString();
	}

	public static String getOver(char getchar)
	{
	StringBuffer returnString=new StringBuffer();
	ArrayList getList=getExist(getchar);
	for(int i=0;i<getList.size();i++)
	{
	String getStr=String.valueOf(getList.get(i));
	for(int j=0;j<getStr.length();j++)
	{
	if(getStr.charAt(j)==getchar)
	if((j-1)>0)
	returnString.append(lastvt(getStr.charAt(j-1)));
	}
	}
//	System.out.println(">>>>>>>>>>>"+returnString.toString());
	return exeUnique(returnString.toString());
	}

	public static String getUnder(char getchar)
	{
	StringBuffer returnString=new StringBuffer();
	ArrayList getList=getExist(getchar);
	for(int i=0;i<getList.size();i++)
	{
	String getStr=String.valueOf(getList.get(i));
	for(int j=0;j<getStr.length();j++)
	{
	if(getStr.charAt(j)==getchar)
	if((j+1)<getStr.length())
	returnString.append(firstvt(getStr.charAt(j+1)));
	}
	}
	System.out.println("<<<<<<<<<<<<<"+returnString.toString());
	return exeUnique(returnString.toString());
	}

	public static String lastvt(char getchar)
	{
//	System.out.println(getchar);
	StringBuffer returnString=new StringBuffer();
	ArrayList getprodure=getProduce(getchar);
	for(int i=0;i<getprodure.size();i++)
	{
	char getChar;
	char getChar1;
	String getString=String.valueOf(getprodure.get(i));
//	System.out.println(getString.length());
	getChar=getString.charAt((getString.length()-1));
//	System.out.println("getChar="+getChar+isLower(getChar));
	if(isLower(getChar)==0||getChar=='?')
	{

//	System.out.println("last("+getchar+") append"+getChar);
	returnString.append(getChar);
	}
	else if(isLower(getChar)==1)
	{
	if(getString.length()>2)
	{
//	System.out.println("--------------------");
	getChar1=getString.charAt((getString.length()-2));
//	System.out.println(getChar1+"+++"+getChar);
	returnString.append(getChar1);
	}
	if(getChar!=getchar)
	returnString.append(lastvt(getChar));
	}
	}
	return exeUnique(returnString.toString());

	}


	public static String firstvt(char getchar)
	{
	StringBuffer returnString=new StringBuffer();
	ArrayList getprodure=getProduce(getchar);
	for(int i=0;i<getprodure.size();i++)
	{
	char getChar;
	char getChar1;
	String getString=String.valueOf(getprodure.get(i));
	getChar=getString.charAt(1);
	System.out.println("getChar="+getChar+isLower(getChar));
	if(isLower(getChar)==0||getChar=='?')
	{

	System.out.println("First("+getchar+") append"+getChar);
	returnString.append(getChar);
	}
	else if(isLower(getChar)==1)
	{
	if(getString.length()>2)
	{
	getChar1=getString.charAt(2);
	returnString.append(getChar1);
	}
	if(getChar!=getchar)
	returnString.append(firstvt(getChar));
	}
	}
	return returnString.toString();
	}
	public static ArrayList getProduce(char getchar)//获取指定非终结符的产生式
	{
	ArrayList returnarraylist=new ArrayList();
	for(int i=0;i<exa.size();i++)
	{
	String getString=String.valueOf(exa.get(i));
	if(getString.charAt(0)==getchar)
	returnarraylist.add(getString);
	}
	return returnarraylist;
	}

	public static int isLower(char gchar)
	{
	if((gchar>=97&&gchar<=122)||(gchar>=34&&gchar<=64))
	return 0;
	else if(gchar>=65&&gchar<=90)
	return 1;
	else
	return -1;
	}
		
		

	public static String exeUnique(String getstring)
	{
	StringBuffer returnstring=new StringBuffer();
	for(int i=0;i<getstring.length();i++)
	{
	int f=0;
	for(int j=i+1;j<getstring.length();j++)
	{
	if(getstring.charAt(i)==getstring.charAt(j))
	{
	f=1;
	break;
	}
	}
	if(f==1)
	{
	if(i==getstring.length())
	break;
	}
	else
	returnstring.append(getstring.charAt(i));
	}
	return returnstring.toString();
	}


	public static ArrayList getExist(char getchar)
	{
	ArrayList returnarraylist=new ArrayList();
	for(int i=0;i<exa.size();i++)
	{
	String getString=String.valueOf(exa.get(i));
	for(int j=1;j<getString.length();j++)
	if(getString.charAt(j)==getchar)
	{
	returnarraylist.add(getString);
	break;
	}
	}
	return returnarraylist;
	}

	public static String getusedLower()
	{
	StringBuffer returnst=new StringBuffer(usedLower);
	for(int i=0;i<exa.size();i++)
	{
	String getstring=String.valueOf(exa.get(i));
	for(int j=0;j<getstring.length();j++)
	{
	char getchar=getstring.charAt(j);
	if((getchar>=97&&getchar<=122)||(getchar>=34&&getchar<=64))
	{
//	System.out.println(getchar);
	returnst.append(getchar);
	}
	}
	}
	String s=returnst.toString();
//	System.our.println(s);
	return exeUnique(s);
	}

	public static String getusedUpper()
	{
	StringBuffer returnst=new StringBuffer(usedUpper);
	for(int i=0;i<exa.size();i++)
	{
//	System.out.print(i);
	String getstring=String.valueOf(exa.get(i));
	char getchar=getstring.charAt(0);
//	System.out.println(getchar);
	returnst.append(getchar);
	}
//	System.out.println("returnst:"+returnst.toString());
	String s=returnst.toString();
//	System.out.println("exeUnique(s):"+exeUnique(s));
	return exeUnique(s);
	}

}

⌨️ 快捷键说明

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