jueves, 14 de enero de 2010

Programa que analiza lexicamente SQL

/**
*
* @author Edson
*/

// Automata
public class AutomataAnalisador {
int cont;

public String analizarid (String palabra, int v) {
// TODO code application logic here

int tabla[][] = new int [5][40];
// letra _ numero ( ) + * - / @ { } [ ] " ' & | < > = . , : ; ¡ ! \ fin de cadena
tabla [0][0] = 1; tabla [0][1] = 1; tabla [0][2] = 2; tabla [0][3] = 1; tabla [0][4] = 1; tabla [0][5] = 1; tabla [0][6] = 1; tabla [0][7] = 1; tabla [0][8] = 1; tabla [0][9] = 1; tabla [0][10] = 1; tabla [0][11] = 1; tabla [0][12] = 1; tabla [0][13] = 1; tabla [0][14] = 1; tabla [0][15] = 1; tabla [0][16] = 1; tabla [0][17] = 1; tabla [0][18] = 1; tabla [0][19] = 1; tabla [0][20] = 1; tabla [0][21] = 1; tabla [0][22] = 1; tabla [0][23] = 1; tabla [0][24] = 1; tabla [0][25] = 1; tabla [0][26] = 1; tabla [0][27] = 1;tabla [0][28] = 0;
tabla [1][0] = 1; tabla [1][1] = 1; tabla [1][2] = 1; tabla [1][3] = 1; tabla [1][4] = 1; tabla [1][5] = 1; tabla [1][6] = 1; tabla [1][7] = 1; tabla [1][8] = 1; tabla [1][9] = 1; tabla [1][10] = 1; tabla [1][11] = 1; tabla [1][12] = 1; tabla [1][13] = 1; tabla [1][14] = 1; tabla [1][15] = 1; tabla [1][16] = 1; tabla [1][17] = 1; tabla [1][18] = 1; tabla [1][19] = 1; tabla [1][20] = 1; tabla [1][21] = 1; tabla [1][22] = 1; tabla [1][23] = 1; tabla [1][24] = 1; tabla [1][25] = 1; tabla [0][26] = 1; tabla [1][27] = 1;tabla [1][28] = 1;
tabla [2][0] = 2; tabla [2][1] = 2; tabla [2][2] = 2; tabla [2][3] = 2; tabla [2][4] = 2; tabla [2][5] = 2; tabla [2][6] = 2; tabla [2][7] = 2; tabla [2][8] = 2; tabla [2][9] = 2; tabla [2][10] = 2; tabla [2][11] = 2; tabla [2][12] = 2; tabla [2][13] = 2; tabla [2][14] = 2; tabla [2][15] = 2; tabla [2][16] = 2; tabla [2][17] = 2; tabla [2][18] = 2; tabla [2][19] = 2; tabla [2][20] = 2; tabla [2][21] = 2; tabla [2][22] = 2; tabla [2][23] = 2; tabla [2][24] = 2; tabla [2][25] = 2; tabla [0][26] = 2; tabla [2][27] = 1;tabla [2][28] = 2;


String cadena = palabra;
String resp = null;
int estado = 0;

try{

for ( ; cadena.length()>v; v++ ) // bucle para analizar la cadena
{
if( cadena.charAt(v) == ' ' || cadena.charAt(v) == '\n' ) continue;

if( cadena.charAt(v) >='a' && cadena.charAt(v) <='z' || cadena.charAt(v) >='A' && cadena.charAt(v) <='Z' ) estado = tabla[estado][0]; else if( cadena.charAt(v) =='_' ) estado = tabla[estado][1]; else if(cadena.charAt(v) >='0' && cadena.charAt(v) <='9' ) estado = tabla[estado][2]; else if( cadena.charAt(v) =='(' ) estado = tabla[estado][3]; else if( cadena.charAt(v) ==')' ) estado = tabla[estado][4]; else if( cadena.charAt(v) =='+' ) estado = tabla[estado][5]; else if( cadena.charAt(v) =='*' ) estado = tabla[estado][6]; else if( cadena.charAt(v) =='-' ) estado = tabla[estado][7]; else if( cadena.charAt(v) =='/' ) estado = tabla[estado][8]; else if( cadena.charAt(v) =='@' ) estado = tabla[estado][9]; else if( cadena.charAt(v) =='{' ) estado = tabla[estado][10]; else if( cadena.charAt(v) =='}' ) estado = tabla[estado][11]; else if( cadena.charAt(v) =='[' ) estado = tabla[estado][12]; else if( cadena.charAt(v) ==']' ) estado = tabla[estado][13]; else if( cadena.charAt(v) =='\"' )estado = tabla[estado][14]; else if( cadena.charAt(v) =='\'' )estado = tabla[estado][15]; else if( cadena.charAt(v) =='&' ) estado = tabla[estado][16]; else if( cadena.charAt(v) =='|' ) estado = tabla[estado][17]; else if( cadena.charAt(v) =='<' ) estado = tabla[estado][18]; else if( cadena.charAt(v) =='>' ) estado = tabla[estado][19];

else if( cadena.charAt(v) =='=' ) estado = tabla[estado][20];

else if( cadena.charAt(v) =='.' ) estado = tabla[estado][21];

else if( cadena.charAt(v) ==',' ) estado = tabla[estado][22];

else if( cadena.charAt(v) ==':' ) estado = tabla[estado][23];

else if( cadena.charAt(v) ==';' ) estado = tabla[estado][24];

else if( cadena.charAt(v) =='¡' ) estado = tabla[estado][25];

else if( cadena.charAt(v) =='!' ) estado = tabla[estado][26];

else if( cadena.charAt(v) =='\\' ) estado = tabla[estado][27];

else estado = 2; // estado de error
}
cont = v - 1;

if( estado != 1 )
{System.out.println("No pertenece al Alfabeto");
resp = "Existe un simbolo que no pertenece al alfabeto";
}
else
{System.out.println("Si pertenece al Alfabeto");
resp = "Lexicamente Correcto";
}
}catch(ArrayIndexOutOfBoundsException e){}

return resp;
}

}


// Interfaz
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Edson
*/
public class NewJApplet extends javax.swing.JApplet {

/** Initializes the applet NewJApplet */
public void init() {
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}

/** This method is called from within the init() method to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
//
private void initComponents() {

jTextField2 = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();

jLabel1.setText("Codigo a analizar");

jLabel2.setText("Resultado");

jButton1.setText("Analizar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

jButton2.setText("Salir");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});

jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);

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(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE)
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(211, Short.MAX_VALUE)
.addComponent(jButton1)
.addGap(117, 117, 117)
.addComponent(jButton2)
.addGap(32, 32, 32))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)
.addGap(41, 41, 41)
.addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 227, Short.MAX_VALUE)
.addGap(158, 158, 158))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(57, 57, 57)
.addComponent(jLabel1))
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(24, 24, 24)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton2)
.addComponent(jButton1))
.addGap(34, 34, 34))
);
}//


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//automatapila app = new automatapila();
//jTextField2.setText(app.analizarpila(jTextField1.getText()));

AutomataAnalisador app = new AutomataAnalisador();
jTextField2.setText(app.analizarid(jTextArea1.getText(),0));
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.exit(0);
}


// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField2;
// End of variables declaration

}

No hay comentarios:

Publicar un comentario