Etapa 1

Código de la Primera Fase

 

Main:

/*
* 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 chmaquina;

/**
*
* @author Luis Carlos
*/
public class Main
{
/** Creates a new instance of Main */
public Main()
{
}

/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
NewJFrame a=new NewJFrame ();
a.setVisible(true);
}
}

 

ListaDoble:

/*
* 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 chmaquina;

/**
*
* @author Luis Carlos
*/
public class ListaDoble
{
Nodo p;
Nodo q;

public ListaDoble()
{
p=null;
q=null;
}

public void ingrPrinc(Nodo dato)
{
if (p==null)
{
p=dato;
q=dato;
}
else
{
p.setAnt(dato);
dato.setSig(p);
p=dato;
}
}

public void ingrUlt(Nodo dato)
{
if (p==null)
{
p=dato;
q=dato;
}
else
{
q.setSig(dato);
dato.setAnt(dato);
q=dato;
}
}

public int eliminar(Nodo dato)
{
Nodo t=p;

while(t!=null)
{
if(t.getInfo().equals(dato.getInfo()))
{
if((t.getAnt()==null)&&(t.getSig()==null))
{
p=null;
q=null;
}
else if(t==p)
{
p=p.getSig();
p.setAnt(null);
return 1;
}
else if (t==q)
{
q=q.getAnt();
q.setSig(null);
return 1;
}
else
{
t.getAnt().setSig(t.getSig());
t.getSig().setAnt(t.getAnt());
return 1;
}
}
t=t.getSig();
}
return -1;
}

public void borrar(Nodo a)
{
Nodo t=p;

while (t!=null)
{
if (t.getInfo().equals(a.getInfo()))
{
a.setSig(null);
t=null;
}
else
t=t.getSig();
}
}

public void borrarAnt(Nodo t)
{
p=t;
t.setAnt(null);
}
}

 

CorrerPasoAPaso:

/*
* 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 chmaquina;
import java.util.StringTokenizer;

/**
*
* @author Luis Carlos
*/
public class CorrerPasoAPaso extends Thread
{
NewJFrame frame=new NewJFrame();
ListaDoble ldEjecutar;
static ListaDoble ldVariable;
static ListaDoble ldVarVector;
javax.swing.JTable jTableDos;
javax.swing.JTextArea jTextAreaTres;
javax.swing.JTextField jTextFieldCuatro;
javax.swing.JTextField jTextFieldCinco;
static int numVariable=0;
static int ejecutarP=0;
static int reanudarP=0;
//static int numProg=1;

public CorrerPasoAPaso(ListaDoble ldE, ListaDoble ldV, javax.swing.JTable jTable, ListaDoble ldVV, javax.swing.JTextArea jTextArea,
javax.swing.JTextField jTextFieldPant, javax.swing.JTextField jTextFieldImpr)
{
ldEjecutar=ldE;
ldVariable=ldV;
jTableDos=jTable;
ldVarVector=ldVV;
jTextAreaTres=jTextArea;
jTextFieldCuatro=jTextFieldPant;
jTextFieldCinco=jTextFieldImpr;
}

public void run()
{
ejecutarPaso(ldEjecutar.p);
}

public void ejecutarPaso(Nodo t)
{
ejecutarP=0;

try
{
while(t!=null)
{
if(reanudarP==0)
{
//Cárguese/copie en el acumulador el valor almacenado en la
//variable indicada por el operando.
if(t.getInfo().equals(«cargue»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
Nodo temp=ldVariable.p;

while(temp!=null)
{
if(temp.getInfo().equals(var))
{
frame.setAcum(Float.valueOf(temp.getValorVar()).toString());
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
mostrarMem();
t=t.getSig().getSig();
temp=null;
}
else
temp=temp.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
//Guarde/copie el valor que hay en el acumulador
//a la variable indicada por el operando.
else if(t.getInfo().equals(«almacene»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
Nodo t2=ldVarVector.p;

while(t2!=null)
{
if(t2.getInfo().equals(var))
{
int line=t2.getNumLine();
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
if(t3.getTipoVar().equals(«R»))
{
frame.setInfoVec(var+» «+frame.getAcum(), line);// dfdsf
t2.setValVar(frame.getAcum());//fsdjh
t3.setValVar(frame.getAcum());
}
else
{
int val=tokenizarNum(Float.parseFloat(frame.getAcum()));
//javax.swing.JOptionPane.showMessageDialog(null,»pilas»+val);
frame.setInfoVec(var+» «+Integer.toString(val), line);// dfdsf
t2.setValVar(Integer.toString(val));
t3.setValVar(Integer.toString(val));
}
t3=null;
}
else
t3=t3.getSig();
}

mostrarMem();
t=t.getSig().getSig();
t2=null;
}
else
t2=t2.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
//Incremente el valor del acumulador en el valor
//indicado por la variable señalada por el operando.
else if(t.getInfo().equals(«sume»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
String var=t.getSig().getInfo();
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
float val=Float.parseFloat(t3.getValorVar());
float suma=Float.parseFloat(frame.getAcum())+val;
frame.setAcum(Float.toString(suma));
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
mostrarMem();
t=t.getSig().getSig();
t3=null;
}
else
t3=t3.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
//Decremente el acumulador en el valor indicado por
//la variable que señala el operando.
else if(t.getInfo().equals(«reste»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
float val=Float.parseFloat(t3.getValorVar());
float resta=Float.parseFloat(frame.getAcum())-val;
frame.setAcum(Float.toString(resta));
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
mostrarMem();
t=t.getSig().getSig();
t3=null;
}
else
t3=t3.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
else if(t.getInfo().equals(«multiplique»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
float val=Float.parseFloat(t3.getValorVar());
float mult=Float.parseFloat(frame.getAcum())*val;
frame.setAcum(Float.toString(mult));
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
mostrarMem();
t=t.getSig().getSig();
t3=null;
}
else
t3=t3.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
else if(t.getInfo().equals(«divida»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
String valTemp=» «;
float val=0;
int valDesc=0;
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
val=Float.parseFloat(t3.getValorVar());
valTemp=Float.valueOf(val).toString();

while(val==0)
{
//javax.swing.JOptionPane.showMessageDialog(null,»DIVISION ENTRE CERO»);
valTemp=javax.swing.JOptionPane.showInputDialog(«Valor de la variable «+t.getSig().getInfo());

try
{
if(valTemp!=null)
{
val=Float.parseFloat(valTemp);

if(val!=0)
{
Nodo tempDiv=ldVarVector.p;

while(tempDiv!=null)
{
if(tempDiv.getInfo().equals(var))
{
int line=tempDiv.getNumLine();
Nodo tempDiv2=ldVariable.p;

while(tempDiv2!=null)
{
if(tempDiv2.getInfo().equals(var))
{
// ojo
// ojo
if(tempDiv2.getTipoVar().equals(«R»))
{
float valVar=Float.parseFloat(valTemp);
}
else if (tempDiv2.getTipoVar().equals(«I»))
{
int valVar2=Integer.parseInt(valTemp);
}

frame.setInfoVec(var+» «+valTemp, line);
tempDiv.setValVar(valTemp);
tempDiv2.setValVar(valTemp);
t3=null;
tempDiv2=null;
mostrarMem();
}
else
tempDiv2=tempDiv2.getSig();
}
tempDiv=null;
}
else
tempDiv=tempDiv.getSig();
}
}
}
else
{
javax.swing.JOptionPane.showMessageDialog(null,»Se requiere un valor diferente de cero para continuar con la ejecución»);
}
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»Tipos incompatibles de datos»);
val=0;
}
}

mostrarMem();
float div=Float.parseFloat(frame.getAcum())/val;
frame.setAcum(Float.toString(div));
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
mostrarMem();
t=t.getSig().getSig();
t3=null;
}
else
t3=t3.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
//Lee por teclado el valor a ser asignado a la variable
//indicado por el operando
else if(t.getInfo().equals(«lea»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);

try
{
String val=javax.swing.JOptionPane.showInputDialog(«Valor de la variable «+t.getSig().getInfo());

if(val!=null)
{
String var=t.getSig().getInfo();
Nodo t2=ldVarVector.p;

while(t2!=null)
{
if(t2.getInfo().equals(var))
{
int line=t2.getNumLine();
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
if(t3.getTipoVar().equals(«R»))
{
float valVar=Float.parseFloat(val);
}
else if (t3.getTipoVar().equals(«I»))
{
int valVar2=Integer.parseInt(val);
}

frame.setInfoVec(var+» «+val, line);
t2.setValVar(val);
t3.setValVar(val);
t3=null;
}
else
t3=t3.getSig();
}

mostrarMem();
t=t.getSig().getSig();
t2=null;
}
else
t2=t2.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
else
{
javax.swing.JOptionPane.showMessageDialog(null,»Se requiere el valor de la variable\n»+t.getSig().getInfo()+» para continuar con la ejecución»);
}
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»Tipos incompatibles de datos»);
}
}
//Presente por pantalla el valor que hay en la variable por el operando,
//si el operando es acumulador muestre el valor del acumulador.
else if(t.getInfo().equals(«muestre»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String dato=t.getSig().getInfo();
Nodo t5=ldVariable.p;

if(dato.equals(«acumulador»))
{
jTextFieldCuatro.setText(frame.getAcum());
t5=null;
t=t.getSig().getSig();
}

while(t5!=null)
{
if(t5.getInfo().equals(dato))
{
jTextFieldCuatro.setText(t5.getValorVar());
t5=null;
t=t.getSig().getSig();
}
else
t5=t5.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
else if(t.getInfo().equals(«imprima»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String dato=t.getSig().getInfo();
Nodo t5=ldVariable.p;

if(dato.equals(«acumulador»))
{
jTextFieldCinco.setText(frame.getAcum());
t5=null;
t=t.getSig().getSig();
}

while(t5!=null)
{
if(t5.getInfo().equals(dato))
{
jTextFieldCinco.setText(t5.getValorVar());
t5=null;
t=t.getSig().getSig();
}
else
t5=t5.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
else if(t.getInfo().equals(«etiqueta»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
t=t.getSig().getSig().getSig();

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
else if(t.getInfo().equals(«nueva»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
numVariable++;
t=t.getSig().getSig().getSig();

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
//Salte a la instrucción que corresponde a la
//etiqueta indicada por el operando y siga la ejecución a partir de allí.
else if(t.getInfo().equals(«vaya»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String etiq=t.getSig().getInfo();
Nodo tempVaya=ldEjecutar.p;

while(tempVaya!=null)
{
if(tempVaya.getNombEtiq().equals(etiq))
{
t=tempVaya;
tempVaya=null;
}
else
tempVaya=tempVaya.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
else if(t.getInfo().equals(«vayasi»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String etiq1=t.getSig().getInfo();
String etiq2=t.getSig().getSig().getInfo();
float valAcum=Float.parseFloat(frame.getAcum());

if(valAcum>0)
{
Nodo tempVaya=ldEjecutar.p;

while(tempVaya!=null)
{
if(tempVaya.getNombEtiq().equals(etiq1))
{
t=tempVaya;
tempVaya=null;
}
else
tempVaya=tempVaya.getSig();
}
}
else if(valAcum<0)
{
Nodo tempVaya=ldEjecutar.p;

while(tempVaya!=null)
{
if(tempVaya.getNombEtiq().equals(etiq2))
{
t=tempVaya;
tempVaya=null;
}
else
tempVaya=tempVaya.getSig();
}
}
else
{
t=t.getSig().getSig().getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
//Eleve el acumulador a la potencia señalada por el operando(los
//exponentes deben ser valores enteros, positivos o negativos)
else if(t.getInfo().equals(«potencia»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
float valAcum=Float.parseFloat(frame.getAcum());
String exp=t.getSig().getInfo();
float valExp=0;
float result=1;
Nodo tempPot=ldVariable.p;

while(tempPot!=null)
{
if(tempPot.getInfo().equals(exp))
{
valExp=Float.parseFloat(tempPot.getValorVar());
tempPot=null;
}
else
tempPot=tempPot.getSig();
}

if(valExp==0)
{
frame.setAcum(Integer.valueOf(1).toString());
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
t=t.getSig().getSig();
}
else if(valExp>0)
{
int i=0;

while(i<valExp)
{
result=result*valAcum;
i++;
}

frame.setAcum(Float.valueOf(result).toString());
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
t=t.getSig().getSig();
}
else
{
valExp=valExp*(-1);
int i=0;

while(i<valExp)
{
result=result*valAcum;
i++;
}

result=1/result;
frame.setAcum(Float.valueOf(result).toString());
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
t=t.getSig().getSig();
}
mostrarMem();

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
//Obtenga el modulo al dividir el valor del acumulador por el
//valor indicado por la variable señalada por el operando.
else if(t.getInfo().equals(«modulo»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
int val=0;
int result=0;
int divid=0;
int varTemp=1;
String valTemp=»»;

try
{
int desc=numEntero(Float.parseFloat(frame.getAcum()));

if(desc==1)
{
divid=obtEntero(Float.parseFloat(frame.getAcum()));
}
else
divid=Integer.parseInt(frame.getAcum());
}
catch(Exception e)
{
varTemp=0;
}

while(varTemp==0)
{
//javax.swing.JOptionPane.showMessageDialog(null,»DIVISION ENTRE CERO»);
valTemp=javax.swing.JOptionPane.showInputDialog(«Valor entero para el acumulador»);

try
{
if(valTemp!=null)
{
val=Integer.parseInt(valTemp);
frame.setAcum(Integer.toString(val));
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
varTemp=-1;
divid=val;
mostrarMem();
}
else
{
javax.swing.JOptionPane.showMessageDialog(null,»Se requiere un valor diferente de cero para continuar con la ejecución»);
}
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»Tipos incompatibles de datos»);
varTemp=0;
}
mostrarMem();
}
valTemp=»»;
//val=0;
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
val=Integer.parseInt(t3.getValorVar());
valTemp=Integer.valueOf(val).toString();

while(val==0)
{
//javax.swing.JOptionPane.showMessageDialog(null,»DIVISION ENTRE CERO»);
valTemp=javax.swing.JOptionPane.showInputDialog(«Valor de la Variable «+t.getSig().getInfo());

try
{
if(valTemp!=null)
{
val=Integer.parseInt(valTemp);

if(val!=0)
{
Nodo tempDiv=ldVarVector.p;

while(tempDiv!=null)
{
if(tempDiv.getInfo().equals(var))
{
int line=tempDiv.getNumLine();
Nodo tempDiv2=ldVariable.p;

while(tempDiv2!=null)
{
if(tempDiv2.getInfo().equals(var))
{
if (tempDiv2.getTipoVar().equals(«I»))
{
int valVar2=Integer.parseInt(valTemp);
}

frame.setInfoVec(var+» «+valTemp, line);
tempDiv.setValVar(valTemp);
tempDiv2.setValVar(valTemp);
t3=null;
tempDiv2=null;
mostrarMem();
}
else
tempDiv2=tempDiv2.getSig();
}
tempDiv=null;
}
else
tempDiv=tempDiv.getSig();
}
}
}
else
{
javax.swing.JOptionPane.showMessageDialog(null,»Se requiere un valor diferente de cero para continuar con la ejecución»);
}
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»Tipos incompatibles de datos»);
val=0;
}
}

result=divid%val;
frame.setAcum(Integer.toString(result));
jTableDos.setValueAt(Integer.toString(result),1,1);
frame.setInfoVec(«acumulador «+Integer.toString(result), 0);
// javax.swing.JOptionPane.showMessageDialog(null,»modulo «+result);
t=t.getSig().getSig();
mostrarMem();
t3=null;
}
else
t3=t3.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
else if(t.getInfo().equals(«retorne»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
//javax.swing.JOptionPane.showMessageDialog(null,numVariable+» variables»);
int numVarTemp=numVariable;

while(numVarTemp!=0)
{
ldVariable.eliminar(ldVariable.p);
numVarTemp–;
}

numVarTemp=numVariable;

while(numVarTemp!=0)
{
ldVarVector.eliminar(ldVarVector.p);
numVarTemp–;
}

numVariable=0;

if(t.getSig()==null)
{
ldEjecutar.p=null;
ldEjecutar.q=null;
}
else
ldEjecutar.borrarAnt(t.getSig());

frame.numProgEjec++;
//javax.swing.JOptionPane.showMessageDialog(null,»desde «+(frame.nucleoSist+1)+»hasta»+line);
// if (line==0)
frame.modifNum();
mostrarMem();
frame.setAcum(Float.valueOf(0).toString());
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
//mostrarMem();
t=t.getSig();

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
else if(t.getInfo().equals(«//»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
Nodo temp=t;
int i=temp.getNumLine();

while (temp!=null)
{
if (temp.getNumLine()==i+1)
{
t=temp;
temp=null;;

}
else
temp=temp.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}

if(ejecutarP==0)
{
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»¿Desea continuar la ejecución paso a paso?»);

while((ejecutarP==2)||(ejecutarP==-1))
{
javax.swing.JOptionPane.showMessageDialog(null,»Para continuar, escriba SI; de lo contrario, escriba NO»);
ejecutarP=javax.swing.JOptionPane.showConfirmDialog(null,»Continuar paso a paso»);
}
}
}
else
t=t.getSig();
}
}
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»Ocurrió un error en la ejecución»);
}
}

public void mostrarMem()
{
jTextAreaTres.setText(«»);
int val=0;
//frame.vecMem[0]=»acumulador»;
for(int i=0; i<frame.getTamMem(); i++)
{
if (frame.getInfoVec(i)==null)
{
if (i<10)
jTextAreaTres.append(«D0x0000″+val+» «+»\n»);
else if(i<100)
jTextAreaTres.append(«D0x000″+val+» «+»\n»);
else if(i<1000)
jTextAreaTres.append(«D0x00″+val+» «+»\n»);
else if(i<10000)
jTextAreaTres.append(«D0x0″+val+» «+»\n»);
else
jTextAreaTres.append(«D0x»+val+» «+»\n»);
}
else if (i<10)
jTextAreaTres.append(«D0x0000″+val+» «+frame.getInfoVec(i)+»\n»);
else if(i<100)
jTextAreaTres.append(«D0x000″+val+» «+frame.getInfoVec(i)+»\n»);
else if(i<1000)
jTextAreaTres.append(«D0x00″+val+» «+frame.getInfoVec(i)+»\n»);
else if(i<10000)
jTextAreaTres.append(«D0x0″+val+» «+frame.getInfoVec(i)+»\n»);
else
jTextAreaTres.append(«D0x»+val+» «+frame.getInfoVec(i)+»\n»);

val=val+1;
}
}

public int tokenizarNum(float num)
{
String val=Float.valueOf(num).toString();
String valDer=»»;
String valIzq=»»;
int aprox=0;

StringTokenizer sent1=new StringTokenizer(val,».»);
int numTok = sent1.countTokens();
valDer=sent1.nextToken();
valIzq=sent1.nextToken();

String b=valIzq.substring(0, 1);

int a=Integer.parseInt(b);

if(a<5)
{
aprox=Integer.parseInt(valDer);
}
else
{
if(num<0)
aprox=Integer.parseInt(valDer)-1;
else
aprox=Integer.parseInt(valDer)+1;
}

return aprox;
}

public int numEntero(float num)
{
String val=Float.valueOf(num).toString();
String valDer=»»;
String valIzq=»»;
int aprox=0;

StringTokenizer sent1=new StringTokenizer(val,».»);
int numTok = sent1.countTokens();
valDer=sent1.nextToken();
valIzq=sent1.nextToken();

if(Integer.parseInt(valIzq)==0)
return 1;
else
return 0;
}

public int obtEntero(float num)
{
String val=Float.valueOf(num).toString();
String valDer=»»;
String valIzq=»»;
int aprox=0;

StringTokenizer sent1=new StringTokenizer(val,».»);
int numTok = sent1.countTokens();
valDer=sent1.nextToken();
valIzq=sent1.nextToken();

return (Integer.parseInt(valDer));
}
}

 

CorrerCodigo:

/*
* 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 chmaquina;
import java.util.StringTokenizer;

/**
*
* @author Luis Carlos
*/
public class CorrerCodigo extends Thread
{
NewJFrame frame=new NewJFrame();
ListaDoble ldEjecutar;
static ListaDoble ldVariable;
static ListaDoble ldVarVector;
javax.swing.JTable jTableDos;
javax.swing.JTextArea jTextAreaTres;
javax.swing.JTextField jTextFieldCuatro;
javax.swing.JTextField jTextFieldCinco;
static int numVariable=0;
static int reanudarP=0;
//static int numProg=1;

public CorrerCodigo(ListaDoble ldE, ListaDoble ldV, javax.swing.JTable jTable, ListaDoble ldVV, javax.swing.JTextArea jTextArea,
javax.swing.JTextField jTextFieldPant, javax.swing.JTextField jTextFieldImpr)
{
ldEjecutar=ldE;
ldVariable=ldV;
jTableDos=jTable;
ldVarVector=ldVV;
jTextAreaTres=jTextArea;
jTextFieldCuatro=jTextFieldPant;
jTextFieldCinco=jTextFieldImpr;
}

public void run()
{
ejecutar(ldEjecutar.p);
}

public void ejecutar(Nodo t)
{
// jTableDos.setValueAt(«Programa «+numProg, 0, 1);
try
{
while(t!=null)
{
if(reanudarP==0)
{
//Cárguese/copie en el acumulador el valor almacenado en la
//variable indicada por el operando.
if(t.getInfo().equals(«cargue»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
Nodo temp=ldVariable.p;

while(temp!=null)
{
if(temp.getInfo().equals(var))
{
frame.setAcum(Float.valueOf(temp.getValorVar()).toString());
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
mostrarMem();
t=t.getSig().getSig();
temp=null;
}
else
temp=temp.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
//Guarde/copie el valor que hay en el acumulador
//a la variable indicada por el operando.
else if(t.getInfo().equals(«almacene»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
Nodo t2=ldVarVector.p;

while(t2!=null)
{
if(t2.getInfo().equals(var))
{
int line=t2.getNumLine();
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
if(t3.getTipoVar().equals(«R»))
{
frame.setInfoVec(var+» «+frame.getAcum(), line);
t2.setValVar(frame.getAcum());
t3.setValVar(frame.getAcum());
}
else
{
//float a un int
int val=tokenizarNum(Float.parseFloat(frame.getAcum()));
//javax.swing.JOptionPane.showMessageDialog(null,»pilas»+val);
frame.setInfoVec(var+» «+Integer.toString(val), line);// dfdsf
t2.setValVar(Integer.toString(val));
t3.setValVar(Integer.toString(val));
}
t3=null;
}
else
t3=t3.getSig();
}

mostrarMem();
t=t.getSig().getSig();
t2=null;
}
else
t2=t2.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
//Incremente el valor del acumulador en el valor
//indicado por la variable señalada por el operando.
else if(t.getInfo().equals(«sume»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
float val=Float.parseFloat(t3.getValorVar());
float suma=Float.parseFloat(frame.getAcum())+val;
frame.setAcum(Float.toString(suma));
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
mostrarMem();
t=t.getSig().getSig();
t3=null;
}
else
t3=t3.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
//Decremente el acumulador en el valor indicado por
//la variable que señala el operando.
else if(t.getInfo().equals(«reste»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
float val=Float.parseFloat(t3.getValorVar());
float resta=Float.parseFloat(frame.getAcum())-val;
frame.setAcum(Float.toString(resta));
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
mostrarMem();
t=t.getSig().getSig();
t3=null;
}
else
t3=t3.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
else if(t.getInfo().equals(«multiplique»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
float val=Float.parseFloat(t3.getValorVar());
float mult=Float.parseFloat(frame.getAcum())*val;
frame.setAcum(Float.toString(mult));
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
mostrarMem();
t=t.getSig().getSig();
t3=null;
}
else
t3=t3.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
else if(t.getInfo().equals(«divida»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
String valTemp=» «;
float val=0;
int valDesc=0;
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
val=Float.parseFloat(t3.getValorVar());
valTemp=Float.valueOf(val).toString();

while(val==0)
{
//javax.swing.JOptionPane.showMessageDialog(null,»DIVISION ENTRE CERO»);
valTemp=javax.swing.JOptionPane.showInputDialog(«Valor de la variable «+t.getSig().getInfo());
try
{
if(valTemp!=null)
{
val=Float.parseFloat(valTemp);
if(val!=0)
{
Nodo tempDiv=ldVarVector.p;

while(tempDiv!=null)
{
if(tempDiv.getInfo().equals(var))
{
int line=tempDiv.getNumLine();
Nodo tempDiv2=ldVariable.p;

while(tempDiv2!=null)
{
if(tempDiv2.getInfo().equals(var))
{
// ojo
// ojo
if(tempDiv2.getTipoVar().equals(«R»))
{
float valVar=Float.parseFloat(valTemp);
}
else if (tempDiv2.getTipoVar().equals(«I»))
{
int valVar2=Integer.parseInt(valTemp);
}

frame.setInfoVec(var+» «+valTemp, line);
tempDiv.setValVar(valTemp);
tempDiv2.setValVar(valTemp);
t3=null;
tempDiv2=null;
mostrarMem();
}
else
tempDiv2=tempDiv2.getSig();
}
tempDiv=null;
}
else
tempDiv=tempDiv.getSig();
}
}
}
else
{
javax.swing.JOptionPane.showMessageDialog(null,»Se requiere un valor diferente de cero para continuar con la ejecución»);
}
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»Tipos incompatibles de datos»);
val=0;
/*valTemp=javax.swing.JOptionPane.showInputDialog(«Valor de la Variable «+t.getSig().getInfo());
*
* if(valTemp!=null)
* {
* val=Float.parseFloat(valTemp);
* }
* else
* {
* javax.swing.JOptionPane.showMessageDialog(null,»Se requiere un valor diferente de cero para continuar con la ejecucion»);
* }
*/
}
}

mostrarMem();
float div=Float.parseFloat(frame.getAcum())/val;
frame.setAcum(Float.toString(div));
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
mostrarMem();
t=t.getSig().getSig();
t3=null;
}
else
t3=t3.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
//Lee por teclado el valor a ser asignado a la variable
//indicado por el operando
else if(t.getInfo().equals(«lea»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);

try
{
String val=javax.swing.JOptionPane.showInputDialog(«Valor de la variable «+t.getSig().getInfo());
if(val!=null)
{
String var=t.getSig().getInfo();
Nodo t2=ldVarVector.p;

while(t2!=null)
{
if(t2.getInfo().equals(var))
{
int line=t2.getNumLine();
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
if(t3.getTipoVar().equals(«R»))
{
float valVar=Float.parseFloat(val);
}
else if (t3.getTipoVar().equals(«I»))
{
int valVar2=Integer.parseInt(val);
}

frame.setInfoVec(var+» «+val, line);
t2.setValVar(val);
t3.setValVar(val);
t3=null;
}
else
t3=t3.getSig();
}

mostrarMem();
t=t.getSig().getSig();
t2=null;
}
else
t2=t2.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
else
{
javax.swing.JOptionPane.showMessageDialog(null,»Se requiere el valor de la variable\n»+t.getSig().getInfo()+» para continuar con la ejecución»);
}
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»Tipos incompatibles de datos»);
}
}
//Presente por pantalla el valor que hay en la variable por el operando,
//si el operando es acumulador muestre el valor del acumulador.
else if(t.getInfo().equals(«muestre»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String dato=t.getSig().getInfo();
Nodo t5=ldVariable.p;

if(dato.equals(«acumulador»))
{
jTextFieldCuatro.setText(frame.getAcum());
t5=null;
t=t.getSig().getSig();
}

while(t5!=null)
{
if(t5.getInfo().equals(dato))
{
jTextFieldCuatro.setText(t5.getValorVar());
t5=null;
t=t.getSig().getSig();
}
else
t5=t5.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
else if(t.getInfo().equals(«imprima»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String dato=t.getSig().getInfo();
Nodo t5=ldVariable.p;

if(dato.equals(«acumulador»))
{
jTextFieldCinco.setText(frame.getAcum());
t5=null;
t=t.getSig().getSig();
}

while(t5!=null)
{
if(t5.getInfo().equals(dato))
{
jTextFieldCinco.setText(t5.getValorVar());
t5=null;
t=t.getSig().getSig();
}
else
t5=t5.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
else if(t.getInfo().equals(«etiqueta»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
t=t.getSig().getSig().getSig();

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
else if(t.getInfo().equals(«nueva»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
numVariable++;
t=t.getSig().getSig().getSig();

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
//Salte a la instrucción que corresponde a la
//etiqueta indicada por el operando y siga la ejecución a partir de allí.
else if(t.getInfo().equals(«vaya»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String etiq=t.getSig().getInfo();
Nodo tempVaya=ldEjecutar.p;

while(tempVaya!=null)
{
if(tempVaya.getNombEtiq().equals(etiq))
{
t=tempVaya;
tempVaya=null;
}
else
tempVaya=tempVaya.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
else if(t.getInfo().equals(«vayasi»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String etiq1=t.getSig().getInfo();
String etiq2=t.getSig().getSig().getInfo();
float valAcum=Float.parseFloat(frame.getAcum());

if(valAcum>0)
{
Nodo tempVaya=ldEjecutar.p;

while(tempVaya!=null)
{
if(tempVaya.getNombEtiq().equals(etiq1))
{
t=tempVaya;
tempVaya=null;
}
else
tempVaya=tempVaya.getSig();
}
}
else if(valAcum<0)
{
Nodo tempVaya=ldEjecutar.p;

while(tempVaya!=null)
{
if(tempVaya.getNombEtiq().equals(etiq2))
{
t=tempVaya;
tempVaya=null;
}
else
tempVaya=tempVaya.getSig();
}
}
else
{
t=t.getSig().getSig().getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{

}
}
// Eleve el acumulador a la potencia señalada por el operando(los
//exponentes deben ser valores enteros, positivos o negativos)
else if(t.getInfo().equals(«potencia»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
float valAcum=Float.parseFloat(frame.getAcum());
String exp=t.getSig().getInfo();
float valExp=0;
float result=1;
Nodo tempPot=ldVariable.p;

while(tempPot!=null)
{
if(tempPot.getInfo().equals(exp))
{
valExp=Float.parseFloat(tempPot.getValorVar());
tempPot=null;
}
else
tempPot=tempPot.getSig();
}

if(valExp==0)
{
frame.setAcum(Integer.valueOf(1).toString());
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
t=t.getSig().getSig();
}
else if(valExp>0)
{
int i=0;

while(i<valExp)
{
result=result*valAcum;
i++;
}

frame.setAcum(Float.valueOf(result).toString());
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
t=t.getSig().getSig();
}
else
{
valExp=valExp*(-1);
int i=0;

while(i<valExp)
{
result=result*valAcum;
i++;
}

result=1/result;
frame.setAcum(Float.valueOf(result).toString());
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
t=t.getSig().getSig();
}
mostrarMem();

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
//Obtenga el modulo al dividir el valor del acumulador por el
//valor indicado por la variable señalada por el operando.
else if(t.getInfo().equals(«modulo»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
String var=t.getSig().getInfo();
int val=0;
int result=0;
int divid=0;
int varTemp=1;
String valTemp=»»;

try
{
int desc=numEntero(Float.parseFloat(frame.getAcum()));
if(desc==1)
{
divid=obtEntero(Float.parseFloat(frame.getAcum()));
}
else
divid=Integer.parseInt(frame.getAcum());
}
catch(Exception e)
{
varTemp=0;
}

while(varTemp==0)
{
//javax.swing.JOptionPane.showMessageDialog(null,»DIVISION ENTRE CERO»);
valTemp=javax.swing.JOptionPane.showInputDialog(«Valor entero para el acumulador»);

try
{
if(valTemp!=null)
{
val=Integer.parseInt(valTemp);
frame.setAcum(Integer.toString(val));
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
varTemp=-1;
divid=val;
mostrarMem();
}
else
{
javax.swing.JOptionPane.showMessageDialog(null,»Se requiere un valor diferente de cero para continuar con la ejecución»);
}
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»Tipos incompatibles de datos»);
varTemp=0;
}
mostrarMem();
}
valTemp=»»;
//val=0;
Nodo t3=ldVariable.p;

while(t3!=null)
{
if(t3.getInfo().equals(var))
{
val=Integer.parseInt(t3.getValorVar());
valTemp=Integer.valueOf(val).toString();

while(val==0)
{
//javax.swing.JOptionPane.showMessageDialog(null,»DIVISION ENTRE CERO»);
valTemp=javax.swing.JOptionPane.showInputDialog(«Valor de la variable «+t.getSig().getInfo());

try
{
if(valTemp!=null)
{
val=Integer.parseInt(valTemp);
if(val!=0)
{
Nodo tempDiv=ldVarVector.p;

while(tempDiv!=null)
{
if(tempDiv.getInfo().equals(var))
{
int line=tempDiv.getNumLine();
Nodo tempDiv2=ldVariable.p;

while(tempDiv2!=null)
{
if(tempDiv2.getInfo().equals(var))
{
if (tempDiv2.getTipoVar().equals(«I»))
{
int valVar2=Integer.parseInt(valTemp);
}

frame.setInfoVec(var+» «+valTemp, line);
tempDiv.setValVar(valTemp);
tempDiv2.setValVar(valTemp);
t3=null;
tempDiv2=null;
mostrarMem();
}
else
tempDiv2=tempDiv2.getSig();
}
tempDiv=null;
}
else
tempDiv=tempDiv.getSig();
}
}
}
else
{
javax.swing.JOptionPane.showMessageDialog(null,»Se requiere un valor diferente de cero para continuar con la ejecución»);
}
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»Tipos incompatibles de datos»);
val=0;
}
}

result=divid%val;
frame.setAcum(Integer.toString(result));
jTableDos.setValueAt(Integer.toString(result),1,1);
frame.setInfoVec(«acumulador «+Integer.toString(result), 0);
t=t.getSig().getSig();
mostrarMem();
t3=null;
}
else
t3=t3.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
else if(t.getInfo().equals(«retorne»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
int numVarTemp=numVariable;

while(numVarTemp!=0)
{
ldVariable.eliminar(ldVariable.p);
numVarTemp–;
}

numVarTemp=numVariable;

while(numVarTemp!=0)
{
ldVarVector.eliminar(ldVarVector.p);
numVarTemp–;
}

numVariable=0;
if(t.getSig()==null)
{
ldEjecutar.p=null;
ldEjecutar.q=null;
}
else
{
ldEjecutar.borrarAnt(t.getSig());
}

frame.numProgEjec++;
frame.modifNum();
mostrarMem();
frame.setAcum(Float.valueOf(0).toString());
jTableDos.setValueAt(frame.getAcum(),1,1);
frame.setInfoVec(«acumulador «+frame.getAcum(), 0);
t=t.getSig();

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
else if(t.getInfo().equals(«//»))
{
jTableDos.setValueAt(t.getInfo(),2,1);
jTableDos.setValueAt(frame.getAcum(),1,1);
jTableDos.setValueAt(«Programa «+frame.numProgEjec, 0, 1);
Nodo temp=t;
int i=temp.getNumLine();

while (temp!=null)
{
if (temp.getNumLine()==i+1)
{
t=temp;
temp=null;
}
else
temp=temp.getSig();
}

try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
}
}
else
t=t.getSig();
}
}
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»Hay un error en la ejecución»);
}
}

public void mostrarMem()
{
jTextAreaTres.setText(«»);
int val=0;

for(int i=0; i<frame.getTamMem(); i++)
{
if (frame.getInfoVec(i)==null)
{
if (i<10)
jTextAreaTres.append(«D0x0000″+val+» «+»\n»);
else if(i<100)
jTextAreaTres.append(«D0x000″+val+» «+»\n»);
else if(i<1000)
jTextAreaTres.append(«D0x00″+val+» «+»\n»);
else if(i<10000)
jTextAreaTres.append(«D0x0″+val+» «+»\n»);
else
jTextAreaTres.append(«D0x»+val+» «+»\n»);
}
else if (i<10)
jTextAreaTres.append(«D0x0000″+val+» «+frame.getInfoVec(i)+»\n»);
else if(i<100)
jTextAreaTres.append(«D0x000″+val+» «+frame.getInfoVec(i)+»\n»);
else if(i<1000)
jTextAreaTres.append(«D0x00″+val+» «+frame.getInfoVec(i)+»\n»);
else if(i<10000)
jTextAreaTres.append(«D0x0″+val+» «+frame.getInfoVec(i)+»\n»);
else
jTextAreaTres.append(«D0x»+val+» «+frame.getInfoVec(i)+»\n»);

val=val+1;
}
}

public int tokenizarNum(float num)
{
String val=Float.valueOf(num).toString();
String valDer=»»;
String valIzq=»»;
int aprox=0;

StringTokenizer sent1=new StringTokenizer(val,».»);
int numTok = sent1.countTokens();
valDer=sent1.nextToken();
valIzq=sent1.nextToken();

String b=valIzq.substring(0, 1);
int a=Integer.parseInt(b);

if(a<5)
{
aprox=Integer.parseInt(valDer);
}
else
{
if(num<0)
aprox=Integer.parseInt(valDer)-1;
else
aprox=Integer.parseInt(valDer)+1;
}
return aprox;
}

public int numEntero(float num)
{
String val=Float.valueOf(num).toString();
String valDer=»»;
String valIzq=»»;
int aprox=0;

StringTokenizer sent1=new StringTokenizer(val,».»);
int numTok = sent1.countTokens();
valDer=sent1.nextToken();
valIzq=sent1.nextToken();

if(Integer.parseInt(valIzq)==0)
return 1;
else
return 0;
}

public int obtEntero(float num)
{
String val=Float.valueOf(num).toString();
String valDer=»»;
String valIzq=»»;
int aprox=0;

StringTokenizer sent1=new StringTokenizer(val,».»);
int numTok = sent1.countTokens();
valDer=sent1.nextToken();
valIzq=sent1.nextToken();

return (Integer.parseInt(valDer));
}
}

 

Correr:

/*
* 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 chmaquina;

/**
*
* @author Luis Carlos
*/
public class Correr
{
/** Creates a new instance of Ejecutar */
public Correr()
{
}
}

 

Compilar:

/*
* 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 chmaquina;
import java.lang.*;
import javax.crypto.NullCipher;

/**
*
* @author Luis Carlos
*/
public class Compilar extends Thread
{
NewJFrame frame=new NewJFrame();
javax.swing.JTextArea jTextAreaTres;
javax.swing.JTextArea jTextAreaDos;
javax.swing.JTextArea jTextAreaUno;
javax.swing.JTable jTableUno;
ListaDoble ldd;
ListaDoble ldVariable;
ListaDoble ldEjecutar;
ListaDoble ldTemporal;
ListaDoble ldVariable2;

//String vecMem[];
static int num=0;
static int numProg=1;
static Nodo tempInstr;
static int indTabla=0;
static int numProgComp=1;
static int RLP=0;
static int numVarComp=0;

public Compilar(ListaDoble ld, javax.swing.JTextArea jTextArea, ListaDoble ldV, ListaDoble ldE, javax.swing.JTextArea jTA1, ListaDoble ldT, javax.swing.JTextArea jTextAreaM, javax.swing.JTable jTable)
{
ldd=ld;
jTextAreaDos=jTextArea;
ldVariable=ldV;
ldEjecutar=ldE;
jTextAreaUno=jTA1;
ldTemporal=ldT;
jTextAreaTres=jTextAreaM;
jTableUno=jTable;
}

public void run ()
{
String info=»»;
Nodo t=ldd.p;
ldVariable2=new ListaDoble();

try
{
if (t.getInfo().equals(«retorne»))
info=»retorne»;
else if(t.getSig()==null)
{
if(t.getInfo().equals(«retorne»))
info=t.getInfo();
else
info=t.getInfo();
}
else if (t.getSig().getInfo().equals(«retorne»))
info=»retorne»;
else
{
while (t!=null)
{
if (t.getSig()==null)
{
info=t.getInfo();
t=null;
}
else if (t.getSig().getSig()==null)
{
info=t.getInfo();
t=null;
}
else
t=t.getSig();
}
}

if (info.equals(«retorne»))
compilar (ldd.p);
else if (ldd.q.getInfo().equals(«retorne»))
compilar (ldd.p);
else
jTextAreaDos.setText(«El último CH-programa no tiene la sentencia ‘retorne’\n\n»);
}
catch(Exception e)
{
jTextAreaDos.setText(«El CH-programa no es válido\n\n»);
}
}

public void compilar (Nodo t)
{
Nodo tempRet=t;
while(tempRet!=null)
{
if(tempRet.getNumLine()==ldd.q.getNumLine())
{
if(tempRet.getInfo().equals(«//»))
{
jTextAreaDos.setText(«El último CH-programa no tiene la sentencia ‘retorne’\n\n»);
tempRet=null;
t=null;
}
else
tempRet=null;
}
else
tempRet=tempRet.getSig();
}

tempInstr=ldd.p;
//num=0;
try
{
while (t!=null)
{
if ((t.getInfo().equals(«cargue»))||(t.getInfo().equals(«almacene»))||
(t.getInfo().equals(«vaya»))||(t.getInfo().equals(«lea»))||
(t.getInfo().equals(«sume»))||(t.getInfo().equals(«reste»))||
(t.getInfo().equals(«multiplique»))||(t.getInfo().equals(«divida»))||
(t.getInfo().equals(«potencia»))||(t.getInfo().equals(«modulo»))||
(t.getInfo().equals(«muestre»))||(t.getInfo().equals(«imprima»)))
{
try
{
if ((t.getNumLine()==t.getSig().getSig().getNumLine()))
{
jTextAreaDos.setText(«Hay operandos extra en la\nlínea «+t.getNumLine()+»\n\n»);
t=null;
}
else
{
if(t.getNumLine()==t.getSig().getNumLine())
{
//Se comprueba que el valor del operando no sea una palabra reservada
if(t.getInfo().equals(«vaya»))
{
Nodo temp=tempInstr;
while (temp!=null)
{
if (temp.getInfo().equals(«nueva»))
temp=temp.getSig().getSig();
else if (temp.getInfo().equals(«//»))
{
Nodo tempEtiq=temp;
while(tempEtiq!=null)
{
if(tempEtiq.getNumLine()==tempEtiq.getSig().getNumLine())
{
tempEtiq=tempEtiq.getSig();
}
else
{
temp=tempEtiq.getSig();
tempEtiq=null;
}
}
}
else if (temp.getInfo().equals(«retorne»))
{
jTextAreaDos.setText(«La etiqueta no ha sido encontrada\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
temp=null;
}
else
{
if(temp.getInfo().equals(«etiqueta»))
{
if (temp.getSig().getInfo().equals(t.getSig().getInfo()))
{
jTextAreaDos.setText(«No hay errores»);
t=t.getSig().getSig();
temp=null;
}
else
temp=temp.getSig();
}
else
{
temp=temp.getSig();
}
}
}
}
else
{
int verif=0;
Nodo temp2=ldVariable2.p;

if((t.getInfo().equals(«muestre»))||(t.getInfo().equals(«imprima»)))
{
if(t.getSig().getInfo().equals(«acumulador»))
{
temp2=null;
t=t.getSig().getSig();
verif=1;
}
}

while(temp2!=null)
{
//Se comprueba si la variable utilizada ya fue declarada
if ((t.getSig().getInfo().equals(temp2.getInfo()))&&(temp2.getNumLine()<t.getNumLine())&&(temp2.getNumLine()>=tempInstr.getNumLine()))
{
jTextAreaDos.setText(«No hay errores»);
verif=1;
//Se comprueba que las variables de los siguientes
//operadores sean Reales o enteras
if ((t.getInfo().equals(«sume»))||(t.getInfo().equals(«reste»))||
(t.getInfo().equals(«multiplique»))||(t.getInfo().equals(«divida»)))
{
if ((temp2.getTipoVar().equals(«I»))||(temp2.getTipoVar().equals(«R»)))
{
temp2=null;
t=t.getSig().getSig();
}
else
{
jTextAreaDos.setText(«Sólo se permiten enteros y reales para la operación «+t.getInfo()+»\n en la línea «+t.getNumLine()+»\n\n»);
temp2=null;
t=null;
}
}
else if(t.getInfo().equals(«potencia»)||(t.getInfo().equals(«modulo»)))
{
if (temp2.getTipoVar().equals(«I»))
{
temp2=null;
t=t.getSig().getSig();
}
else
{
jTextAreaDos.setText(«Sólo se permiten enteros para la operación «+t.getInfo()+»\nen la línea «+t.getNumLine()+»\n\n»);
temp2=null;
t=null;
}
}
else
{
t=t.getSig().getSig();
temp2=null;
}
}
else
temp2=temp2.getSig();
}

if (verif==0)
{
jTextAreaDos.setText(«La variable no fue encontrada\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
}
else
{
jTextAreaDos.setText(«El operador no tiene operando\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
}
catch(Exception e)
{
jTextAreaDos.setText(«Los operandos están incompletos\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
//Identifica comentarios y se avanza hasta la proxima linea
//de ejecucion (proximo operador)
else if (t.getInfo().equals(«//»))
{
Nodo temp=t;
int i=temp.getNumLine();

while (temp!=null)
{
if (temp.getNumLine()==i+1)
{
t=temp;
temp=null;;
}
else
temp=temp.getSig();
}

}
//Crea variables, su tipo y su valor de inicializacion
//Si se asignan valores que no corresponden a los tipos
//indicados se genera una excepcion; por defecto a lo tipos
//reales y enteros se les asigna 0 y los caracter espacio
else if (t.getInfo().equals(«nueva»))
{
if(t.getNumLine()!=t.getSig().getNumLine())
{
jTextAreaDos.setText(«La instrucción no está seguida de una variable\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
else if(t.getNumLine()!=t.getSig().getSig().getNumLine())
{
jTextAreaDos.setText(«La instrucción no está seguida de una variable\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
else if(t.getNumLine()!=(t.getSig().getSig().getSig().getNumLine()))
{
int temp=1;
Nodo tempVar=ldVariable2.p;

while(tempVar!=null)
{
if(tempVar.getInfo().equals(t.getSig().getInfo()))
{
tempVar=null;
jTextAreaDos.setText(«La variable está repetida\nen la línea «+t.getNumLine()+»\n\n»);
temp=0;
}
else
tempVar=tempVar.getSig();
}
if(temp==1)
{
if((t.getSig().getSig().getInfo().equals(«I»))||(t.getSig().getSig().getInfo().equals(«R»)))
{
ldVariable2.ingrUlt(new Nodo(t.getSig().getInfo(),»»,t.getNumLine(),t.getSig().getSig().getInfo(),»0″));
t=t.getSig().getSig().getSig();
}
else if(t.getSig().getSig().getInfo().equals(«C»))
{
ldVariable2.ingrUlt(new Nodo(t.getSig().getInfo(),»»,t.getNumLine(),t.getSig().getSig().getInfo(),» «));
t=t.getSig().getSig().getSig();
}
else
{
jTextAreaDos.setText(«El tipo de la variable no es reconocido\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
else
t=null;
}
else if (t.getNumLine()==t.getSig().getSig().getSig().getSig().getNumLine())
{
jTextAreaDos.setText(«Hay operandos extra\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
else
{
try
{
int temp=1;
Nodo tempVar=ldVariable2.p;

while(tempVar!=null)
{
if(tempVar.getInfo().equals(t.getSig().getInfo()))
{
tempVar=null;
jTextAreaDos.setText(«La variable está repetida\n en la línea «+t.getNumLine()+»\n\n»);
temp=0;
}
else
tempVar=tempVar.getSig();
}
if(temp==1)
{
if ((t.getSig().getSig().getInfo().equals(«C»)))
{
ldVariable2.ingrUlt(new Nodo(t.getSig().getInfo(),»»,t.getNumLine(),t.getSig().getSig().getInfo(), t.getSig().getSig().getSig().getInfo()));
t=t.getSig().getSig().getSig().getSig();
}
else if(t.getSig().getSig().getInfo().equals(«I»))
{
try
{
int val=Integer.parseInt(t.getSig().getSig().getSig().getInfo());
ldVariable2.ingrUlt(new Nodo(t.getSig().getInfo(),»»,t.getNumLine(),t.getSig().getSig().getInfo(), t.getSig().getSig().getSig().getInfo()));
t=t.getSig().getSig().getSig().getSig();
}
catch (Exception e)
{
jTextAreaDos.setText(«Hay tipos incompatibles de datos\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
else if(t.getSig().getSig().getInfo().equals(«R»))
{
try
{
float val2=Float.valueOf(t.getSig().getSig().getSig().getInfo());
ldVariable2.ingrUlt(new Nodo(t.getSig().getInfo(),»»,t.getNumLine(),t.getSig().getSig().getInfo(), t.getSig().getSig().getSig().getInfo()));
t=t.getSig().getSig().getSig().getSig();
}
catch (Exception e)
{
jTextAreaDos.setText(«Hay tipos incompatibles de datos\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
else
{
jTextAreaDos.setText(«El tipo de dato no es reconocido\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
else
t=null;
}
catch(Exception e)
{
jTextAreaDos.setText(«Hay tipos incompatibles de datos\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
}
else if (t.getInfo().equals(«etiqueta»))
{
try
{
if (t.getNumLine()==t.getSig().getSig().getSig().getNumLine())
{
jTextAreaDos.setText(«Operandos extra\nLINE «+t.getNumLine()+»\n\n»);
t=null;
}
else
{
if((t.getNumLine()==t.getSig().getNumLine())&&(t.getNumLine()==t.getSig().getSig().getNumLine()))
{
try
{
int linea=Integer.parseInt(t.getSig().getSig().getInfo());
if (linea<0)
{
jTextAreaDos.setText(«Hay un número de línea negativa que no es permitida\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
else
{
int lineMax=-1;
Nodo temp=tempInstr;

while (temp!=null)
{
if (temp.getInfo().equals(«retorne»))
{
lineMax=temp.getNumLine();
if (((linea+tempInstr.getNumLine())<=lineMax)&&(tempInstr.getNumLine()<=(linea+tempInstr.getNumLine())))
{
Nodo temp2=tempInstr;

while (temp2!=null)
{
if ((temp2.getNumLine()-tempInstr.getNumLine())==Integer.parseInt(t.getSig().getSig().getInfo()))
{
temp2.setNombEtiq(t.getSig().getInfo());
t=t.getSig().getSig().getSig();
temp2=null;
temp=null;
}
else
temp2=temp2.getSig();
}
}
else
{
jTextAreaDos.setText(«La línea está por fuera de los límites del programa\nen la línea «+t.getNumLine()+»\n\n»);
temp=null;
t=null;
}
}
else
temp=temp.getSig();
}
if (lineMax==-1)
{
jTextAreaDos.setText(«El programa no tiene la sentencia de finalizar\n\n»);
t=null;
}
}
}
catch(Exception e)
{
jTextAreaDos.setText(«La línea de la etiqueta no está especificada\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
else
{
jTextAreaDos.setText(«El operador no tiene los operandos completos\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
}
catch(NullPointerException e)
{
jTextAreaDos.setText(«Los operandos están incompletos\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
else if(t.getInfo().equals(«vayasi»))
{
try
{
if (t.getNumLine()==t.getSig().getSig().getSig().getNumLine())
{
jTextAreaDos.setText(«Hay operandos extra\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
else if ((t.getNumLine()==t.getSig().getNumLine())&&(t.getNumLine()==t.getSig().getSig().getNumLine()))
{
Nodo temp=tempInstr;

while (temp!=null)
{
if(temp.getInfo().equals(«nueva»))
temp=temp.getSig().getSig();
else if (temp.getInfo().equals(«//»))
{
Nodo tempEtiq=temp;

while(tempEtiq!=null)
{
if(tempEtiq.getNumLine()==tempEtiq.getSig().getNumLine())
{
tempEtiq=tempEtiq.getSig();
}
else
{
temp=tempEtiq.getSig();
tempEtiq=null;
}
}
}
else if (temp.getInfo().equals(«retorne»))
{
jTextAreaDos.setText(«La primera etiqueta no fue encontrada\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
temp=null;
}
else
{
if(temp.getInfo().equals(«etiqueta»))
{
if (temp.getSig().getInfo().equals(t.getSig().getInfo()))
{
//jTextArea2.setText(«No hay errores»);
Nodo temp2=tempInstr;

while (temp2!=null)
{
if (temp2.getInfo().equals(«nueva»))
temp2=temp2.getSig().getSig();
else if (temp2.getInfo().equals(«//»))
{
Nodo tempEtiq=temp2;

while(tempEtiq!=null)
{
if(tempEtiq.getNumLine()==tempEtiq.getSig().getNumLine())
{
tempEtiq=tempEtiq.getSig();
}
else
{
temp2=tempEtiq.getSig();
tempEtiq=null;
}
}
}
else if (temp2.getInfo().equals(«retorne»))
{
jTextAreaDos.setText(«La segunda etiqueta no fue encontrada\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
temp2=null;
temp=null;
}
else
{
if(temp2.getInfo().equals(«etiqueta»))
{
if (temp2.getSig().getInfo().equals(t.getSig().getSig().getInfo()))
{
jTextAreaDos.setText(«No hay errores»);
t=t.getSig().getSig().getSig();
temp=null;
temp2=null;
}
else
temp2=temp2.getSig();
}
else
temp2=temp2.getSig();
}
}
}
else
temp=temp.getSig();
}
else
{
temp=temp.getSig();
}
}
}
}
else
{
jTextAreaDos.setText(«El operador no tiene los operandos completos\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
catch (Exception e)
{
jTextAreaDos.setText(«Los operandos están incompletos\nlínea «+t.getNumLine()+»\n\n»);
t=null;
}
}
else if(t.getInfo().equals(«retorne»))
{
if(t.getSig()==null)
{
if (frame.capacMem(tempInstr,t, numProg)==1)
{
nueva();
jTextAreaDos.setText(«No hay errores»);
numProg++;
cargarMem(tempInstr, t.getSig());
frame.setNombProgTabla();
jTextAreaUno.setText(«»);

try
{
Nodo tempV=ldVariable.p;
int x=0;

while(x<num)
{
tempV=tempV.getSig();
x++;
}

while (tempV!=null)
{
/*if((tempV.getNumLine()<t.getNumLine())&(tempV.getNumLine()>=IntTemporal.getNumLine()))
{*/
frame.setVariabPosc(tempV.getInfo(),tempV.getTipoVar(),tempV.getValorVar());
frame.ingValorVec(tempV.getInfo()+» «+tempV.getValorVar());
tempV=tempV.getSig();
num++;
/* }
else
tempV=tempV.getSig();*/
}
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»->ERROR DE VECTOR<-«);
}

//jTextArea1.setText(«»);
mostrarMem();
javax.swing.JOptionPane.showMessageDialog(null,»Los programas han sido cargados en la memoria»);
llenarTabla();
t=null;
}
else
{
ldTemporal=new ListaDoble();
Nodo tempLD=tempInstr;

while(tempLD!=t.getSig())
{
ldTemporal.ingrUlt(tempLD);
tempLD=tempLD.getSig();
}

jTextAreaUno.setText(«»);
mostrarInstr();
mostrarMem();
t=t.getSig();
}
}
else if(t.getSig().getSig()==null)
{
if(t.getNumLine()==t.getSig().getNumLine())
{
try
{
int num2=Integer.parseInt(t.getSig().getInfo());
if ((num2<0)||(num2>255))
{
jTextAreaDos.setText(«El operando no es permitido\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
else
{
if (frame.capacMem(tempInstr, t, numProg)==1)
{
nueva();
jTextAreaDos.setText(«No hay errores»);
numProg++;
/* Nodo tempEjec=IntTemporal; //ojo
while(tempEjec!=t.getSig().getSig())
{
ldEjecutar.ingrUlt(tempEjec);
tempEjec=tempEjec.getSig();
}*/
cargarMem(tempInstr, t.getSig().getSig());
jTextAreaUno.setText(«»);
Nodo tempV=ldVariable.p;
int x=0;

while(x<num)
{
tempV=tempV.getSig();
x++;
}

while (tempV!=null)
{
/* if((tempV.getNumLine()<t.getNumLine())&(tempV.getNumLine()>=IntTemporal.getNumLine()))
{*/
frame.setVariabPosc(tempV.getInfo(),tempV.getTipoVar(),tempV.getValorVar());
frame.ingValorVec(tempV.getInfo()+» «+tempV.getValorVar());
tempV=tempV.getSig();
num++;
/* }
else
* tempV=tempV.getSig();*/
}

// jTextAreaUno.setText(«»);
javax.swing.JOptionPane.showMessageDialog(null,»Los programas han sido cargados en la memoria»);
mostrarMem();
llenarTabla();
t=null;
}
else
{
// ldd.borrar(IntTemporal);
// fgfdg
ldTemporal=new ListaDoble();
Nodo tempLD=tempInstr;

while(tempLD!=t.getSig().getSig())
{
ldTemporal.ingrUlt(tempLD);
tempLD=tempLD.getSig();
}

jTextAreaUno.setText(«»);
/*Nodo tempMostr=ldTemporal.p;
while(tempMostr!=null)
{
* jTextAreaUno.append(tempMostr.getInfo()+»\n»);
tempMostr=tempMostr.getSig();
}*/

mostrarInstr();
mostrarMem();
t=t.getSig().getSig();
}
}
}
catch(Exception e)
{
jTextAreaDos.setText(«Hay incompatibilidad de tipos\nen la línea «+t.getNumLine());
t=null;
}
}
else
{
jTextAreaDos.setText(«No hay errores»);
t=t.getSig();
}
}
else
{
if (t.getNumLine()==t.getSig().getSig().getNumLine())
{
jTextAreaDos.setText(«Hay operandos extra\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
else if(t.getNumLine()==t.getSig().getNumLine())
{
try
{
int num2=Integer.parseInt(t.getSig().getInfo());
if ((num2<0)||(num2>255))
{
jTextAreaDos.setText(«El operando no es permitido\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
else
{
if(frame.capacMem(tempInstr,t, numProg)==1)
{
nueva();
jTextAreaDos.setText(«No hay errores»);
numProg++;
/* Nodo tempEjec=IntTemporal; //ojo
while(tempEjec!=t.getSig().getSig())
{
ldEjecutar.ingrUlt(tempEjec);
tempEjec=tempEjec.getSig();
}
*/
cargarMem(tempInstr, t.getSig().getSig());
ldTemporal=new ListaDoble();
Nodo tempLD=t.getSig().getSig();

while(tempLD!=null)
{
ldTemporal.ingrUlt(tempLD);
tempLD=tempLD.getSig();
}

jTextAreaUno.setText(«»);
/* Nodo tempMostr=ldTemporal.p;
while(tempMostr!=null)
{
jTextAreaUno.append(tempMostr.getInfo()+»\n»);
tempMostr=tempMostr.getSig();
}*/
mostrarInstr();
Nodo tempV=ldVariable.p;
int x=0;

while(x<num)
{
tempV=tempV.getSig();
x++;
}

while (tempV!=null)
{
/* if((tempV.getNumLine()<t.getNumLine())&(tempV.getNumLine()>=IntTemporal.getNumLine()))
{*/
frame.setVariabPosc(tempV.getInfo(),tempV.getTipoVar(),tempV.getValorVar());
frame.ingValorVec(tempV.getInfo()+» «+tempV.getValorVar());
tempV=tempV.getSig();
num++;
/* }
else
tempV=tempV.getSig();*/
}

javax.swing.JOptionPane.showMessageDialog(null,»Los programas han sido cargados en la memoria»);
// jTextAreaUno.setText(«»);
mostrarMem();
//tempInstr=t.getSig().getSig();
//t=t.getSig().getSig();
llenarTabla();
t=null;
}
else
{
ldTemporal=new ListaDoble();
Nodo tempLD=tempInstr;

while(tempLD!=null)
{
ldTemporal.ingrUlt(tempLD);
tempLD=tempLD.getSig();
}

jTextAreaUno.setText(«»);
/* Nodo tempMostr=ldTemporal.p;
while(tempMostr!=null)
{
jTextAreaUno.append(tempMostr.getInfo()+»\n»);
tempMostr=tempMostr.getSig();
}*/
mostrarInstr();
tempInstr=t.getSig().getSig();
//t=t.getSig().getSig();
mostrarMem();
t=null;
}
}
}
catch(Exception e)
{
jTextAreaDos.setText(«Hay incompatibilidad de tipos\nen la línea»+t.getNumLine());
t=null;
}
}
else
{
if (frame.capacMem(tempInstr,t, numProg)==1)
{
nueva();
jTextAreaDos.setText(«No hay errores»);
numProg++;
/*Nodo tempEjec=IntTemporal; //ojo
while(tempEjec!=t.getSig())
{
ldEjecutar.ingrUlt(tempEjec);
tempEjec=tempEjec.getSig();
}*/
cargarMem(tempInstr, t.getSig());
ldTemporal=new ListaDoble();
Nodo tempLD=t.getSig();

while(tempLD!=null)
{
ldTemporal.ingrUlt(tempLD);
tempLD=tempLD.getSig();
}

jTextAreaUno.setText(«»);
/*Nodo tempMostr=ldTemporal.p;
while(tempMostr!=null)
{
jTextAreaUno.append(tempMostr.getInfo()+»\n»);
tempMostr=tempMostr.getSig();
}*/
mostrarInstr();
Nodo tempV=ldVariable.p;
int x=0;

while(x<num)
{
tempV=tempV.getSig();
x++;
}

while (tempV!=null)
{
/* if((tempV.getNumLine()<t.getNumLine())&(tempV.getNumLine()>=IntTemporal.getNumLine()))
{*/
frame.setVariabPosc(tempV.getInfo(),tempV.getTipoVar(),tempV.getValorVar());
frame.ingValorVec(tempV.getInfo()+» «+tempV.getValorVar());
tempV=tempV.getSig();
num++;
/* }
else
* tempV=tempV.getSig();*/
}
//jTextArea1.setText(«»);

tempInstr=t.getSig();
javax.swing.JOptionPane.showMessageDialog(null,»Los programas han sido cargados en la memoria»);
mostrarMem();
llenarTabla();
t=null;
}
else
{
ldTemporal=new ListaDoble();
Nodo tempLD=tempInstr;

while(tempLD!=null)
{
ldTemporal.ingrUlt(tempLD);
tempLD=tempLD.getSig();
}

jTextAreaUno.setText(«»);
/* Nodo tempMostr=IntTemporal;
while(tempMostr!=null)
{
jTextAreaUno.append(tempMostr.getInfo());
tempMostr=tempMostr.getSig();
}*/
mostrarInstr();
tempInstr=t.getSig();
mostrarMem();
t=null;
}
}
}
}
else
{
jTextAreaDos.setText(«La instrucción no fue encontrada\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
}
catch (Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null,»->ERROR<-«+e);
}
}

//Tiene como argumento un nodo, al cual se le verifica si tiene como informacion
//una palabra clave (operadores)
public int compVar(Nodo temp)
{
if(temp!=null)
{
if ((temp.getInfo().equals(«cargue»))||(temp.getInfo().equals(«almacene»))||(temp.getInfo().equals(«vaya»))||
(temp.getInfo().equals(«vayasi»))||(temp.getInfo().equals(«nueva»))||(temp.getInfo().equals(«etiqueta»))||
(temp.getInfo().equals(«lea»))||(temp.getInfo().equals(«sume»))||(temp.getInfo().equals(«reste»))||
(temp.getInfo().equals(«multiplique»))||(temp.getInfo().equals(«divida»))||(temp.getInfo().equals(«potencia»))||
(temp.getInfo().equals(«modulo»))||(temp.getInfo().equals(«muestre»))||(temp.getInfo().equals(«imprima»))||
(temp.getInfo().equals(«retorne»))||(temp.getInfo().equals(«//»))||(temp.getInfo().equals(«acumulador»)))
return -1;
else
return 1;
}
else
return -1;
}

public int proxRetorne(Nodo t)
{
int linea=-1;

while(t!=null)
{
if(t.getInfo().equals(«retorne»))
{
linea=t.getNumLine();
t=null;
}
else
t=t.getSig();
}
return linea;
}

public void cargarMem(Nodo inicio, Nodo fin)
{
Nodo tVec=inicio;

while(tVec!=fin)
{
if ((tVec.getSig()==null)&&(tVec.getInfo().equals(«retorne»)))
{
frame.ingValorVec(» «+tVec.getInfo());
tVec=null;
}
else if((tVec.getSig().getSig()==null)&&(tVec.getInfo().equals(«retorne»)))
{
frame.ingValorVec(» «+tVec.getInfo()+» «+tVec.getSig().getInfo());
tVec=null;
}
else
{
String dato=tVec.getInfo();
Nodo tVec2=tVec.getSig();
int linea=tVec.getNumLine();

while(linea==tVec2.getNumLine())
{
dato=» «+dato+» «+tVec2.getInfo();
tVec2=tVec2.getSig();
}

frame.ingValorVec(dato);
tVec=tVec2;
}
}

Nodo tempEjec=inicio; //ojo

while(tempEjec!=fin)
{
// javax.swing.JOptionPane.showMessageDialog(null,»vec: «+tempEjec.getInfo());
ldEjecutar.ingrUlt(new Nodo(tempEjec.getInfo(), tempEjec.getNombEtiq(), tempEjec.getNumLine(), tempEjec.getTipoVar(), tempEjec.getValorVar()));
tempEjec=tempEjec.getSig();
}
}

public void mostrarInstr()
{
Nodo tVec=ldTemporal.p;

while(tVec!=null)
{
if ((tVec.getSig()==null)&&(tVec.getInfo().equals(«retorne»)))
{
jTextAreaUno.append(» «+tVec.getInfo()+»\n»);
tVec=null;
}
else if((tVec.getSig().getSig()==null)&&(tVec.getInfo().equals(«retorne»)))
{
jTextAreaUno.append(» «+tVec.getInfo()+» «+tVec.getSig().getInfo()+»\n»);
tVec=null;
}
else
{
String dato=tVec.getInfo();
Nodo tVec2=tVec.getSig();
int linea=tVec.getNumLine();

while(linea==tVec2.getNumLine())
{
dato=» «+dato+» «+tVec2.getInfo();
tVec2=tVec2.getSig();
}

jTextAreaUno.append(dato+»\n»);
tVec=tVec2;
}
}
}

public void nueva()
{
Nodo t=ldd.p;
numVarComp=0;

while(t!=null)
{
if (t.getInfo().equals(«//»))
{
Nodo tempNueva=t;

while(tempNueva!=null)
{
if(tempNueva.getNumLine()==tempNueva.getSig().getNumLine())
{
tempNueva=tempNueva.getSig();
}
else
{
t=tempNueva.getSig();
tempNueva=null;
}
}
}
else if(t.getInfo().equals(«nueva»))
{
if(t.getNumLine()!=t.getSig().getNumLine())
{
jTextAreaDos.setText(«La instrucción no está seguida de una variable\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
else if(t.getNumLine()!=t.getSig().getSig().getNumLine())
{
jTextAreaDos.setText(«La instrucción no está seguida de una variable\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
else if(t.getNumLine()!=(t.getSig().getSig().getSig().getNumLine()))
{
if((t.getSig().getSig().getInfo().equals(«I»))||(t.getSig().getSig().getInfo().equals(«R»)))
{
ldVariable.ingrUlt(new Nodo(t.getSig().getInfo(),»»,t.getNumLine(),t.getSig().getSig().getInfo(),»0″));
numVarComp++;
t=t.getSig().getSig().getSig();
}
else if(t.getSig().getSig().getInfo().equals(«C»))
{
ldVariable.ingrUlt(new Nodo(t.getSig().getInfo(),»»,t.getNumLine(),t.getSig().getSig().getInfo(),» «));
numVarComp++;
t=t.getSig().getSig().getSig();
}
else
{
jTextAreaDos.setText(«El tipo de variable no es reconocido\nen la línea»+t.getNumLine()+»\n\n»);
t=null;
}
}
else if (t.getNumLine()==t.getSig().getSig().getSig().getSig().getNumLine())
{
jTextAreaDos.setText(«Hay operandos extra\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
else
{
try
{
if ((t.getSig().getSig().getInfo().equals(«C»)))
{
ldVariable.ingrUlt(new Nodo(t.getSig().getInfo(),»»,t.getNumLine(),t.getSig().getSig().getInfo(), t.getSig().getSig().getSig().getInfo()));
numVarComp++;
t=t.getSig().getSig().getSig().getSig();
}
else if(t.getSig().getSig().getInfo().equals(«I»))
{
try
{
int val=Integer.parseInt(t.getSig().getSig().getSig().getInfo());
ldVariable.ingrUlt(new Nodo(t.getSig().getInfo(),»»,t.getNumLine(),t.getSig().getSig().getInfo(), t.getSig().getSig().getSig().getInfo()));
numVarComp++;
t=t.getSig().getSig().getSig().getSig();
}
catch (Exception e)
{
jTextAreaDos.setText(«Hay tipos incompatibles de datos\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
else if(t.getSig().getSig().getInfo().equals(«R»))
{
try
{
float val2=Float.valueOf(t.getSig().getSig().getSig().getInfo());
ldVariable.ingrUlt(new Nodo(t.getSig().getInfo(),»»,t.getNumLine(),t.getSig().getSig().getInfo(), t.getSig().getSig().getSig().getInfo()));
numVarComp++;
t=t.getSig().getSig().getSig().getSig();
}
catch (Exception e)
{
jTextAreaDos.setText(«Hay tipos incompatibles de datos\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
else
{
jTextAreaDos.setText(«El tipo de dato no es reconocido\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
catch(Exception e)
{
jTextAreaDos.setText(«Hay tipos incompatibles de datos\nen la línea «+t.getNumLine()+»\n\n»);
t=null;
}
}
}
else if(t.getInfo().equals(«retorne»))
t=null;
else
t=t.getSig();
}
}

public void mostrarMem(){
jTextAreaTres.setText(«»);
int val=0;
frame.vecMem[0]=»acumulador»;
for(int i=0; i<frame.getTamMem(); i++)
{
if (frame.getInfoVec(i)==null)
{
if (i<10)
jTextAreaTres.append(«0x0000″+val+» «+»\n»);
else if(i<100)
jTextAreaTres.append(«D0x000″+val+» «+»\n»);
else if(i<1000)
jTextAreaTres.append(«D0x00″+val+» «+»\n»);
else if(i<10000)
jTextAreaTres.append(«D0x0″+val+» «+»\n»);
else
jTextAreaTres.append(«D0x»+val+» «+»\n»);
}
else if (i<10)
jTextAreaTres.append(«D0x0000″+val+» «+frame.getInfoVec(i)+»\n»);
else if(i<100)
jTextAreaTres.append(«D0x000″+val+» «+frame.getInfoVec(i)+»\n»);
else if(i<1000)
jTextAreaTres.append(«D0x00″+val+» «+frame.getInfoVec(i)+»\n»);
else if(i<10000)
jTextAreaTres.append(«D0x0″+val+» «+frame.getInfoVec(i)+»\n»);
else
jTextAreaTres.append(«D0x»+val+» «+frame.getInfoVec(i)+»\n»);

val=val+1;
}
}

public void llenarTabla()
{
if(numProgComp==1)
{
jTableUno.setValueAt(«Programa «+numProgComp, indTabla, 0);
jTableUno.setValueAt(«Línea «+(frame.nucleoSist+1), indTabla, 1);
jTableUno.setValueAt(«Línea «+(frame.indVector-1-numVarComp), indTabla, 2);
jTableUno.setValueAt(«Línea «+(frame.indVector-1), indTabla, 3);
RLP=frame.indVector-1;
indTabla++;
numProgComp++;
}
else
{
jTableUno.setValueAt(«Programa «+numProgComp, indTabla, 0);
jTableUno.setValueAt(«Línea «+(RLP+1), indTabla, 1);
jTableUno.setValueAt(«Línea «+(frame.indVector-1-numVarComp), indTabla, 2);
jTableUno.setValueAt(«Línea «+(frame.indVector-1), indTabla, 3);
RLP=frame.indVector-1;
indTabla++;
numProgComp++;
}
}
}