jueves, 14 de enero de 2010

Pila Estructura de Datos

// Elaboracion de una Pila (Estructura de datos) dinamica para el almacenamiento de expresiones

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

package automatapilacombinado;

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

int tope=-1;
int vec[];

pila(int max)
{
vec=new int [max];
}
public boolean llena()
{
if (tope==vec.length-1)
return true;
else
return false;
}
public boolean vacia()
{
if (tope==-1)
return true;
else
return false;
}
public void push(int dato)
{
if (llena()== true)
System.out.println("Overflow");
else
if (tope==-1)
{
tope=0;
vec[tope]=dato;
}
else
{
tope++;
vec[tope]=dato;
}
}
public int pop()
{
int aux;
if (vacia()==true)
{
System.out.println("La pila esta vacia");
return -1;
}
else
{
aux=vec[tope];
tope--;
}
return aux;
}
public void Imprime_Datos()
{
if(vacia()==true)
{
System.out.println("Ingrese los datos:");
}
else
for(int Contador=0;Contador
System.out.println("Los valores son:"+vec[Contador]);
}
}


Automata que acepta las letras del abecedario en mayusculas y minusculas

La representación grafica del autómata es algo parecida a esto.

/*
Automata.java

Este es un automata que valida cadenas a partir de un archivo de texto.

Las condiciones son:

La cadena debe de empezar por una o más letras mayúsculas (L) (Cualquier letra del abecedario),
seguido de una o más letras minúsculas (l) (Cualquier letra del abecedario),
después puede seguir un digito cualquiera una o más veces (d),
y ahí puede terminar el autómata.
Sin embargo entra una condición más que contempla la entrada de un guion bajo (_)
y seguido de un digito una o más veces.
Concluye cuando después de la cadena se encuentra con un Enter, un Tabulador o un Espacio.

Scorpion Black 2009

http://vscorpionblack.blogspot.com

*/
import java.io.*;
public class Automata
{
public static void main(String args[]) throws IOException
{
String cadena;
String cadena2;

try
{

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

}
catch(FileNotFoundException e)
{
System.out.println("No se encuentra el archivo");
}
}
public static void comprueba(String palabra)
{
String nuevacadena=palabra;
int tam=nuevacadena.length();

int matriz [][]=new int [4][8];
// L l d _ espacio tabular enter cualquier simbolo
matriz[0][0]=1; matriz[0][1]=0; matriz[0][2]=0; matriz[0][3]=0; matriz[0][4]=200; matriz[0][5]=200; matriz[0][6]=200; matriz[0][7]=0;
matriz[1][0]=1; matriz[1][1]=2; matriz[1][2]=0; matriz[1][3]=0; matriz[1][4]=200; matriz[1][5]=200; matriz[1][6]=200; matriz[0][7]=0;
matriz[2][0]=0; matriz[2][1]=2; matriz[2][2]=3; matriz[2][3]=0; matriz[2][4]=200; matriz[2][5]=200; matriz[2][6]=200; matriz[0][7]=0;
matriz[3][0]=0; matriz[3][1]=0; matriz[3][2]=3; matriz[3][3]=2; matriz[3][4]=100; matriz[3][5]=100; matriz[3][6]=100; matriz[0][7]=0;

int ren=0,col=0,flag=0;
try
{
for(int i=0;i
{
switch(nuevacadena.charAt(i))
{
case 'A':
System.out.print("A");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'B':
System.out.print("B");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'C':
System.out.print("C");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'D':
System.out.print("D");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'E':
System.out.print("E");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'F':
System.out.print("F");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'G':
System.out.print("G");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'H':
System.out.print("H");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'I':
System.out.print("I");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'J':
System.out.print("J");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'K':
System.out.print("K");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'L':
System.out.print("L");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'M':
System.out.print("M");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'N':
System.out.print("N");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'O':
System.out.print("O");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'P':
System.out.print("P");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'Q':
System.out.print("Q");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'R':
System.out.print("R");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'S':
System.out.print("S");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'T':
System.out.print("T");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'U':
System.out.print("U");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'V':
System.out.print("V");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'W':
System.out.print("W");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'X':
System.out.print("X");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'Y':
System.out.print("Y");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'Z':
System.out.print("Z");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'a':
System.out.print("a");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'b':
System.out.print("b");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'c':
System.out.print("c");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'd':
System.out.print("d");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'e':
System.out.print("e");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'f':
System.out.print("f");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'g':
System.out.print("g");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'h':
System.out.print("h");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'i':
System.out.print("i");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'j':
System.out.print("j");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'k':
System.out.print("k");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'l':
System.out.print("l");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'm':
System.out.print("m");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'n':
System.out.print("n");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'o':
System.out.print("o");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'p':
System.out.print("p");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'q':
System.out.print("q");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'r':
System.out.print("r");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 's':
System.out.print("s");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 't':
System.out.print("t");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'u':
System.out.print("u");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'v':
System.out.print("v");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'w':
System.out.print("w");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'x':
System.out.print("x");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'y':
System.out.print("y");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'z':
System.out.print("z");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case '0':
System.out.print("0");
col=2;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case '1':
System.out.print("1");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '2':
System.out.print("2");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '3':
System.out.print("3");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '4':
System.out.print("4");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '5':
System.out.print("5");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '6':
System.out.print("6");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '7':
System.out.print("7");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '8':
System.out.print("8");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '9':
System.out.print("9");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '_':
System.out.print("_");
col=3;
if(ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case 32:
col=4;
ren=matriz[ren][col];
if(ren==100) //estado de aceptacin
{

System.out.println(" Cadena Valida \n");
ren=0;
}

else if(ren==200||flag==1) //estado de error
{

System.out.print(" Cadena invalida \n");
ren=0;
}
break;

case 9:
col=5;
ren=matriz[ren][col];
if(ren==100) //estado de aceptacin
{

System.out.println(" Cadena Valida \n");
ren=0;
}

else if(ren==200||flag==1) //estado de error
{

System.out.print(" Cadena invalida \n");
ren=0;
}
break;

case 11:
col=6;
ren=matriz[ren][col];
if(ren==100) //estado de aceptacin
{

System.out.println(" Cadena Valida \n");
ren=0;
}

else if(ren==200||flag==1) //estado de error
{

System.out.print(" Cadena invalida \n");
ren=0;
}
break;

default:
System.out.print(nuevacadena.charAt(i));
col=7;
if(ren==0||ren==1||ren==2)
flag=1;
ren=matriz[ren][col];
break;
}

}
}
catch (ArrayIndexOutOfBoundsException exc)
{
}
}
}

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

}

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

}


