/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* LexicalAnalysis.java
*
* Created on 2009-11-17, 8:50:09
*/
/**
*
* @author Zhangwei
*/
import javax.swing.*;
import java.awt.*;
public class LexicalAnalysis_2 extends javax.swing.JFrame {
/** Creates new form LexicalAnalysis */
public LexicalAnalysis_2() {
initComponents();
setLocationRelativeTo(null);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jLabel4 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("词法分析程序(JAVA版) 2740610228 张伟 ");
jLabel1.setFont(new java.awt.Font("微软雅黑", 1, 24));
jLabel1.setText("词法分析程序");
jLabel1.setName("jLabel1"); // NOI18N
jLabel2.setFont(new java.awt.Font("微软雅黑", 1, 12));
jLabel2.setText("请输入你要分析的语句");
jLabel2.setName("jLabel2"); // NOI18N
jTextField1.setName("jTextField1"); // NOI18N
jButton1.setText("分析");
jButton1.setName("jButton1"); // NOI18N
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jLabel3.setFont(new java.awt.Font("微软雅黑", 1, 12));
jLabel3.setText("语句分析结果如下");
jLabel3.setName("jLabel3"); // NOI18N
jScrollPane1.setName("jScrollPane1"); // NOI18N
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jTextArea1.setName("jTextArea1"); // NOI18N
jScrollPane1.setViewportView(jTextArea1);
jLabel4.setText("注:该词法分析程序是分析形如ABCabc123:=12.3+4.56的词法语句");
jLabel4.setName("jLabel4"); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(131, Short.MAX_VALUE)
.addComponent(jLabel1)
.addGap(125, 125, 125))
.addGroup(layout.createSequentialGroup()
.addGap(23, 23, 23)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 332, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3)
.addGroup(layout.createSequentialGroup()
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 269, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel2))
.addContainerGap(23, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel4)
.addContainerGap(13, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
String key[]={"begin","end","if","then","else","while","write","read","do", "call","const","char","until","procedure","repeat"};//关键字
boolean isKey(String s)
{
for(int a=0;a<=14;a++)
{
if(s.equals(key[a]))
return true;
}
return false;
}
void Process(int a)
{
switch(a)
{
case 1: JOptionPane.showMessageDialog(null, "输入的语句为空");
break;
case 2: JOptionPane.showMessageDialog(null, "错误!输入字符首字母为整数");
break;
case 3: JOptionPane.showMessageDialog(null, "错误!赋值符或+不存在");
break;
case 4: JOptionPane.showMessageDialog(null, "错误!赋值符:= +和.不能在文法的开头或者结尾出现");
break;
case 5: JOptionPane.showMessageDialog(null, "错误!多次出现: = + 或.");
break;
case 6: JOptionPane.showMessageDialog(null, "错误!标示符不能为关键字");
break;
case 7: JOptionPane.showMessageDialog(null, "错误!语句中出现其它符号");
break;
case 8: JOptionPane.showMessageDialog(null, "错误!标示符中有.出现");
break;
case 9: JOptionPane.showMessageDialog(null, "错误!赋值符后有字母出现");
break;
case 10: JOptionPane.showMessageDialog(null, "错误!+出现在数字的首部或者尾部");
break;
case 11: JOptionPane.showMessageDialog(null, "错误!+前多次出现.");
break;
case 12: JOptionPane.showMessageDialog(null, "错误!+后多次出现.");
break;
case 13: String s_0=jTextField1.getText();
int n=s_0.length();
int count_3=s_0.indexOf(":");
String s_3=s_0.substring(0, count_3);
int count_4=s_0.indexOf(":", 0);
String s_6=s_0.substring(count_4+2, n);
int count_5=s_6.indexOf("+");
int count_6=s_6.length();
String s_7=s_6.substring(0, count_5);
String s_8=s_6.substring(count_5+1,count_6 );
jTextArea1.setText("输入:"+s_0+"\n"+"输出: 正确\n"+"标示符: "+s_3+"\n"+"赋值符: :=\n"+"运算符:+\n"+"无符号数1:"+s_7+"\n"+"无符号数2:"+s_8);
break;
default: {}
}
}
voi