📄 vt.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 + -