📄 test.txt
字号:
//用Java写的词法分析器
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.StringTokenizer;
public class Test extends JFrame
{
private MenuBar bar = new MenuBar();
private Menu menuFile = new Menu("文件");
private Menu menuEdit = new Menu("编辑");
private Menu menuHelp = new Menu("帮助");
private MenuItem menuFileOpen = new MenuItem("打开");
//private MenuItem menuFileSave = new MenuItem("保存");
//private MenuItem menuFileSaveAs = new MenuItem("另存为");
private MenuItem menuFileQuit = new MenuItem("退出");
// private MenuItem menuEditRun = new MenuItem("运行");
// private MenuItem menuEditStop = new MenuItem("停止");
private MenuItem menuHelpCenter = new MenuItem("关于");
// private MenuItem menuHelpAbout = new MenuItem("帮助中心");
private JButton beginButton = new JButton("运行");
private JButton cleanButton= new JButton("清空");
private JButton keyButton = new JButton("关键字");
private JLabel inLabel = new JLabel("输入代码");
private JLabel beginButton6= new JLabel("分析结果");
Font fon=new Font("Dialog",Font.PLAIN,18);
private TextArea inTextArea = new TextArea(30,32);
//inTextArea.setFont(BOLD);
// inTextArea.setFont(BOLD);
private TextArea outTextArea = new TextArea(30,32);
private TextArea keyTextArea = new TextArea(30,32);
private JPanel pane = new JPanel();
String[] keyWords = {"auto","break","case","char","const","continue",
"default","do","double","else","enum","float","for","goto","if","int",
"long","rebister","return","short","signed","sizeof","static","struct",
"switch","typedef","union","unsigned","void","volatile","while","main"};
String[] operator = {"+","-","*","/","%","=",".",">","<","?",","};
String[] sepretor = {";",":","{","}","(",")","[","]"};
/*
*菜单栏
*/
private void initconter()
{
menuFile.add(menuFileOpen);
// menuFile.add(menuFileSave);
// menuFile.add(menuFileSaveAs);
menuFile.addSeparator();
menuFile.add(menuFileQuit);
// menuEdit.add(menuEditRun);
//menuEdit.add(menuEditStop);
menuHelp.add(menuHelpCenter);
// menuHelp.add(menuHelpAbout);
bar.add(menuFile);
//bar.add(menuEdit);
bar.add(menuHelp);
}
/*
*布局管理器
*/
void buildConstraints(GridBagConstraints gbc,
int gx, int gy,int gw,int gh,int wx, int wy)
{
gbc.gridx = gx;
gbc.gridy = gy;
gbc.gridwidth = gw;
gbc.gridheight = gh;
gbc.weightx = wx;
gbc.weighty = wy;
}
/*
*布局键面
*/
private void setMyPane()
{
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
pane.setLayout(gridbag);
buildConstraints(constraints, 0,0,1,1,25,5);
constraints.fill = GridBagConstraints.VERTICAL;
gridbag.setConstraints(inLabel,constraints);
pane.add(inLabel);
buildConstraints(constraints, 1,0,1,1,25,0);
gridbag.setConstraints(beginButton,constraints);
pane.add(beginButton);
buildConstraints(constraints, 0,1,2,3,25,90);
gridbag.setConstraints(inTextArea,constraints);
inTextArea.setFont(fon);
pane.add(inTextArea);
buildConstraints(constraints, 3,1,2,3,0,0);
gridbag.setConstraints(keyTextArea,constraints);
keyTextArea.setFont(fon);
pane.add(keyTextArea);
buildConstraints(constraints, 6,1,2,3,0,0);
gridbag.setConstraints(outTextArea,constraints);
outTextArea.setFont(fon);
pane.add(outTextArea);
buildConstraints(constraints, 4,0,1,1,25,0);
gridbag.setConstraints(keyButton,constraints);
pane.add(keyButton);
buildConstraints(constraints, 6,0,1,1,25,0);
gridbag.setConstraints(cleanButton,constraints);
pane.add(cleanButton);
buildConstraints(constraints, 7,0,1,1,25,0);
gridbag.setConstraints(beginButton6,constraints);
pane.add(beginButton6);
initconter();
setMenuBar(bar);
//setVisible(true);
setLocation(200,80);
setContentPane(pane);
}
/*
*添加事件监听器
*/
private void initListener()
{
ActListener actListener = new ActListener();
menuFileOpen.addActionListener(actListener);
menuFileQuit.addActionListener(actListener);
// menuEditRun.addActionListener(actListener);
menuHelpCenter.addActionListener(actListener);
beginButton.addActionListener(actListener);
cleanButton.addActionListener(actListener);
keyButton.addActionListener(actListener);
}
/*
*构建事件监听器
*/
class ActListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == menuFileOpen)
{
openFile();
}
if(e.getSource() == menuFileQuit)
{
System.exit(0);
}
if(e.getSource() == beginButton)
{
porRun();
}
if(e.getSource() == keyButton)
{
keyRun();
}
// if(e.getSource()==menuEditRun)
//{
// porRun();
//}
if(e.getSource() == menuHelpCenter)
{
JOptionPane.showMessageDialog(Test.this, "开发者:张勰柽,孙静,戴佳丽\n上海财经大学");
}
if(e.getSource()==cleanButton)
{
inTextArea.setText("");
outTextArea.setText("");
keyTextArea.setText("");
}
}
}
//打开文件实现
// private String text;
private void openFile()
{
try{
JFileChooser jFileChooser = new JFileChooser();
jFileChooser.showOpenDialog(pane);
String fileName =null;
fileName =jFileChooser.getSelectedFile().getPath();
File file = new File(fileName);
int fLength;
fLength = (int) file.length();
int num = 0;
FileReader fReader = new FileReader(file);
char[] date = new char[fLength];
while(fReader.ready())
{
num += fReader.read(date, num, fLength - num);
}
fReader.close();
inTextArea.setText(new String(date, 0,num));
}catch(IOException f){}
}
private void keyRun()
{
for(int i2=0;i2<keyWords.length;i2++) //输出关键字
{
keyTextArea.append(keyWords[i2]+"-->"+(3+i2)+"\n");
}
} //显示关键字
private void porRun() //分析过程
{
String inText = inTextArea.getText();
//String inText = ("main() int a= 1;");
//String[] keyWords = {"main()","int"};
StringTokenizer str1 = new StringTokenizer(inText," \n\t\r;+=-\"\')(}{][<>,*",true);
//\n\t等为自定义的分隔符
int n = str1.countTokens();//一共得到n个字符
String[] intext = new String[str1.countTokens()];
for(int a = 0;a<n;a++)
{
intext[a] = str1.nextToken();
}
outTextArea.append(" 常数-->1 标识符-->2"+"\n");
outTextArea.append("====================================\n");
for(int i1=0;i1<intext.length;i1++)
{
outer: for(int i2=0;i2<keyWords.length;i2++) //判断为保留字
{
if(intext[i1].equals(keyWords[i2]))
{
//System.out.println(intext[i1]+" 1");
outTextArea.append(intext[i1]+" "+(i2+3)+"\n");//第一个关键字排号为3
i1++;
break outer;
}
}
for(int i3=0;i3<operator.length;i3++) //判断为运算符
{
if(intext[i1].equals(operator[i3]))
outTextArea.append(intext[i1]+" "+(i3+3+keyWords.length)+"\n");//第一个运算符排序前有关键字
}
for(int i4=0;i4<sepretor.length;i4++)
{
if(intext[i1].equals(sepretor[i4]))
{//判断为分隔符
outTextArea.append(intext[i1]+" "+(i4+3+keyWords.length+operator.length)+"\n");
}//第一个分隔符排序前有关键字+运算符
}
char[] inChar=intext[i1].toCharArray();
if(Character.isDigit(inChar[0]))
outTextArea.append(intext[i1]+" 1"+"\n");
if(Character.isLetter(inChar[0]))
outTextArea.append(intext[i1]+" 2"+"\n");
}
}
public Test()
{
super("词法分析器");
setSize(800,600);
//getContentPane().setBackground(Color.RED);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initListener();
setMyPane();
show();
porRun();
}
public static void main(String[] args)
{
Test t = new Test();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -