jueves, 14 de enero de 2010

Programa de Automata con Pila que analisa identificador operador identificador y solo los operadores de suma y multiplicacion

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

/**
*
* @author edson
*/
public class AAutomatA {
int z;
public String Lenguaje(String cadena, int i){

String nuevacadena=cadena+'$';
String res = null, palabra=" ";
int matriz[][] = new int[4][5];

matriz[1][1]=2; matriz[1][2]=2; matriz[1][3]=3; matriz[1][4]=90;
matriz[2][1]=2; matriz[2][2]=2; matriz[2][3]=3; matriz[2][4]=100;
matriz[3][1]=2; matriz[3][2]=2; matriz[3][3]=3; matriz[3][4]=90;


int renglon=1,columna=1;

try{

do{
if(Character.isLetter(nuevacadena.charAt(i)))
{
columna=1;
renglon=matriz[renglon][columna];
palabra=palabra+nuevacadena.charAt(i);
//System.out.println( renglon );
}
if(nuevacadena.charAt(i)=='_')
{
columna=2;
renglon=matriz[renglon][columna];
palabra=palabra+nuevacadena.charAt(i);
//System.out.println( renglo );
}
if(Character.isDigit(nuevacadena.charAt(i)))
{
columna=3;
renglon=matriz[renglon][columna];
palabra=palabra+nuevacadena.charAt(i);
//System.out.println( renglon);
}
if(nuevacadena.charAt(i)=='$')
{
columna = 4;
renglon= matriz[renglon ][columna];
}

i++;

}while(Character.isDigit(nuevacadena.charAt(i))==true||
Character.isLetter(nuevacadena.charAt(i))==true||
nuevacadena.charAt(i)=='_');
z=i-1;
}catch(ArrayIndexOutOfBoundsException e)
{}

res = palabra;
return res;
}

public int Resp(){
int i = 0;
i=z;
return i;
}

}


// Pila

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Stack;

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