Programa que reconose palabreas reservadas de un programa

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

package automatatarea2;

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

/**
* @param args the command line arguments
*/
public String analizar (String texto) {
// TODO code application logic here
int bandera;
int tabla[][] = new int [6][4]; //se crea la matriz
// letra numero (_) fin de cadena
tabla [0][0] = 1; tabla [0][1] = 5; tabla [0][2] = 1; tabla [0][3] = 5;
tabla [1][0] = 2; tabla [1][1] = 3; tabla [1][2] = 4; tabla [1][3] = 1;
tabla [2][0] = 2; tabla [2][1] = 2; tabla [2][2] = 2; tabla [2][3] = 2;
tabla [3][0] = 3; tabla [3][1] = 3; tabla [3][2] = 3; tabla [3][3] = 3;
tabla [4][0] = 4; tabla [4][1] = 4; tabla [4][2] = 4; tabla [4][3] = 4;
tabla [5][0] = 5; tabla [5][1] = 5; tabla [5][2] = 5; tabla [5][3] = 5;

String reservadas [] = new String [4];

reservadas [0] = "for";
reservadas [1] = "while";
reservadas [2] = "do";
reservadas [3] = "break";

String cadena = texto; // se escribe la cadena para analizarla
String respuesta = null;
int estado = 0, i; // declaracion de variables

for ( i = 0; cadena.length()>i; i++ ) // bucle para analizar la cadena
{
if( cadena.charAt(i) >='a' && cadena.charAt(i) <='z' ) // es el rango para el caracter (letra), en la posicion i
{
estado = tabla[estado][0]; // posicion en la tabla que pertenece a las letras
}
else if(cadena.charAt(i) >='0' && cadena.charAt(i) <='9' ) // es el rango para el caracter (digito), en la posicion i
{
estado = tabla[estado][1]; // posicion en la tabla que pertenece a los numeros
}

else if( cadena.charAt(i) =='_' ) // tambien si la posicion i es un operador (_)
{
estado = tabla[estado][2]; // posicion en la tabla que pertenece al operador (_)
}

else {
estado = 5; // posicion de error
break;
}
System.out.println("i: "+i+" estado: "+estado); // imprime la iteracion y el estado que se produce, donde cada iteracion es caracter analizado
}
bandera = 0;
for (i=0; i<4; i++)
{
if (reservadas[i].equals(cadena))
bandera=1;
}
if (bandera==1)
{System.out.println("palabra reservada");
respuesta = "Palabra reservada, ok";
}
else
{
if( estado !=1 && estado != 2 && estado != 3 && estado != 4 ) // si no es un estado final 1 o 3 no es aceptada la cadena
{System.out.println("palabra no aceptada");
respuesta = "Palabra no aceptada";
}
else
{System.out.println("palabra aceptada");
respuesta = "Palabra aceptada";
}
}
return respuesta;
}

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

package automatatarea2;

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

