📄 java.txt
字号:
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JLabel;
import java.awt.Rectangle;
import javax.swing.JTextArea;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import java.io.*;
public class Scan extends JFrame {
private static final long serialVersionUID = 1L;
// private static final int TIME=500;睡眠时间
private JPanel jContentPane = null;
private JMenuBar jJMenuBar = null;
private JMenu jMenuFile = null;
private JMenu jMenuAbout = null;
private JLabel jLabelIn = null;
private JLabel jLabelOut = null;
private JTextArea jTextAreaIn = null;
private JTextArea jTextAreaOut = null;
private JButton jButtonOpen = null;
private JButton jButtonScan = null;
private JButton jButtonSave = null;
private JButton jButtonExit = null;
private JMenuItem jMenuItemOpen = null;
private JMenuItem jMenuItemScan = null;
private JMenuItem jMenuItemSave = null;
private JMenuItem jMenuItemExit = null;
private JMenuItem jMenuItemAbout = null;
private JMenuItem jMenuItemAboutAuthor = null;
private JLabel jLabelStatus = null;
private String jTextAreaStr = "";
/**
* This method initializes jJMenuBar
*
* @return javax.swing.JMenuBar
*/
private JMenuBar getJJMenuBar() {
if (jJMenuBar == null) {
jJMenuBar = new JMenuBar();
jJMenuBar.add(getJMenuFile());
jJMenuBar.add(getJMenuAbout());
}
return jJMenuBar;
}
/**
* This method initializes jMenuFile
*
* @return javax.swing.JMenu
*/
private JMenu getJMenuFile() {
if (jMenuFile == null) {
jMenuFile = new JMenu();
jMenuFile.setText("文件");
jMenuFile.add(getJMenuItemOpen());
jMenuFile.add(getJMenuItemScan());
jMenuFile.add(getJMenuItemSave());
jMenuFile.add(getJMenuItemExit());
}
return jMenuFile;
}
/**
* This method initializes jMenuAbout
*
* @return javax.swing.JMenu
*/
private JMenu getJMenuAbout() {
if (jMenuAbout == null) {
jMenuAbout = new JMenu();
jMenuAbout.setText("帮助");
jMenuAbout.add(getJMenuItemAbout());
jMenuAbout.add(getJMenuItemAboutAuthor());
}
return jMenuAbout;
}
/**
* This method initializes jTextAreaIn
*
* @return javax.swing.JTextArea
*/
private JTextArea getJTextAreaIn() {
if (jTextAreaIn == null) {
jTextAreaIn = new JTextArea();
jTextAreaIn.setBounds(new Rectangle(122, 4, 412, 150));
}
return jTextAreaIn;
}
/**
* This method initializes jTextAreaOut
*
* @return javax.swing.JTextArea
*/
//这里设置输出区
private JTextArea getJTextAreaOut() {
if (jTextAreaOut == null) {
jTextAreaOut = new JTextArea();
jTextAreaOut.setEditable(false);
jTextAreaOut.setBounds(new Rectangle(122, 160, 412, 150));
}
return jTextAreaOut;
}
/**
* This method initializes jButtonOpen
*
* @return javax.swing.JButton
*/
//这里清空文本区的设置
private JButton getJButtonOpen() {
if (jButtonOpen == null) {
jButtonOpen = new JButton();
jButtonOpen.setBounds(new Rectangle(67, 315, 80, 20));
jButtonOpen.setText("清空");
jButtonOpen.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
jTextAreaIn.replaceRange("", 0 , jTextAreaIn.getText().length()) ;
jTextAreaOut.replaceRange("", 0 , jTextAreaOut.getText().length()) ;//清空文本区的内容
jTextAreaStr = "";//文件名清空
}
});
}
return jButtonOpen;
}
/**
* This method initializes jButtonScan
*
* @return javax.swing.JButton
*/
// ////////////////////////////////////////////////////////////////////////////////////////////////
// 标识符 字母|字母 数字
// 关键字 else if int return void while main
// 符号 +-*/
// 数字 0123456789
// private String exp;
// ///////////////////////////////////////////////////////////////////////////////////////////////
private int expIdx;
private boolean isDigit;
private String token = "";
private void getToken(String exp) {
if (expIdx == exp.length()) {
System.out.println("扫描结束");
}
while (expIdx < exp.length() && exp.charAt(expIdx) == '\n')
++expIdx;
if (expIdx == exp.length()) {
System.out.println("扫描结束");
}
if (isDelim(exp.charAt(expIdx))) {
token += exp.charAt(expIdx);
switch (token.toCharArray()[0]) {
case '\n':
break;
case '<':
out("小于号", token);
break;
case '>':
out("大于号", token);
break;
case '=':
out("等于号", token);
break;
case '+':
out("加号", token);
break;
case '-':
out("减号", token);
break;
case '*':
out("乘号", token);
break;
case '/':
out("除号", token);
break;
case '(':
out("左小括号", token);
break;
case ')':
out("右小括号", token);
break;
case '[':
out("左中括号", token);
break;
case ']':
out("右中括号", token);
break;
case '{':
out("左大括号", token);
break;
case '}':
out("右大括号", token);
break;
case ',':
out("逗号", token);
break;
case ';':
out("分号", token);
break;
case ' ':
break;
default:
out("不是c语言允许的符号!", token);
break;
}
expIdx++;
// ///////////////////////////////////
token = "";
}
else if (Character.isLetter(exp.charAt(expIdx))) {
while (!isDelim(exp.charAt(expIdx)) && exp.charAt(expIdx) != '\n') {
token += exp.charAt(expIdx);
expIdx++;
if (expIdx >= exp.length())
break;
}
if (check(token))
out("关键字", token);
else
out("标识符", token);
// ///////////////////////////////////
token = "";
}
else if (Character.isDigit(exp.charAt(expIdx))) {
while (!isDelim(exp.charAt(expIdx)) && exp.charAt(expIdx) != '\n') {
isDigit = true;
if (Character.isLetter(exp.charAt(expIdx))) {
isDigit = false;
}
token += exp.charAt(expIdx);
expIdx++;
if (expIdx >= exp.length())
break;
}
if (isDigit == true)
out("数字" ,token);
else
out("非法字符" , token);
// ///////////////////////////////////
token = "";
} else {
JOptionPane.showMessageDialog(jContentPane, "出现了本系统无法识别字符,请重新输入……",
"出错", JOptionPane.ERROR_MESSAGE);
expIdx = jTextAreaStr.length();
}
}
private boolean isDelim(char c) {
if ((" +-*/;><=,()[]{}".indexOf(c) != -1)) {
return true;
}
return false;
}
String[] keyword = { "else", "if", "int", "return", "void", "while", "main" };
private boolean check(String s) {
int i = 0;
while (i < keyword.length) {
if (s.equals(keyword[i])) {
return true;
}
i++;
}
return false;
}
private void out(String s, String s1) {
jTextAreaOut.append("(" + s + "," + s1 + ")" + '\n');
}
/*
* private void out(String s, char c) { jTextAreaOut.append("(" + s + "," +
* c + ")" + '\n'); }
*/
private JButton getJButtonScan() {
if (jButtonScan == null) {
jButtonScan = new JButton();
jButtonScan.setBounds(new Rectangle(182, 315, 80, 20));
jButtonScan.setText("扫描");
// //////////////////////////////////////////////////////////////////////
// private String jTextAreaStr;
// private StringTokenizer st;
// ///////////////////////////////////////////////////////////////////////
jButtonScan.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
jTextAreaOut.setText("");
jTextAreaStr = "";
// jTextAreaStr=new String();
jTextAreaStr = jTextAreaIn.getText();
// //////////////////////////////////////////////////////////////////
expIdx = 0;// 此处必须初始化……
// //////////////////////////////////////////////////////////////////
while (expIdx <= jTextAreaStr.length()) {
getToken(jTextAreaStr);
}
jTextAreaStr = "";
}
});
// //////////////////////////////////////////////////////////////////////
}
return jButtonScan;
}
/**
* This method initializes jButtonSave
*
* @return javax.swing.JButton
*/
private JButton getJButtonSave() {
if (jButtonSave == null) {
jButtonSave = new JButton();
jButtonSave.setBounds(new Rectangle(67, 347, 80, 20));
jButtonSave.setText("保存");
jButtonSave.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent e)
{
try
{
FileOutputStream fos=new FileOutputStream(new File("分析的结果.txt"));
OutputStreamWriter osw=new OutputStreamWriter(fos);
String saveString=jTextAreaOut.getText().replaceAll("\n","\r\n");
osw.write(saveString);
osw.flush();
osw.close();
}catch(Exception ee)
{
ee.printStackTrace();
}
}
}
);
//setVisible(true);
setVisible(true);
}
return jButtonSave;
}
/**
* This method initializes jButtonExit
*
* @return javax.swing.JButton
*/
private JButton getJButtonExit() {
if (jButtonExit == null) {
jButtonExit = new JButton();
jButtonExit.setBounds(new Rectangle(182, 347, 80, 20));
jButtonExit.setText("退出");
jButtonExit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.exit(0);
}
});
}
return jButtonExit;
}
/**
* This method initializes jMenuItemOpen
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJMenuItemOpen() {
if (jMenuItemOpen == null) {
jMenuItemOpen = new JMenuItem();
jMenuItemOpen.setText("清空");
}
return jMenuItemOpen;
}
/**
* This method initializes jMenuItemScan
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJMenuItemScan() {
if (jMenuItemScan == null) {
jMenuItemScan = new JMenuItem();
jMenuItemScan.setText("扫描");
}
return jMenuItemScan;
}
/**
* This method initializes jMenuItemSave
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJMenuItemSave() {
if (jMenuItemSave == null) {
jMenuItemSave = new JMenuItem();
jMenuItemSave.setText("保存");
}
return jMenuItemSave;
}
/**
* This method initializes jMenuItemExit
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJMenuItemExit() {
if (jMenuItemExit == null) {
jMenuItemExit = new JMenuItem();
jMenuItemExit.setText("退出");
jMenuItemExit
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.exit(0);
}
});
}
return jMenuItemExit;
}
/**
* This method initializes jMenuItemAbout
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJMenuItemAbout() {
if (jMenuItemAbout == null) {
jMenuItemAbout = new JMenuItem();
jMenuItemAbout.setText("关于系统");
jMenuItemAbout
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
JOptionPane.showMessageDialog(jContentPane,
"你好!这是一个C语言的词法分析器", "关于系统",
JOptionPane.INFORMATION_MESSAGE);
}
});
}
return jMenuItemAbout;
}
/**
* This method initializes jMenuItemAboutAuthor
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJMenuItemAboutAuthor() {
if (jMenuItemAboutAuthor == null) {
jMenuItemAboutAuthor = new JMenuItem();
jMenuItemAboutAuthor.setText("作者信息");
jMenuItemAboutAuthor
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
JOptionPane
.showMessageDialog(
jContentPane,
"成都大学信息技术学院-----杜宏波E_mail:00dubob@163.com qq:373027805",
"作者信息",
JOptionPane.INFORMATION_MESSAGE);
}
});
}
return jMenuItemAboutAuthor;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Scan thisClass = new Scan();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
/**
* This is the default constructor
*/
public Scan() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(550, 440);
this.setLocation(150, 150);
this.setJMenuBar(getJJMenuBar());
this.setContentPane(getJContentPane());
this.setTitle("*****欢迎使用本系统!*****" );
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabelStatus = new JLabel();
jLabelStatus.setBounds(new Rectangle(303, 319, 184, 55));
jLabelStatus.setText("loading");
jLabelOut = new JLabel();
jLabelOut.setBounds(new Rectangle(18, 200, 90, 50));
jLabelOut.setText("扫描结果:");
jLabelIn = new JLabel();
jLabelIn.setBounds(new Rectangle(18, 2, 90, 50));
jLabelIn.setText("在这输入:");
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(jLabelIn, null);
jContentPane.add(jLabelOut, null);
jContentPane.add(getJTextAreaIn(), null);//输入区
jContentPane.add(getJTextAreaOut(), null);//输出区
jContentPane.add(getJButtonOpen(), null);
jContentPane.add(getJButtonScan(), null);
jContentPane.add(getJButtonSave(), null);
jContentPane.add(getJButtonExit(), null);
jContentPane.add(jLabelStatus, null);
}
return jContentPane;
}
} // @jve:decl-index=0:visual-constraint="96,10"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -