Ch Maquina

Publicado: septiembre 26, 2012 en Uncategorized

 

 

Código Principal

package chmaquina;

import javax.swing.JOptionPane;

/**
*
* @author Administrador
*/
public class Ejecutar extends Thread{
javax.swing.JTextField acum;
javax.swing.JTextField instruccion;
javax.swing.JTextArea pantalla;
javax.swing.JTextArea imprimir;
Sintaxis as;
int contvariables;
int contetiquetas;
String [][]variables;
String [][]etiquetas;
String cadena=new String();
String correr=new String();
private double acumulador=0;
int fin=0;
int lineapp=0;

/** Creates a new instance of Ejecutar */
/**
Esta función trae los valores necesarios desde el panel principal para ser utilizados en la clase Ejecutar
*/
public Ejecutar(String cade, String correr, javax.swing.JTextField acum, javax.swing.JTextField inst, javax.swing.JTextArea pant, javax.swing.JTextArea imp, Sintaxis as) {
this.cadena=cade;
this.correr=correr;
this.acum=acum;
this.instruccion=inst;
this.pantalla=pant;
this.imprimir=imp;
this.as=as;
contvariables=as.ObtenerContadorVariables();
contetiquetas=as.ObtenerContadorEtiquetas();
variables=as.ObtenerVariables();
etiquetas=as.ObtenerEtiquetas();
}

/**
Esta función recorre el programa y separa la linea cuando encuentra un \n (Enter) y reconoce las lineas que son comentarios
*/
public void run(){
String codigo=new String();
String variable=new String();
String []programa=cadena.split(“\n”);

int nlineas=programa.length;
int linea=1;
int p=lineapp, j=0, k=0, band=0, backslash=0, fnada=0;
if(correr.compareTo(“c”)==0){
while((fin==0)&&(linea<nlineas)){
codigo=””;
variable=””;
try{
if((programa[j].compareTo(“”)==0)||(programa[j].startsWith(“//”)==true)){
codigo=””;
variable=””;
fnada=1;
}
else{
codigo=programa[j].substring(0,programa[j].indexOf(” “));//obtiene primer operando
codigo=codigo.trim();
variable=programa[j].substring(programa[j].indexOf(” “));//obtiene segundo operando
variable=variable.trim();
fnada=0;
}
if(fnada==0){
instruccion.setText(programa[j]);
linea=this.Ejecucion(codigo, variable, linea);
linea++;
}
else{
linea++;
}
if(fin==1){
linea=nlineas+1;
}
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
j=linea;
}
catch(StringIndexOutOfBoundsException e){
}
}
}
else{
if((fin==0)&&(lineapp<nlineas)){
codigo=””;
variable=””;
try{
if((programa[p].compareTo(“”)==0)||(programa[p].startsWith(“//”)==true)){
codigo=””;
variable=””;
fnada=1;
}
else{
codigo=programa[p].substring(0,programa[p].indexOf(” “));//obtiene primer operando
codigo=codigo.trim();
variable=programa[p].substring(programa[p].indexOf(” “));//obtiene segundo operando
variable=variable.trim();
fnada=0;
}
if(fnada==0){
instruccion.setText(programa[p]);
lineapp=this.Ejecucion(codigo, variable, lineapp);
lineapp++;
}
else
lineapp++;
if(fin==1){
lineapp=nlineas+1;
}
p=lineapp;
}
catch(StringIndexOutOfBoundsException e){
}
}
}
}

/**
Esta función es la que hace que los comandos de chlenguaje se ejecuten de la manera correcta, inicialice la variables, asigne las etiquetas
* y haga todas las operaciones asignadas a cada comando
*/
public int Ejecucion(String codigo, String variable, int linea){
String operador1=new String();
String operador2=new String();
String operador3=new String();
String lea=new String();

if(codigo.compareTo(“”)==0){
return linea;
}
//analiza si codigo corresponde a la instruccion “nueva”
else if(codigo.compareTo(“nueva”)==0){
try{
operador1=variable.substring(0,variable.indexOf(” “));//obtiene primer operando
operador1=operador1.trim();
operador2=variable.substring(variable.indexOf(” “));//obtiene segundo operando
operador2=operador2.trim();
try{
operador3=operador2.substring(operador2.indexOf(” “));//obtiene tercer operando (opcional)
operador3=operador3.trim();
operador2=operador2.substring(0,operador2.indexOf(” “));
operador2.trim();
}
catch(StringIndexOutOfBoundsException e){
}
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
if(variables[i][1].compareTo(operador2)==0){
variables[i][0]=operador1;
variables[i][1]=operador2;
if(operador3.compareTo(“”)!=0)
variables[i][2]=operador3;
else if(operador2.compareTo(“I”)==0)
variables[i][2]=String.valueOf(0);
else if(operador2.compareTo(“R”)==0)
variables[i][2]=String.valueOf(0);
else if(operador2.compareTo(“C”)==0)
variables[i][2]=” “;
}
}
}
}
catch(StringIndexOutOfBoundsException e){
}
}
//analiza si codigo corresponde a la instruccion “etiqueta”
else if(codigo.compareTo(“etiqueta”)==0){
try{
operador1=variable.substring(0,variable.indexOf(” “));//obtiene primer operando
operador1=operador1.trim();
operador2=variable.substring(variable.indexOf(” “));//obtiene segundo operando
operador2=operador2.trim();
for(int i=0;i<contetiquetas;i++){
if(etiquetas[i][0].compareTo(operador1)==0){
etiquetas[i][0]=operador1;
etiquetas[i][1]=operador2;
}
}
}
catch(StringIndexOutOfBoundsException e){
}
}
//analiza si codigo corresponde a la instruccion “vayasi”
else if(codigo.compareTo(“vayasi”)==0){
try{
operador1=variable.substring(0,variable.indexOf(” “));//obtiene primer operando
operador1=operador1.trim();
operador2=variable.substring(variable.indexOf(” “));//obtiene segundo operando
operador2=operador2.trim();
if(acumulador==0){
return linea;
}
else if(acumulador>0){
for(int i=0;i<contetiquetas;i++){
if(etiquetas[i][0].compareTo(operador1)==0){
return (Integer.parseInt(etiquetas[i][1])-2);
}
}
}
else{
for(int i=0;i<contetiquetas;i++){
if(etiquetas[i][0].compareTo(operador2)==0)
return (Integer.parseInt(etiquetas[i][1])-2);
}
}
}
catch(StringIndexOutOfBoundsException e){
}
}
//analiza si codigo corresponde a la instruccion “nueva”
else if(codigo.compareTo(“vaya”)==0){
try{
operador1=variable;
for(int i=0;i<contetiquetas;i++){
if(etiquetas[i][0].compareTo(operador1)==0)
return Integer.parseInt(etiquetas[i][1])-2;
}
}
catch(StringIndexOutOfBoundsException e){
}
}
//analiza si codigo corresponde a la instruccion “cargue”,”sume”,”reste”,”multiplique”,”divida”,”potencia”,”modulo”,”lea” o “almacene”
else if(codigo.compareTo(“cargue”)==0){
try{
operador1=variable;
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
acumulador=Double.parseDouble(variables[i][2]);
acum.setText(String.valueOf(acumulador));
}
}
}
catch(StringIndexOutOfBoundsException e){
}
}
else if(codigo.compareTo(“sume”)==0){
try{
operador1=variable;
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
acumulador=acumulador+Double.parseDouble(variables[i][2]);
acum.setText(String.valueOf(acumulador));
}
}
}
catch(StringIndexOutOfBoundsException e){
}
}
else if(codigo.compareTo(“reste”)==0){
try{
operador1=variable;
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
acumulador=acumulador-Double.parseDouble(variables[i][2]);
acum.setText(String.valueOf(acumulador));
}
}
}
catch(StringIndexOutOfBoundsException e){
}
}
else if(codigo.compareTo(“multiplique”)==0){
try{
operador1=variable;
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
acumulador=acumulador*Double.parseDouble(variables[i][2]);
acum.setText(String.valueOf(acumulador));
}
}
}
catch(StringIndexOutOfBoundsException e){
}
}
else if(codigo.compareTo(“divida”)==0){
try{
operador1=variable;
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
if(Double.parseDouble(variables[i][2])!=0){
acumulador=acumulador/Double.parseDouble(variables[i][2]);
acum.setText(String.valueOf(acumulador));
}
else{
JOptionPane.showMessageDialog(null,”Division por cero”);
fin=1;
}
}
}
}
catch(StringIndexOutOfBoundsException e){
}
}
else if(codigo.compareTo(“potencia”)==0){
try{
operador1=variable;
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
acumulador=Math.pow(acumulador,Double.parseDouble(variables[i][0]));
acum.setText(String.valueOf(acumulador));
}
}
}
catch(StringIndexOutOfBoundsException e){
}
}
else if(codigo.compareTo(“modulo”)==0){
try{
operador1=variable;
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
if(Double.parseDouble(variables[i][2])!=0){
acumulador=acumulador%Double.parseDouble(variables[i][2]);
acum.setText(String.valueOf(acumulador));
}
else{
JOptionPane.showMessageDialog(null,”Division por cero”);
fin=1;
}
}
}
}
catch(StringIndexOutOfBoundsException e){
}
}
else if(codigo.compareTo(“lea”)==0){
try{
operador1=variable;
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
lea=JOptionPane.showInputDialog(null,”Variable “+variables[i][0]);
if(variables[i][1].compareTo(“R”)==0){
fin=1;
while(fin==1){
try{
double a=Double.parseDouble(lea);
variables[i][2]=lea;
fin=0;
}
catch(NumberFormatException e){
lea=JOptionPane.showInputDialog(null,”No es un valor real”);
fin=1;
}
}
}
else if(variables[i][1].compareTo(“I”)==0){
fin=1;
while(fin==1){
try{
int a=Integer.parseInt(lea);
variables[i][2]=lea;
fin=0;
}
catch(NumberFormatException e){
lea=JOptionPane.showInputDialog(null,”No es un valor entero”);
fin=1;
}
}
}
else
variables[i][2]=lea;
}
}
fin=0;
}
catch(StringIndexOutOfBoundsException e){
}
}
else if(codigo.compareTo(“almacene”)==0){
try{
operador1=variable;
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
variables[i][2]=String.valueOf(acumulador);
}
}
}
catch(StringIndexOutOfBoundsException e){
}
}
//analiza si codigo corresponde a la instruccion “muestre” o “imprima”,
else if(codigo.compareTo(“muestre”)==0){
try{
int fac=0;
operador1=variable;
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
pantalla.setText(pantalla.getText()+”\n”+String.valueOf(variables[i][2]));
fac=1;
}
}
if(fac==0)
pantalla.setText(pantalla.getText()+”\n”+String.valueOf(acumulador));
}
catch(StringIndexOutOfBoundsException e){
}
}
else if(codigo.compareTo(“imprima”)==0){
try{
int fac=0;
operador1=variable;
for(int i=0;i<contvariables;i++){
if(variables[i][0].compareTo(operador1)==0){
imprimir.setText(imprimir.getText()+”\n”+String.valueOf(variables[i][2]));
fac=1;
}
}
if(fac==0)
imprimir.setText(imprimir.getText()+”\n”+String.valueOf(acumulador));
}
catch(StringIndexOutOfBoundsException e){
}
}
//analiza si codigo corresponde a la instruccion “retorne”
else if(codigo.compareTo(“retorne”)==0){
fin=1;
return linea;
}
return linea;
}

}

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s