/**
* @param args the command line arguments
*/
public String analizar (String texto) {
// TODO code application logic here
int bandera;
int tabla[][] = new int [6][4]; //se crea la matriz
// letra numero (_) fin de cadena
tabla [0][0] = 1; tabla [0][1] = 5; tabla [0][2] = 1; tabla [0][3] = 5;
tabla [1][0] = 2; tabla [1][1] = 3; tabla [1][2] = 4; tabla [1][3] = 1;
tabla [2][0] = 2; tabla [2][1] = 2; tabla [2][2] = 2; tabla [2][3] = 2;
tabla [3][0] = 3; tabla [3][1] = 3; tabla [3][2] = 3; tabla [3][3] = 3;
tabla [4][0] = 4; tabla [4][1] = 4; tabla [4][2] = 4; tabla [4][3] = 4;
tabla [5][0] = 5; tabla [5][1] = 5; tabla [5][2] = 5; tabla [5][3] = 5;

String reservadas [] = new String [4];

reservadas [0] = "for";
reservadas [1] = "while";
reservadas [2] = "do";
reservadas [3] = "break";

String cadena = texto; // se escribe la cadena para analizarla
String respuesta = null;
int estado = 0, i; // declaracion de variables

for ( i = 0; cadena.length()>i; i++ ) // bucle para analizar la cadena
{
if( cadena.charAt(i) >='a' && cadena.charAt(i) <='z' ) // es el rango para el caracter (letra), en la posicion i
{
estado = tabla[estado][0]; // posicion en la tabla que pertenece a las letras
}
else if(cadena.charAt(i) >='0' && cadena.charAt(i) <='9' ) // es el rango para el caracter (digito), en la posicion i
{
estado = tabla[estado][1]; // posicion en la tabla que pertenece a los numeros
}

else if( cadena.charAt(i) =='_' ) // tambien si la posicion i es un operador (_)
{
estado = tabla[estado][2]; // posicion en la tabla que pertenece al operador (_)
}

else {
estado = 5; // posicion de error
break;
}
System.out.println("i: "+i+" estado: "+estado); // imprime la iteracion y el estado que se produce, donde cada iteracion es caracter analizado
}
bandera = 0;
for (i=0; i<4; i++)
{
if (reservadas[i].equals(cadena))
bandera=1;
}
if (bandera==1)
{System.out.println("palabra reservada");
respuesta = "Palabra reservada, ok";
}
else
{
if( estado !=1 && estado != 2 && estado != 3 && estado != 4 ) // si no es un estado final 1 o 3 no es aceptada la cadena
{System.out.println("palabra no aceptada");
respuesta = "Palabra no aceptada";
}
else
{System.out.println("palabra aceptada");
respuesta = "Palabra aceptada";
}
}
return respuesta;
}

}


//Codigo de la Aplicacion

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

/*
* NewJApplet.java
*
* Created on 14/10/2009, 09:24:31 AM
*/

package automatatarea2;

import javax.swing.JOptionPane;

/**
*
* @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() {

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

setBackground(new java.awt.Color(153, 0, 0));

jLabel1.setText("Cadena a analizar");

jLabel2.setText("Respuesta");

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);
}
});

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(79, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addGroup(layout.createSequentialGroup()
.addGap(18, 18, 18)
.addComponent(jLabel2)))
.addGap(46, 46, 46))
.addGroup(layout.createSequentialGroup()
.addComponent(jButton1)
.addGap(1, 1, 1)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jTextField1)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(49, 49, 49)
.addComponent(jButton2)))
.addGap(75, 75, 75))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(71, 71, 71)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(40, 40, 40)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel2)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(27, 27, 27)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addContainerGap(99, Short.MAX_VALUE))
);
}//


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
JOptionPane.showMessageDialog(null,jTextField1.getText());
Main app = new Main();
jTextField2.setText(app.analizar(jTextField1.getText()));
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
JOptionPane.showMessageDialog(null,"Gracias");
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.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration

}

Complejidad de Algoritmos

Concepto Complejidad Algoritmos

La resolución práctica de un problema exige por una parte un algoritmo o método de resolución y por otra un programa o codificación de aquel en un ordenador real.

Ambos componentes tienen su importancia, pero la del algoritmo es absolutamente esencial, mientras que la codificación puede muchas veces pasar a nivel de anécdota.

A efectos prácticos o ingenieriles, nos deben preocupar los recursos físicos necesarios para que un programa se ejecute.

Aunque puede haber muchos parametros, los mas usuales son el tiempo de ejecución y la cantidad de memoria (espacio).

Ocurre con frecuencia que ambos parametros están fijados por otras razones y se plantea la pregunta inversa: ¿cual es el tamano del mayor problema que puedo resolver en T segundos y/o con M bytes de memoria?

En lo que sigue nos centramos casi siempre en el parametro tiempo de ejecución, si bien las ideas desarrolladas son fácilmente aplicables a otro tipo de recursos.

Para cada problema determinaremos un medida N de su tamaño (por número de datos) e intentaremos hallar respuestas en función de dicho N.

El concepto exacto que mide N depende de la naturaleza del problema.