/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package hit.ui;
import hit.core.*;
//import java.awt.Color;
import java.io.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
/**
*
* @author songmingye
*/
public class Syntax_Frame extends javax.swing.JFrame {
/**
* Creates new form Syntax_Frame
*/
public Syntax_Frame() {
initComponents();
}
/**
* 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">//GEN-BEGIN:initComponents
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
text_area = new javax.swing.JTextArea();
jLabel1 = new javax.swing.JLabel();
Syntax_button = new javax.swing.JButton();
analysis_button = new javax.swing.JButton();
clean_button = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
production_table = new javax.swing.JTable();
jScrollPane3 = new javax.swing.JScrollPane();
result_table = new javax.swing.JTable();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
read_button = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
text_area.setColumns(20);
text_area.setRows(5);
jScrollPane1.setViewportView(text_area);
jLabel1.setText("代码区");
Syntax_button.setText("导入文法");
Syntax_button.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Syntax_buttonActionPerformed(evt);
}
});
analysis_button.setText("句法分析");
analysis_button.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
analysis_buttonActionPerformed(evt);
}
});
clean_button.setText("清空文本");
clean_button.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clean_buttonActionPerformed(evt);
}
});
production_table.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null}
},
new String [] {
"编号", "产生式", "select集"
}
));
jScrollPane2.setViewportView(production_table);
result_table.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null}
},
new String [] {
"栈内元素", "输入缓冲区", "说明"
}
));
jScrollPane3.setViewportView(result_table);
jLabel2.setText("产生式select集");
jLabel3.setText("句法分析区");
read_button.setText("导入文本");
read_button.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
read_buttonActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(23, 23, 23)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel3)
.addGap(0, 0, Short.MAX_VALUE))
.addComponent(jScrollPane3)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 515, Short.MAX_VALUE)
.addGap(30, 30, 30)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(Syntax_button)
.addComponent(analysis_button)
.addComponent(clean_button)
.addComponent(read_button, javax.swing.GroupLayout.Alignment.LEADING)))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel1)
.addGap(0, 0, Short.MAX_VALUE)))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 472, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jLabel2))
.addGap(4, 4, 4)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jScrollPane1)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(Syntax_button)
.addGap(45, 45, 45)
.addComponent(read_button)
.addGap(41, 41, 41)
.addComponent(analysis_button)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 46, Short.MAX_VALUE)
.addComponent(clean_button)
.addGap(26, 26, 26))
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(172, 172, 172))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 10, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 607, javax.swing.GroupLayout.PREFERRED_SIZE)
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void analysis_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_analysis_buttonActionPerformed
// TODO add your handling code here:
int rowIndex = 0;
/*****初始化****/
syntax_analysis.derived_strings.push("<s>");
result_table.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null}
},
new String [] {
"栈内元素", "输入缓冲区", "说明"
}
));
/***********/
String content = text_area.getText();
lexical_analysis = new Lexical();
lexical_analysis.Lexical_Analysis(content);
ArrayList<Token> list = (ArrayList) lexical_analysis.Token_List.clone();
do{
Object[] new_row = new Object[3];
new_row[0] = "$";
new_row[1] = "";
for(String s : syntax_analysis.derived_strings){
new_row[0] = s+new_row[0];
}
for(Token t : list){
new_row[1] += Syntax.Token_Code[t.code]+" ";
}
new_row[1] = new_row[1]+"$";
syntax_analysis.Syntax_Analysis(list);
DefaultTableModel tableModel = (DefaultTableModel) result_table.getModel();
new_row[2] = syntax_analysis.explaination;
tableModel.insertRow(rowIndex, new_row);
//result_table.getCellEditor(rowIndex, 2).getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column).setBackground(Color.red);
rowIndex++;
}while(!syntax_analysis.explaination.equals("结束"));
}//GEN-LAST:event_analysis_buttonActionPerformed
private void Syntax_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_Syntax_buttonActionPerformed
// TODO add your handling code here:
syntax_analysis = new Syntax();
syntax_analysis.create_list();
syntax_analysis.create_first();
syntax_analysis.create_follow();
syntax_analysis.create_select();
syntax_analysis.create_predict_map();
int len = syntax_analysis.production_list.size();
Object[][] e = new Object[len][3];
for(int i=0;i<len;i++){
Production p = syntax_analysis.production_list.get(i);
e[i][0] = p.num;
e[i][1] = p.left+"->";
e[i][2] = "";
for(String s : p.right){
e[i][1] += s;
}
for(String s : p.select){
e[i][2] += s+" ";
}
}
production_table.setModel(new javax.swing.table.DefaultTableModel(
e,
new String [] {
"编号", "产生式", "select集"
}
));
}//GEN-LAST:event_Syntax_buttonActionPerformed
private void clean_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clean_buttonActionPerformed
// TODO add your handling code here:
text_area.setText(null);
}//GEN-LAST:event_clean_buttonActionPerformed
private void read_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_read_buttonActionPerformed
// TODO add your handling code here:
JFileChooser fd = new JFileChooser();
//fd.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fd.showOpenDialog(null);
String temp="";
File f = fd.getSelectedFile();
if(f != null){
InputStream is = null;
try {
is = new FileInputStream(f);
} catch (FileNotFoundException ex) {
Logger.getLogger(Syntax_Frame.class.getName()).log(Level.SEVERE, null, ex);
}
InputStreamReader fr = new InputStreamReader(is);
int ch = 0;
try {
while((ch = fr.read())!=-1 ){
temp += (char)ch;
} } catch (IOException ex) {
Logger.getLogger(Syntax_Frame.class.getName()).log(Level.SEVERE, null, ex);
}
text_area.setText(temp);
}
}//GEN-LAST:event_read_buttonActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Syntax_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Syntax_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Syntax_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Syntax_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Syntax_Frame().setVisible(true);
}
});
}
private Syntax syntax_analysis;
private Lexical lexical_analysis;
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton Syntax_button;
private javax.swing.JButton analysis_button;
private javax.swing.JButton clean_button;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JTable production_table;
private javax.swing.JButton read_button;
private javax.swing.JTable result_table;
private javax.swing.JTextArea text_area;
// End of variables declaration//GEN-END:variables
}