/**
*
* @author Edson
*/
public class APilA {

/*public static void main(String args[]) throws IOException
{
String cadena;


try
{

BufferedReader n=new BufferedReader(new FileReader("CADENA.txt"));
while((cadena=n.readLine())!=null){
comprueba(cadena);
}

}
catch(FileNotFoundException e)
{
System.out.println("No se encuentra el archivo");
}
}*/



public String comprueba(String cadena)
{

String E="E",EP="E'",T="T",TP="T'",F="F" , a="(", c=")", m="+" ,p="*" ;
//String nuevacadena=cadena+'$';
String palabra= cadena;
Stack Pila = new Stack();
String nuevacadena=null;
int tam =palabra.length(),i=0;
int matriz [][]=new int [12][8];
String id=null;

AAutomatA app =new AAutomatA();

matriz[1][1]=15; matriz[1][2]=15; matriz[1][3]=15; matriz[1][4]=15; matriz[1][5]=15; matriz[1][6]=2;
matriz[2][1]=3; matriz[2][2]=15; matriz[2][3]=15; matriz[2][4]=15; matriz[2][5]=15; matriz[2][6]=4;
matriz[3][1]=15; matriz[3][2]=15; matriz[3][3]=15; matriz[3][4]=15; matriz[3][5]=15; matriz[3][6]=5;
matriz[4][1]=15; matriz[4][2]=6; matriz[4][3]=15; matriz[4][4]=15; matriz[4][5]=15; matriz[4][6]=7;
matriz[5][1]=15; matriz[5][2]=15; matriz[5][3]=8; matriz[5][4]=15; matriz[5][5]=9; matriz[5][6]=15;
matriz[6][1]=15; matriz[6][2]=15; matriz[6][3]=15; matriz[6][4]=15; matriz[6][5]=15; matriz[6][6]=15;
matriz[7][1]=15; matriz[7][2]=11; matriz[7][3]=15; matriz[7][4]=15; matriz[7][5]=15; matriz[7][6]=15;
matriz[8][1]=15; matriz[8][2]=15; matriz[8][3]=12; matriz[8][4]=15; matriz[8][5]=15; matriz[8][6]=15;
matriz[9][1]=15; matriz[9][2]=15; matriz[9][3]=15; matriz[9][4]=13; matriz[9][5]=15; matriz[9][6]=15;
matriz[10][1]=15; matriz[10][2]=15; matriz[10][3]=15; matriz[10][4]=15; matriz[10][5]=14; matriz[10][6]=15;
matriz[11][1]=15; matriz[11][2]=15; matriz[11][3]=15; matriz[11][4]=15; matriz[11][5]=15; matriz[11][6]=16;
Pila.clear();
Pila.push(E);
int renglon=0,columna=0,A=0;
String res=null;


while( A<=tam) { try { if(Pila.empty() == true) { renglon = 11; if(nuevacadena.charAt(i)=='+') columna = 1; if(nuevacadena.charAt(i)=='*') columna = 2; if(nuevacadena.charAt(i)=='(') columna = 3; if(nuevacadena.charAt(i)==')') columna = 4; if(Character.isLetter(nuevacadena.charAt(i)) || Character.isDigit(nuevacadena.charAt(i)) || nuevacadena.charAt(i)== '_') columna = 5; if(nuevacadena.charAt(i)=='$') columna = 6; } if(Pila.peek()==E) { renglon = 1; columna = 6; } if(Pila.peek()==EP) { renglon = 2; if(nuevacadena.charAt(i)=='+') columna = 1; else columna = 6; } if(Pila.peek()==T) { renglon = 3; columna = 6; } if(Pila.peek()==TP) { renglon = 4; if(nuevacadena.charAt(i)=='*') columna = 2; else columna = 6; } if(Pila.peek()==F) { renglon = 5; if(nuevacadena.charAt(i)=='(') columna = 3; if(Character.isLetter(nuevacadena.charAt(i)) || Character.isDigit(nuevacadena.charAt(i)) || nuevacadena.charAt(i)== '_') columna = 5; } if(Pila.peek() == m) { renglon = 6; if(nuevacadena.charAt(i)=='+') columna = 1; else columna = 6; } if(Pila.peek() == p) { renglon = 7; if(nuevacadena.charAt(i)=='*') columna = 2; else columna = 6; } if(Pila.peek()==a) { renglon = 8; if(nuevacadena.charAt(i)=='(') columna = 3; else columna = 6; } if(Pila.peek()==c) { renglon = 9; if(nuevacadena.charAt(i)==')') columna = 4; else columna = 6; } if(Pila.peek()==id) { renglon = 10; if(nuevacadena.charAt(i)=='+') columna = 1; if(nuevacadena.charAt(i)=='*') columna = 2; if(nuevacadena.charAt(i)=='(') columna = 3; if(nuevacadena.charAt(i)==')') columna = 4; if(Character.isLetter(nuevacadena.charAt(i)) || Character.isDigit(nuevacadena.charAt(i)) || nuevacadena.charAt(i)== '_') columna = 5; if(nuevacadena.charAt(i)=='$') columna = 6; } if(matriz[ renglon][columna] == 2) { Pila.pop(); Pila.push(EP); Pila.push(T); } if(matriz[ renglon][columna] == 3) { Pila.pop(); Pila.push(EP); Pila.push(T); Pila.push(m); } if(matriz[ renglon][columna] == 4) { Pila.pop(); } if(matriz[ renglon][columna] == 5) { Pila.pop(); Pila.push(TP); Pila.push(F); } if(matriz[ renglon][columna] == 6) { Pila.pop(); Pila.push(TP); Pila.push(F); Pila.push(p); } if(matriz[ renglon][columna] == 7) { Pila.pop(); } if(matriz[ renglon][columna] == 8) { Pila.pop(); Pila.push(c); Pila.push(E); Pila.push(a); } if(matriz[ renglon][columna] == 9) { Pila.pop(); id = app.Lenguaje(cadena, i); i = app.Resp(); Pila.push(id); if(id.charAt(0)=='0') { res="Cadena no Aceptada"; break; } if(id.charAt(0)=='1') { res="Cadena no Aceptada"; break; } if(id.charAt(0)=='2') { res="Cadena no Aceptada"; break; } if(id.charAt(0)=='3') { res="Cadena no Aceptada"; break; } if(id.charAt(0)=='4') { res="Cadena no Aceptada"; break; } if(id.charAt(0)=='5') { res="Cadena no Aceptada"; break; } if(id.charAt(0)=='6') { res="Cadena no Aceptada"; break; } if(id.charAt(0)=='7') { res="Cadena no Aceptada"; break; } if(id.charAt(0)=='8') { res="Cadena no Aceptada"; break; } if(id.charAt(0)=='9') { res="Cadena no Aceptada"; break; } } if(matriz[ renglon][columna] == 10) { Pila.pop(); i++; } if(matriz[ renglon][columna] == 11) { Pila.pop(); i++; } if(matriz[ renglon][columna] == 12) { Pila.pop(); i++; } if(matriz[ renglon][columna] == 13) { Pila.pop(); i++; } if(matriz[ renglon][columna] == 14) { Pila.pop(); i++; } A=tam+1; } catch(java.util.EmptyStackException e) { } if(columna==0) { res="Cadena No Aceptada"; break; } if(matriz[ renglon][columna]==100 && Pila.empty()==true) { res="Cadena Aceptada"; break; } if(matriz[ renglon][columna]==90) { res="Cadena No Aceptada"; break; } } return res; } } // Aplicacion /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * NewApplett.java * */ /** * * @author Edson */ public class NewApplett extends java.applet.Applet { /** Initializes the applet NewApplett */ 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. */ //
private void initComponents() {

jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jTextField2 = new javax.swing.JTextField();

setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

jLabel1.setText("Cadena");
add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(80, 90, -1, -1));
add(jTextField1, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 90, 130, -1));

jButton1.setText("Evaluar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 150, -1, -1));

jLabel2.setText("Es:");
add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(80, 220, -1, -1));
add(jTextField2, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 220, 210, -1));
}//


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.out.println(jTextField1.getText());
AAutomatA app = new AAutomatA();
APilA ppa= new APilA();
//jTextField2.setText(app.toString());
jTextField2.setText(ppa.comprueba(jTextField1.getText()));
}


// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration

}


No hay comentarios:

Publicar un comentario